[PATCH] i386: extend bzImage protocol for relocatable protected mode kernel
Extend bzImage protocol to enable bootloaders to load a completely relocatable bzImage. Now protected mode component of kernel is also relocatable and a boot-loader can load the protected mode component at a differnt physical address than 1MB. (If kernel was built with CONFIG_RELOCATABLE) Kexec can make use of it to load this kernel at a different physical address to capture kernel crash dumps. Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org>
This commit is contained in:
parent
e69f202d0a
commit
be274eeaf2
2 changed files with 16 additions and 1 deletions
|
@ -35,6 +35,8 @@ Protocol 2.03: (Kernel 2.4.18-pre1) Explicitly makes the highest possible
|
||||||
initrd address available to the bootloader.
|
initrd address available to the bootloader.
|
||||||
|
|
||||||
Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
|
Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
|
||||||
|
Protocol 2.05: (Kernel 2.6.20) Make protected mode kernel relocatable.
|
||||||
|
Introduce relocatable_kernel and kernel_alignment fields.
|
||||||
|
|
||||||
|
|
||||||
**** MEMORY LAYOUT
|
**** MEMORY LAYOUT
|
||||||
|
@ -129,6 +131,8 @@ Offset Proto Name Meaning
|
||||||
0226/2 N/A pad1 Unused
|
0226/2 N/A pad1 Unused
|
||||||
0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line
|
0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line
|
||||||
022C/4 2.03+ initrd_addr_max Highest legal initrd address
|
022C/4 2.03+ initrd_addr_max Highest legal initrd address
|
||||||
|
0230/4 2.04+ kernel_alignment Physical addr alignment required for kernel
|
||||||
|
0234/1 2.04+ relocatable_kernel Whether kernel is relocatable or not
|
||||||
|
|
||||||
(1) For backwards compatibility, if the setup_sects field contains 0, the
|
(1) For backwards compatibility, if the setup_sects field contains 0, the
|
||||||
real value is 4.
|
real value is 4.
|
||||||
|
|
|
@ -81,7 +81,7 @@ start:
|
||||||
# This is the setup header, and it must start at %cs:2 (old 0x9020:2)
|
# This is the setup header, and it must start at %cs:2 (old 0x9020:2)
|
||||||
|
|
||||||
.ascii "HdrS" # header signature
|
.ascii "HdrS" # header signature
|
||||||
.word 0x0204 # header version number (>= 0x0105)
|
.word 0x0205 # header version number (>= 0x0105)
|
||||||
# or else old loadlin-1.5 will fail)
|
# or else old loadlin-1.5 will fail)
|
||||||
realmode_swtch: .word 0, 0 # default_switch, SETUPSEG
|
realmode_swtch: .word 0, 0 # default_switch, SETUPSEG
|
||||||
start_sys_seg: .word SYSSEG
|
start_sys_seg: .word SYSSEG
|
||||||
|
@ -160,6 +160,17 @@ ramdisk_max: .long (-__PAGE_OFFSET-(512 << 20)-1) & 0x7fffffff
|
||||||
# The highest safe address for
|
# The highest safe address for
|
||||||
# the contents of an initrd
|
# the contents of an initrd
|
||||||
|
|
||||||
|
kernel_alignment: .long CONFIG_PHYSICAL_ALIGN #physical addr alignment
|
||||||
|
#required for protected mode
|
||||||
|
#kernel
|
||||||
|
#ifdef CONFIG_RELOCATABLE
|
||||||
|
relocatable_kernel: .byte 1
|
||||||
|
#else
|
||||||
|
relocatable_kernel: .byte 0
|
||||||
|
#endif
|
||||||
|
pad2: .byte 0
|
||||||
|
pad3: .word 0
|
||||||
|
|
||||||
trampoline: call start_of_setup
|
trampoline: call start_of_setup
|
||||||
.align 16
|
.align 16
|
||||||
# The offset at this point is 0x240
|
# The offset at this point is 0x240
|
||||||
|
|
Loading…
Reference in a new issue