启动扇区代码分析 FreeBSD 5.2.1 boot0( 八 )


os_dos: .ascii "DO"; .byte "S"|0x80
os_linux: .ascii "Linu"; .byte "x"|0x80
os_freebsd: .ascii "Free"
os_bsd: .ascii "BS"; .byte "D"|0x80

.org PRT_OFF-0xe,0x90

.word B0MAGIC # Magic number

#
# These values are sometimes changed before writing back to the drive
# Be especially careful that nxtdrv: must come after drive:, as it
# is part of the same string.
#
drive:
.ascii "Drive "
nxtdrv:
.byte 0x0 # Next drive number
opt:
.byte 0x0 # Option
setdrv:
.byte 0x80 # Drive to force
flags:
.byte FLAGS # Flags
ticks:
.word TICKS # Delay

#
# here is the 64 byte partition table that fdisk would fiddle with.
#
partbl: .fill 0x40,0x1,0x0 # Partition table
.word MAGIC # Magic number MAGIC=0x55AA
以上保留0x40(十进制为64)个字节“伪”分区空间,且全部清零 。partbl相对引导
山区代码的位置为0x1BE(见下图) 。
MBR(Main Boot Record),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0
柱面1扇区 。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节(偏移
0--偏移1BDH),另外的64个字节(偏移1BEH--偏移1FDH)交给了DPT(Disk Partition Table
硬盘分区表)(见下表),最后两个字节"0x55aa"(偏移1FEH-偏移1FFH)是分区的结束标志 。
这个整体构成了硬盘的主引导扇区 。大致的结构如图(二):详见王巍的文章:《第一讲
操作系统简介及Win98安装》

0000┏━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ 主引导记录(MBR) 446字节 ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
01BD┃ ┃
┣━━━━━━━━━━━━━━━━━━┫
01BE┃ 分区信息1(16字节) ┃<--partbl指向这里 。
┣━━━━━━━━━━━━━━━━━━┫
01CE┃ 分区信息2(16字节) ┃
┣━━━━━━━━━━━━━━━━━━┫
01DE┃ 分区信息3(16字节) ┃
┣━━━━━━━━━━━━━━━━━━┫
01EE┃ 分区信息4(16字节) ┃
┣━━━━━━━━┳━━━━━━━━━┫
01FE┃ 0x55 ┃ 0xAA ┃
┗━━━━━━━━┻━━━━━━━━━┛

图(三)

其中,分区信息1-4的内容如下图所示:
偏移
长度
所表达的意义
0
字节
分区状态:如0-->非活动分区
80--> 活动分区
1
字节
该分区起始头(HEAD)
2

该分区起始扇区和起始柱面
4
字节
该分区类型:如82--> Linux Native分区
83--> Linux Swap 分区
5
字节
该分区终止头(HEAD)
6

该分区终止扇区和终止柱面
8
双字
该分区起始绝对分区
C
双字
该分区扇区数

图(四)
注:任何转载或摘抄请保留作者信息和注明文章出处(中文FreeBSD用户组 http://www.cnfug.org )

推荐阅读