mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 14:43:58 +08:00
43fb2387d0
Some people writing boot loaders seem to falsely belief the 32bit zero page is a stable interface for out of tree code like the real mode boot protocol. Add a comment clarifying that is not true. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
100 lines
4.0 KiB
Plaintext
100 lines
4.0 KiB
Plaintext
---------------------------------------------------------------------------
|
|
!!!!!!!!!!!!!!!WARNING!!!!!!!!
|
|
The zero page is a kernel internal data structure, not a stable ABI. It might change
|
|
without warning and the kernel has no way to detect old version of it.
|
|
If you're writing some external code like a boot loader you should only use
|
|
the stable versioned real mode boot protocol described in boot.txt. Otherwise the kernel
|
|
might break you at any time.
|
|
!!!!!!!!!!!!!WARNING!!!!!!!!!!!
|
|
----------------------------------------------------------------------------
|
|
|
|
Summary of boot_params layout (kernel point of view)
|
|
( collected by Hans Lermen and Martin Mares )
|
|
|
|
The contents of boot_params are used to pass parameters from the
|
|
16-bit realmode code of the kernel to the 32-bit part. References/settings
|
|
to it mainly are in:
|
|
|
|
arch/i386/boot/setup.S
|
|
arch/i386/boot/video.S
|
|
arch/i386/kernel/head.S
|
|
arch/i386/kernel/setup.c
|
|
|
|
|
|
Offset Type Description
|
|
------ ---- -----------
|
|
0 32 bytes struct screen_info, SCREEN_INFO
|
|
ATTENTION, overlaps the following !!!
|
|
2 unsigned short EXT_MEM_K, extended memory size in Kb (from int 0x15)
|
|
0x20 unsigned short CL_MAGIC, commandline magic number (=0xA33F)
|
|
0x22 unsigned short CL_OFFSET, commandline offset
|
|
Address of commandline is calculated:
|
|
0x90000 + contents of CL_OFFSET
|
|
(only taken, when CL_MAGIC = 0xA33F)
|
|
0x40 20 bytes struct apm_bios_info, APM_BIOS_INFO
|
|
0x60 16 bytes Intel SpeedStep (IST) BIOS support information
|
|
0x80 16 bytes hd0-disk-parameter from intvector 0x41
|
|
0x90 16 bytes hd1-disk-parameter from intvector 0x46
|
|
|
|
0xa0 16 bytes System description table truncated to 16 bytes.
|
|
( struct sys_desc_table_struct )
|
|
0xb0 - 0x13f Free. Add more parameters here if you really need them.
|
|
0x140- 0x1be EDID_INFO Video mode setup
|
|
|
|
0x1c4 unsigned long EFI system table pointer
|
|
0x1c8 unsigned long EFI memory descriptor size
|
|
0x1cc unsigned long EFI memory descriptor version
|
|
0x1d0 unsigned long EFI memory descriptor map pointer
|
|
0x1d4 unsigned long EFI memory descriptor map size
|
|
0x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb
|
|
0x1e4 unsigned long Scratch field for the kernel setup code
|
|
0x1e8 char number of entries in E820MAP (below)
|
|
0x1e9 unsigned char number of entries in EDDBUF (below)
|
|
0x1ea unsigned char number of entries in EDD_MBR_SIG_BUFFER (below)
|
|
0x1f1 char size of setup.S, number of sectors
|
|
0x1f2 unsigned short MOUNT_ROOT_RDONLY (if !=0)
|
|
0x1f4 unsigned short size of compressed kernel-part in the
|
|
(b)zImage-file (in 16 byte units, rounded up)
|
|
0x1f6 unsigned short swap_dev (unused AFAIK)
|
|
0x1f8 unsigned short RAMDISK_FLAGS
|
|
0x1fa unsigned short VGA-Mode (old one)
|
|
0x1fc unsigned short ORIG_ROOT_DEV (high=Major, low=minor)
|
|
0x1ff char AUX_DEVICE_INFO
|
|
|
|
0x200 short jump to start of setup code aka "reserved" field.
|
|
0x202 4 bytes Signature for SETUP-header, ="HdrS"
|
|
0x206 unsigned short Version number of header format
|
|
Current version is 0x0201...
|
|
0x208 8 bytes (used by setup.S for communication with boot loaders,
|
|
look there)
|
|
0x210 char LOADER_TYPE, = 0, old one
|
|
else it is set by the loader:
|
|
0xTV: T=0 for LILO
|
|
1 for Loadlin
|
|
2 for bootsect-loader
|
|
3 for SYSLINUX
|
|
4 for ETHERBOOT
|
|
5 for ELILO
|
|
7 for GRuB
|
|
8 for U-BOOT
|
|
9 for Xen
|
|
V = version
|
|
0x211 char loadflags:
|
|
bit0 = 1: kernel is loaded high (bzImage)
|
|
bit7 = 1: Heap and pointer (see below) set by boot
|
|
loader.
|
|
0x212 unsigned short (setup.S)
|
|
0x214 unsigned long KERNEL_START, where the loader started the kernel
|
|
0x218 unsigned long INITRD_START, address of loaded ramdisk image
|
|
0x21c unsigned long INITRD_SIZE, size in bytes of ramdisk image
|
|
0x220 4 bytes (setup.S)
|
|
0x224 unsigned short setup.S heap end pointer
|
|
0x226 unsigned short zero_pad
|
|
0x228 unsigned long cmd_line_ptr
|
|
0x22c unsigned long ramdisk_max
|
|
0x230 16 bytes trampoline
|
|
0x290 - 0x2cf EDD_MBR_SIG_BUFFER (edd.S)
|
|
0x2d0 - 0xd00 E820MAP
|
|
0xd00 - 0xeff EDDBUF (edd.S) for disk signature read sector
|
|
0xd00 - 0xeeb EDDBUF (edd.S) for edd data
|