PC机加电ROM BIOS自检后,引导扇区(包含bootsect)由BIOS加载到内存0x7C00处,然后将自己移动到内存0x90000处。然后将setup模块(由setup.s编译成)从磁盘加载到内存,紧接着bootsect的后面位置(0x90200),然后利用BIOS中断0x13取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示"Loading system..."字符串,再将system模块从磁盘加载到内存0x10000开始的地方。随后确定根文件系统的设备号,若没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的类型和种类并保存其设备号于root_dev(引导块的508地址处),最后长跳转到setup程序的开始处(0x90200)执行setup程序。执行过程表示如下:
注:在程序中硬件设备命名方式如下:1-内存,2-磁盘,3-硬盘,4-ttyx,5-tty,6-并行口,7-非命名管道。由于一个硬盘可以有1~4个分区,因此硬盘还依据分区的不同用此设备号进行指定分区,因此硬盘的逻辑设备号由以下方式构成:设备号=主设备号*256 + 次设备号。两个硬盘的所有逻辑设备号如下表:
逻辑设备号 |
对应设备文件 |
说明 |
0x300 |
/dev/hd0 |
代表整个第一个硬盘 |
0x301 |
/dev/hd1 |
表示第1个硬盘的第一个分区 |
0x304 |
/dev/hd4 |
表示第一个硬盘的第4个分区 |
0x305 |
/dev/hd5 |
代表整个第2个硬盘 |
0x306 |
/dev/hd6 |
表示第2个硬盘的第1个分区 |
0x309 |
/dev/hd9 |
表示第2个硬盘的第4个分区 |
说明:要熟悉系统调用号,及其中断时寄存器设置。。。
下面将进行setup.s的分析。。。。:)