build.c
arg1 arg2 arg3 arg4
参数: boot/bootsect boot/setup zBoot/zSystem CURRENT
1. 先判断参数4
如果arg4==CURRENT, 则取major_root与minor_root为/的设备号
如果arg4==FLOPPY , 则取major_root与minor_root为FLOPPY的设备号
默认 ,
则取major_root与minor_root都为0
如果arg4不存在,则取major_root与minor_root都为DEFAULT
L145-L147 会把这两个值写到bootsect的508 509去。
其实是最终生成的zImage的508 509去。
2. 对参数1-->boot/bootsect的处理
a. 打开
boot/bootsect,读取MINIX_HEADER=32个字节
b. 判断前4个字节是不是[0-3]-->01 03 10 04
c.
判断[4-7]-->20 00 00 00,即mini头的长度0x20=32
d. 不关心[8-11],判断 [12-15]-->data segment [16-19]-->bss 是不是都为0
e. 读取剩余的字节,若剩余的字节不为512,则报错
f. 修改508 509这两个字节,然后写到输出
cong@msi:/work/qemu/x86/linux$ ls -l boot/bootsect
-rwxrwxr-x 1 cong cong 544 Sep 29 14:24 boot/bootsect -->512+32=544
3. 对参数2-->boot/setup的处理
a. 跟boot/bootsect的处理一样,打开文件后判断前32个字节的格式
b. 将扣除这32个字节的剩余部分写到输出,不足2048的部分填充0
剩余部分不能大于SETUP_SECTS*512=4*512=2048
cong@msi:/work/qemu/x86/linux$ ls -l boot/setup
-rwxrwxr-x 1 cong cong 2012 Sep 29 14:24 boot/setup
4. 对参数3-->zBoot/zSystem的处理
我修改了一下,这儿是直接原封不动的写的输出
阅读(869) | 评论(0) | 转发(0) |