The Linux boot header includes information on the kernel's desired load address and alignment. Add support for that. --- ChangeLog | 6 ++++++ include/grub/i386/linux.h | 28 +++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 313d135..943efe1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-02-06 Matthew Garrett <m...@redhat.com> + + * include/grub/i386/linux.h (linux_kernel_header): Update to + boot protocol 2.10. + (linux_kernel_params): Likewise + 2012-02-05 Vladimir Serbinenko <phco...@gmail.com> * grub-core/commands/minicmd.c (GRUB_MOD_INIT): Add missing SIZE diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h index 6aa2391..8e27b93 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -86,7 +86,7 @@ enum GRUB_VIDEO_LINUX_TYPE_SIMPLE = 0x70 /* Linear framebuffer without any additional functions. */ }; -/* For the Linux/i386 boot protocol version 2.03. */ +/* For the Linux/i386 boot protocol version 2.10. */ struct linux_kernel_header { grub_uint8_t code1[0x0020]; @@ -131,8 +131,16 @@ struct linux_kernel_header grub_uint32_t initrd_addr_max; /* Highest address for initrd */ grub_uint32_t kernel_alignment; grub_uint8_t relocatable; - grub_uint8_t pad[3]; + grub_uint8_t min_alignment; + grub_uint8_t pad[2]; grub_uint32_t cmdline_size; + grub_uint32_t hardware_subarch; + grub_uint64_t hardware_subarch_data; + grub_uint32_t payload_offset; + grub_uint32_t payload_length; + grub_uint64_t setup_data; + grub_uint64_t pref_address; + grub_uint64_t init_size; } __attribute__ ((packed)); /* Boot parameters for Linux based on 2.6.12. This is used by the setup @@ -276,10 +284,20 @@ struct linux_kernel_params grub_uint32_t ramdisk_size; /* initrd size */ grub_uint32_t bootsect_kludge; /* obsolete */ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ - grub_uint16_t pad1; /* Unused */ + grub_uint8_t ext_loader_ver; /* Extended loader version */ + grub_uint8_t ext_loader_type; /* Extended loader type */ grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ - - grub_uint8_t pad2[164]; /* 22c */ + grub_uint32_t initrd_addr_max; /* Maximum initrd address */ + grub_uint32_t kernel_alignment; /* Alignment of the kernel */ + grub_uint8_t relocatable_kernel; /* Is the kernel relocatable */ + grub_uint8_t pad1[3]; + grub_uint32_t cmdline_size; /* Size of the kernel command line */ + grub_uint32_t hardware_subarch; + grub_uint64_t hardware_subarch_data; + grub_uint32_t payload_offset; + grub_uint32_t payload_length; + grub_uint64_t setup_data; + grub_uint8_t pad2[120]; /* 258 */ struct grub_e820_mmap e820_map[GRUB_E820_MAX_ENTRY]; /* 2d0 */ } __attribute__ ((packed)); -- 1.7.7.6 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel