【发布时间】:2021-12-11 05:26:06
【问题描述】:
我目前正在开发一个简单的操作系统(GitHub:https://github.com/Nutty000/PlanetOS)
我想让操作系统在真实硬件上运行,但由于文件系统的原因,我无法做到这一点...我希望我的操作系统基于 FAT32 文件系统,但我需要以某种方式不覆盖MBR 上的 BPB。我想过编写一个程序来复制现有的 BPB 并将其放在我的 .bin 可引导文件的开头,但是:
-
我不知道如何制作那个程序,磁盘相关的东西对我来说太难和困惑了
-
BPB 太大,如果我复制它,那么我的引导加载程序代码将不适合 512 字节
-
我不知道我应该复制现有 MBR 代码的哪些部分
我试图解决这个问题好几个小时,如果我犯了任何语法错误,请见谅。
【问题讨论】:
-
当 BIOS 在线性地址 0x07C00 加载引导扇区时,BPB 已经存在于 0x07C0B,其大小为 79 字节。
-
将现有的 BPB 复制到您的
.bin应该像dd conv=notrunc一样完成,就地覆盖而不是附加。它不会改变文件大小。查看一些示例 MBR,它们为 BPB 留出了空间,在它们jmp结束的开头附近有一堆dw数据字段。例如Is the BPB necessary for a bootloader to load correctly in Bochs? / Why does my bootloader code works everywhere except my laptop if I have a BIOS Parameter Block? / this
标签: assembly bootloader osdev fat32 mbr