三、引导扇区程序 ( Boot Sector )

类别:软件工程 点击:0 评论:0 推荐:

    引导扇区程序是位于启动盘最前面的一个扇区中的一段小程序,其大小不超过512字节即一个扇区的长度,也称之为引导记录。


    引导记录负责从PCBIOS的启动代码中接管PC的控制权,为加载特定的操作系统做准备。所以每种操作系统的引导记录都是特定的。虽说有类似GRUB和LILO之类的通用引导程序,但它们针对的都是Linux系列的操作系统,并不是真的正通用引导程序。

    Sinos就是从引导记录出发的,采用纯汇编编写。

    由于引导记录最长不能超过512个字节,所以针对不同的启动设备、文件系统都要有不同的代码版本,Sinos目前实现的引导记录是针对硬盘启动的,而且启动盘文件系统为FAT16。

    在读取磁盘的方法上,Sinos采用了EBIOS 调用,int 13h的42h号子功能。该子功能支持大硬盘的LBA地址模式。使用LBA使得硬盘操作得以简化,避免了传统CHS模式的繁琐计算,更重要的是,LBA模式没有CHS模式的8.4GB的容量限制,可以应用在现代大容量硬盘上。

    因为是硬盘引导程序,所以Sinos引导记录的第一部分就是搜索硬盘MBR ,寻找活动分区,以便确定自身处于硬盘的什么位置。

    第二步是根据读取到的各类参数计算出FAT16文件系统的各项数值,如FAT表位置、根目录位置、簇大小、数据区位置等等,以便读取文件系统中的文件。

    然后要做的是搜索启动盘的根目录,找到实模式初始化程序所在的文件,目前文件名为“booter.bin”。这里要求初始化程序必须位于启动盘根目录,是因为引导记录容量非常有限,不太可能也必要实现递归的子目录搜索模块。

    找到根目录项后就得到了该文件在磁盘中的起始簇号,然后根据这个起始簇号和FAT表的内容就可以得到完整的文件内容。关于读取文件的细节,属于FAT文件系统规范的内容,这里不再赘述。

    当PCBIOS启动完成后,把引导记录载入到0:7c00h处,然远跳转到0:7c00h,这样就完成了控制权的转移,系统由引导记录控制。Sinos引导记录按上文所述的步骤把初始化程序加载到0:7e00h处,然后同样跳转到0:7e00h,把控制权交给一下阶段程序。

    与BIOS最初的跳转不同的是,Sinos引导记录还把文件系统的各项参数,放在六个通用寄存器中传递给初始化程序,分别放在EAX、EBX、ECX、EDX、SI和DI中。

    由于使用了EAX之类的扩展寄存器,所以要求CPU一定要是80386或以上的CPU,但这一点与Sinos保护模式操作系统的定位一致。

    在写入引导时,由于还没有Sinos的安装程序,所以必需借助DOS操作系统来完成。通过DOS系统中的DEBUG程序,可以把引导记录写入指定的磁盘,具体方法请见所附源码中的write.bat程序。

    当然,使用DOS来安装系统不仅仅是想使用其DEBUG程序,关键是DOS带有完整的硬盘分区和格式化工具(Fdisk和Format)。在FAT16文件系统中,引导记录并不是完全由程序组成,最初的3eh个字节记录了许多在格式化过程中获得的参数,而目前Sinos没有格式化磁盘的能力,所以必需通过DOS的Format程序来完成文件系统的建立。write.bat通过DEBUG所做的,是把DBR中DOS的引导程序替换成Sinos的引导程序,而保持其它部分不变。

本文地址:http://com.8s8s.com/it/it33966.htm