内核头的具体定义如下:
偏移/大小 | 协议 | 名称 | 含义 |
01F1/1 | ALL(1) | setup_sects | setup的大小(单位:扇区) |
01F2/2 | ALL | root_flags | 如果置位,以只读方式挂载根(文件系统)。 |
01F4/4 | 2.04+(2) | syssize | 32位部分的大小。(即保护模式部分) 单位是:16个字节 |
01F8/2 | ALL | ram_size | 已经不再使用。仅仅用于bootsect.S(bootsect.S仅仅在老内核里面存在) |
01FA/2 | ALL | vid_mode | 显示模式 |
01FC/2 | ALL | root_dev | 默认的根设备号 |
01FE/2 | ALL | boot_flag | 引导扇区标志:0xAA55 |
0200/2 | 2.00+ | jump | 跳转指令 |
0202/4 | 2.00+ | header | 新版的setup标志:“HdrS” |
0206/2 | 2.00+ | version | 支持的引导协议版本号 |
0208/4 | 2.00+ | realmode_swtch | 内核引导程序钩子(见下面的解释) |
020C/2 | 2.00+ | start_sys_seg | 系统的段地址(0x1000)(已废弃) |
020E/2 | 2.00+ | kernel_version | 指向内核版本字符串的指针 |
0210/1 | 2.00+ | type_of_loader | 内核加载程序的ID号 |
0211/1 | 2.00+ | loadflags | 引导协议标志 |
0212/2 | 2.00+ | setup_move_size | 移到到高内存的大小(用于钩子) |
0214/4 | 2.00+ | code32_start | 内核引导程序钩子(见下面的解释) |
0218/4 | 2.00+ | ramdisk_image | initrd被加载的地址(由内核加载程序设置) |
021C/4 | 2.00+ | ramdisk_size | Initrd的大小(由内核加载程序设置) |
0220/4 | 2.00+ | bootsect_kludge | 已经不再使用。仅仅用于bootsect.S(bootsect.S仅仅在老内核里面存在) |
0224/2 | 2.01+ | heap_end_ptr | 在内存中setup后面可用内存的大小 |
0226/1 | 2.02+(3) | ext_loader_ver | 扩展加载程序的版本 |
0227/1 | 2.02+(3) | ext_loader_type | 扩展加载程序的ID |
0228/4 | 2.02+ | cmd_line_ptr | 执行内核命令行参数的32位指针 |
022C/4 | 2.03+ | ramdisk_max | initrd可以被加载的最大位置 |
0230/4 | 2.05+ | kernel_alignment | 内核需要的物理地址对齐要求 |
0234/1 | 2.05+ | relocatable_kernel | 内核是否是可以重定位的 |
0235/1 | 2.10+ | min_alignment | Minimum alignment, as a power of two |
0236/2 | N/A | pad3 | 未使用 |
0238/4 | 2.06+ | cmdline_size | 内核命令行的最大大小 |
023C/4 | 2.07+ | hardware_subarch | 硬件架构信息 |
0240/8 | 2.07+ | hardware_subarch_data | 硬件架构特有数据 |
0248/4 | 2.08+ | payload_offset | 内核payload的偏移值 |
024C/4 | 2.08+ | payload_length | 内核payload的长度 |
0250/8 | 2.09+ | setup_data | 指向结构体 setup_data的64位指针 |
0258/8 | 2.10+ | pref_address | 内核的(保护模式部分)首选加载位置 |
0260/4 | 2.10+ | init_size | 初始化过程中所需要的内存大小 |
(1) 为了兼容老版本,如果setup_sects为0,意味着它的值是4
(2) 由于2.04版之前的引导协议中,syssize字段的高两个字节并不使用,所以在这些协议中bzImage类型的内核大小是无法确定的。
(3) 在2.02-2.09中被忽略,但是为了安全考虑,依然被设置
如果在偏移0x202出 没有发现“HdrS” (0x53726448)标志,就意味着引导协议是“古老内核版 ”的。在加载这类内核时,就可以做以下断定:
联系客服