我正在关注BrokenThorn 教程关于操作系统开发。
本教程中使用 Windows,但我决定使用 Ubuntu,因为构建过程更方便。
到目前为止,我只有主引导记录的程序。
我使用 bash 脚本来构建
nasm -f bin -o boot.bin boot.asm
dd status=noxfer conv=notrunc if=boot.bin of=boot.flp
qemu-system-i386 -fda boot.flp
现在我想加载第二阶段的引导加载程序。在教程中,软盘有一个 FAT12 文件系统。所以我尝试在构建脚本中调整它
mkfs.vfat -F 12 ./boot.flp
sudo mount -o loop ./boot.flp /media/floppy1/
nasm -f bin -o STAGE2.SYS stage2.asm
sudo cp ./STAGE2.SYS /media/floppy1/
sudo umount /media/floppy1/
nasm -f bin -o boot.bin boot.asm
dd status=noxfer conv=notrunc if=boot.bin of=boot.flp
qemu-system-i386 -fda boot.flp
镜像仍可启动,但当我尝试将镜像作为循环设备打开时,Ubuntu 会抛出一个错误
mount: /media/floppy1:错误的 fs 类型、错误的选项、/dev/loop16 上的错误超级块、缺少代码页或辅助程序,或者其他错误。
所以我认为 FAT12 已损坏。
如何使用自己的主引导记录设置可用的 FAT12 软盘映像?
答案1
在创建文件系统之前,您必须对映像进行分区,并在您的情况下将其作为具有可启动标志的主分区
答案2
我通过将 bios 参数块中的内容作为选项添加到文件系统命令。无需创建分区。
mkfs.vfat -F 12 ./boot.flp -f 2 -h 0 -i 0xa0a1a2a3 -I -n "NAME OF OS " -r 224 -R 1 -s 1 -S 512