diff options
author | Vivek Goyal <vgoyal@in.ibm.com> | 2006-12-06 20:14:04 -0500 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-12-06 20:14:04 -0500 |
commit | be274eeaf20b4c7155242645d5e2c48b023e609b (patch) | |
tree | 2c56b03d80ad1e9e376b286ddfa28fffe0606901 | |
parent | e69f202d0a1419219198566e1c22218a5c71a9a6 (diff) |
[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>
-rw-r--r-- | Documentation/i386/boot.txt | 4 | ||||
-rw-r--r-- | arch/i386/boot/setup.S | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt index c51314b1a463..cb28254f1550 100644 --- a/Documentation/i386/boot.txt +++ b/Documentation/i386/boot.txt | |||
@@ -35,6 +35,8 @@ Protocol 2.03: (Kernel 2.4.18-pre1) Explicitly makes the highest possible | |||
35 | initrd address available to the bootloader. | 35 | initrd address available to the bootloader. |
36 | 36 | ||
37 | Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes. | 37 | Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes. |
38 | Protocol 2.05: (Kernel 2.6.20) Make protected mode kernel relocatable. | ||
39 | Introduce relocatable_kernel and kernel_alignment fields. | ||
38 | 40 | ||
39 | 41 | ||
40 | **** MEMORY LAYOUT | 42 | **** MEMORY LAYOUT |
@@ -129,6 +131,8 @@ Offset Proto Name Meaning | |||
129 | 0226/2 N/A pad1 Unused | 131 | 0226/2 N/A pad1 Unused |
130 | 0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line | 132 | 0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line |
131 | 022C/4 2.03+ initrd_addr_max Highest legal initrd address | 133 | 022C/4 2.03+ initrd_addr_max Highest legal initrd address |
134 | 0230/4 2.04+ kernel_alignment Physical addr alignment required for kernel | ||
135 | 0234/1 2.04+ relocatable_kernel Whether kernel is relocatable or not | ||
132 | 136 | ||
133 | (1) For backwards compatibility, if the setup_sects field contains 0, the | 137 | (1) For backwards compatibility, if the setup_sects field contains 0, the |
134 | real value is 4. | 138 | real value is 4. |
diff --git a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S index 9aa8b0518184..06edf1c66242 100644 --- a/arch/i386/boot/setup.S +++ b/arch/i386/boot/setup.S | |||
@@ -81,7 +81,7 @@ start: | |||
81 | # This is the setup header, and it must start at %cs:2 (old 0x9020:2) | 81 | # This is the setup header, and it must start at %cs:2 (old 0x9020:2) |
82 | 82 | ||
83 | .ascii "HdrS" # header signature | 83 | .ascii "HdrS" # header signature |
84 | .word 0x0204 # header version number (>= 0x0105) | 84 | .word 0x0205 # header version number (>= 0x0105) |
85 | # or else old loadlin-1.5 will fail) | 85 | # or else old loadlin-1.5 will fail) |
86 | realmode_swtch: .word 0, 0 # default_switch, SETUPSEG | 86 | realmode_swtch: .word 0, 0 # default_switch, SETUPSEG |
87 | start_sys_seg: .word SYSSEG | 87 | start_sys_seg: .word SYSSEG |
@@ -160,6 +160,17 @@ ramdisk_max: .long (-__PAGE_OFFSET-(512 << 20)-1) & 0x7fffffff | |||
160 | # The highest safe address for | 160 | # The highest safe address for |
161 | # the contents of an initrd | 161 | # the contents of an initrd |
162 | 162 | ||
163 | kernel_alignment: .long CONFIG_PHYSICAL_ALIGN #physical addr alignment | ||
164 | #required for protected mode | ||
165 | #kernel | ||
166 | #ifdef CONFIG_RELOCATABLE | ||
167 | relocatable_kernel: .byte 1 | ||
168 | #else | ||
169 | relocatable_kernel: .byte 0 | ||
170 | #endif | ||
171 | pad2: .byte 0 | ||
172 | pad3: .word 0 | ||
173 | |||
163 | trampoline: call start_of_setup | 174 | trampoline: call start_of_setup |
164 | .align 16 | 175 | .align 16 |
165 | # The offset at this point is 0x240 | 176 | # The offset at this point is 0x240 |