一、内核映像必须包含Multiboot header。
(1)这个Multiboot header必须完全位于内核映像的最前面8192字节(8KB)内。
(2)而且必须是4字节对齐的。
二、The layout of Multiboot header
Offset Type Field Name Note 0 u32 magic required 4 u32 flags required 8 u32 checksum required 12 u32 header addr if flags[16] is set 16 u32 load addr if flags[16] is set 20 u32 load end addr if flags[16] is set 24 u32 bss end addr if flags[16] is set 28 u32 entry addr if flags[16] is set 32 u32 mode type if flags[2] is set 36 u32 width if flags[2] is set 40 u32 height if flags[2] is set 44 u32 depth if flags[2] is set
上面标明“required”的三个部分是必须的,包括:
1.“magic”(其值必须是0x1BADB002,用来表示这是一个Multiboot header);
2.“flags”(略);
3.“checksum”(checksum+magic+flags的值必须等于无符号整形0,即32个bit位全0)。
更详细的,参考http://www.gnu.org/software/grub/manual/multiboot/multiboot.pdf
其他几点:
1.如何指定内核被加载到的内存位置?——在linker script中指定
...