| --------------------------------------------------------------------------- |
| !!!!!!!!!!!!!!!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 |