GeekOS分析(二)——Fd_boot.asm分析
fd_boot.bin为合成fd.img第一个文件:
fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > $@
所以,首先分析它.
因为mbr中的引导程序会被自动加载到0×07c:0×0000处,所以程序首先将该地址出的数据复制到了0×9000:0×0000处.
然后,开始读取磁盘中的数据.读取的起始扇区号为1,长度为NUM_SETUP_SECTORS,该宏在Makefile中有如下定义:
-DNUM_SETUP_SECTORS=`$(NUMSECS) geekos/setup.bin`
也就是说,程序将setup.bin加载到了内存的0×9020:0×0000处.
接下来,程序加载kernel到内存.读取的起始扇区号为NUM_SETUP_SECTORS+1,长度为NUM_KERN_SECTORS,此宏在Makefile中定义如下:
-DNUM_KERN_SECTORS=`$(NUMSECS) geekos/kernel.bin`
所以,kernel加载到的内存地址为0×1000:0000.
最终,程序跳转到0×9020:0×0000处执行.
参考:
中断调用参考
逻辑地址LBA