看了于渊写的《自己动手写操作系统》后,想把启动代码由软盘FAT12文件系统迁移到硬盘FAT32文件系统中,毕竟目前软盘几乎已经不再使用了,而硬盘和U盘是主流。基本想法是在实模式下,使用汇编代码,读取硬盘MBR,分析硬盘分区表,找到第一个FAT32活动分区,分析FAT32分区,在该分区中找到OSLOADER.BIN文件,将该OSLOADER.BIN文件加载到内存指定地址,将执行权交给OSLOADER.BIN。
环境:
Ubuntu 14.04
bochs
背景知识:
MBR,即硬盘主引导记录,是硬盘的第一个扇区,MBR扇区共512字节,前446字节为引导代码,之后64字节是分区表项,最后两字节是有效标志0xAA55,即MBR结构如下:
0x0000~0x01BD: 主引导程序
0x01BE~0x01FD:主分区表
0x01FE~0x01FF:有效标记,0xAA55
主分区表由4项组成,每项16字节,共64字节,每项描述一个分区的基本信息。
16字节分区表项结构:
0x00:引导指示符,指明该分区是否是活动分区
0x01:开始磁头
0x02:开始扇区,只用了0~5位,后面2位被开始柱面所使用
0x03:开始柱面,使用了开始扇区的最后2位,共10位,最大值1023