最近在研究自制操作系统,看了田宇的《一个64位操作系统的设计与实现》 。书写的很好,我的踩坑也很多!
当我写到Loader加载程序检测跳转时一直没法成功加载Loader
以下是我的一些踩坑,可供参考
一、厂商名称
因为打算参考在此基础上写一些东西,我便改了作者的最初的名字’MINEboot’,超过了8位。后来发现FAT12文件系统引导扇区结构长度是固定的,不能改变。
所以即便自己取名时也要取成8位,不够的用空格代替
同样,像后面的文件系统类型,8位,要写成‘FAT12 ’,空格不能少
二、挂载命令
书上的挂载命令是
mount ../bochs-2.6.8/boot.img /media/ -t vfat -o loop
因为权限问题,我使用sudo,但是还是没法使用,会报错
首先要自创/media/文件,可能还需要root权限
我还分了一个img区,即/media/img
sudo mkdir /media/img
还是同样报错
我上网查询,发现另一个命令
sudo mount -o loop ./bochs-2.6.8/boot.img /media/img
这样就可以挂载不报错了,大家可以试试这个,作者用的centos 6 ,不知道是不是这个原因
-t vfat 系统可以自己识别就可以不写了,自动识别可能正确性会更高一点,保险一些
然后总的命令就是
sudo mount -o loop ./bochs-2.6.8/boot.img /media/img sudo cp loader.bin /media/img sudo sync sudo umount /media/img
然后就成功运行了
彩蛋
因为这个东西困扰了我很久,顺便补充一些
1、更改boot.asm文件后记得重新生成bin文件
不然还是原来的
生成命令
nasm boot.asm -o boot.bin
2、boot.img格式化
挂载出错的时候,我出现过loader.bin已经在boot.img中了。这个时候重新dd写入还是会有些问题。删除img重新生成又会导致会新出现/dev/loop。所以格式化很好用
sudo mkfs.ext4 boot.img
ok,这就是跳转踩坑了
最近在学自制操作系统,会不定期更新笔记,很详细,很适合初学小白。希望大家多多支持哦~