0.11的bootsect是用as86编写的,其实直到2.4版本才同意用as编写的
bootsect的功能:开机后,ROM BIOS自检后,将引导扇区代码bootsect加载到0x7c00处。
bootsect执行期间:
1.将bootsect自己搬到0x90000处
2.将setup(第2-5,共4个扇区)搬到bootsect之后,即0x90200处
3.将system模块加载到0x10000处
4.确定根文件系统所在的设备号,若没有指定,根据每磁道扇区数量判断盘的类型和种类,存放在bootsect的508,509处,此处的数值根据
自己使用的设备真是情况修改
5.510,511处存放0xaa55表明是引导扇区
所遇到问题:
1.SYSSIZE = 0x3000表明system模块的长度,真实长度为(0x3000<<16) = 192K
2.ROOT_DEV = 0x306,Linus当年的根文件系统所在第2个硬盘的第1个分区
Linux系统老式的设备号命名,dev_no = ((major << 8) + minor)
major的意义,1--内存,2--磁盘,3--硬盘,4--ttyx,5--tty,6--并行口,7--非命名管道
3.子程序read_it的作用为将system加载到0x10000处
4.程序最后使用段间跳jmpi 0, 0x9020调到setup处,至此bootsect结束