Merge tag 'spi-fix-v4.20-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/brooni...
[sfrench/cifs-2.6.git] / Documentation / x86 / boot.txt
1                      THE LINUX/x86 BOOT PROTOCOL
2                      ---------------------------
3
4 On the x86 platform, the Linux kernel uses a rather complicated boot
5 convention.  This has evolved partially due to historical aspects, as
6 well as the desire in the early days to have the kernel itself be a
7 bootable image, the complicated PC memory model and due to changed
8 expectations in the PC industry caused by the effective demise of
9 real-mode DOS as a mainstream operating system.
10
11 Currently, the following versions of the Linux/x86 boot protocol exist.
12
13 Old kernels:    zImage/Image support only.  Some very early kernels
14                 may not even support a command line.
15
16 Protocol 2.00:  (Kernel 1.3.73) Added bzImage and initrd support, as
17                 well as a formalized way to communicate between the
18                 boot loader and the kernel.  setup.S made relocatable,
19                 although the traditional setup area still assumed
20                 writable.
21
22 Protocol 2.01:  (Kernel 1.3.76) Added a heap overrun warning.
23
24 Protocol 2.02:  (Kernel 2.4.0-test3-pre3) New command line protocol.
25                 Lower the conventional memory ceiling.  No overwrite
26                 of the traditional setup area, thus making booting
27                 safe for systems which use the EBDA from SMM or 32-bit
28                 BIOS entry points.  zImage deprecated but still
29                 supported.
30
31 Protocol 2.03:  (Kernel 2.4.18-pre1) Explicitly makes the highest possible
32                 initrd address available to the bootloader.
33
34 Protocol 2.04:  (Kernel 2.6.14) Extend the syssize field to four bytes.
35
36 Protocol 2.05:  (Kernel 2.6.20) Make protected mode kernel relocatable.
37                 Introduce relocatable_kernel and kernel_alignment fields.
38
39 Protocol 2.06:  (Kernel 2.6.22) Added a field that contains the size of
40                 the boot command line.
41
42 Protocol 2.07:  (Kernel 2.6.24) Added paravirtualised boot protocol.
43                 Introduced hardware_subarch and hardware_subarch_data
44                 and KEEP_SEGMENTS flag in load_flags.
45
46 Protocol 2.08:  (Kernel 2.6.26) Added crc32 checksum and ELF format
47                 payload. Introduced payload_offset and payload_length
48                 fields to aid in locating the payload.
49
50 Protocol 2.09:  (Kernel 2.6.26) Added a field of 64-bit physical
51                 pointer to single linked list of struct setup_data.
52
53 Protocol 2.10:  (Kernel 2.6.31) Added a protocol for relaxed alignment
54                 beyond the kernel_alignment added, new init_size and
55                 pref_address fields.  Added extended boot loader IDs.
56
57 Protocol 2.11:  (Kernel 3.6) Added a field for offset of EFI handover
58                 protocol entry point.
59
60 Protocol 2.12:  (Kernel 3.8) Added the xloadflags field and extension fields
61                 to struct boot_params for loading bzImage and ramdisk
62                 above 4G in 64bit.
63
64 Protocol 2.13:  (Kernel 3.14) Support 32- and 64-bit flags being set in
65                 xloadflags to support booting a 64-bit kernel from 32-bit
66                 EFI
67
68 Protocol 2.14:  (Kernel 4.20) Added acpi_rsdp_addr holding the physical
69                 address of the ACPI RSDP table.
70                 The bootloader updates version with:
71                 0x8000 | min(kernel-version, bootloader-version)
72                 kernel-version being the protocol version supported by
73                 the kernel and bootloader-version the protocol version
74                 supported by the bootloader.
75
76 **** MEMORY LAYOUT
77
78 The traditional memory map for the kernel loader, used for Image or
79 zImage kernels, typically looks like:
80
81         |                        |
82 0A0000  +------------------------+
83         |  Reserved for BIOS     |      Do not use.  Reserved for BIOS EBDA.
84 09A000  +------------------------+
85         |  Command line          |
86         |  Stack/heap            |      For use by the kernel real-mode code.
87 098000  +------------------------+      
88         |  Kernel setup          |      The kernel real-mode code.
89 090200  +------------------------+
90         |  Kernel boot sector    |      The kernel legacy boot sector.
91 090000  +------------------------+
92         |  Protected-mode kernel |      The bulk of the kernel image.
93 010000  +------------------------+
94         |  Boot loader           |      <- Boot sector entry point 0000:7C00
95 001000  +------------------------+
96         |  Reserved for MBR/BIOS |
97 000800  +------------------------+
98         |  Typically used by MBR |
99 000600  +------------------------+ 
100         |  BIOS use only         |
101 000000  +------------------------+
102
103
104 When using bzImage, the protected-mode kernel was relocated to
105 0x100000 ("high memory"), and the kernel real-mode block (boot sector,
106 setup, and stack/heap) was made relocatable to any address between
107 0x10000 and end of low memory. Unfortunately, in protocols 2.00 and
108 2.01 the 0x90000+ memory range is still used internally by the kernel;
109 the 2.02 protocol resolves that problem.
110
111 It is desirable to keep the "memory ceiling" -- the highest point in
112 low memory touched by the boot loader -- as low as possible, since
113 some newer BIOSes have begun to allocate some rather large amounts of
114 memory, called the Extended BIOS Data Area, near the top of low
115 memory.  The boot loader should use the "INT 12h" BIOS call to verify
116 how much low memory is available.
117
118 Unfortunately, if INT 12h reports that the amount of memory is too
119 low, there is usually nothing the boot loader can do but to report an
120 error to the user.  The boot loader should therefore be designed to
121 take up as little space in low memory as it reasonably can.  For
122 zImage or old bzImage kernels, which need data written into the
123 0x90000 segment, the boot loader should make sure not to use memory
124 above the 0x9A000 point; too many BIOSes will break above that point.
125
126 For a modern bzImage kernel with boot protocol version >= 2.02, a
127 memory layout like the following is suggested:
128
129         ~                        ~
130         |  Protected-mode kernel |
131 100000  +------------------------+
132         |  I/O memory hole       |
133 0A0000  +------------------------+
134         |  Reserved for BIOS     |      Leave as much as possible unused
135         ~                        ~
136         |  Command line          |      (Can also be below the X+10000 mark)
137 X+10000 +------------------------+
138         |  Stack/heap            |      For use by the kernel real-mode code.
139 X+08000 +------------------------+      
140         |  Kernel setup          |      The kernel real-mode code.
141         |  Kernel boot sector    |      The kernel legacy boot sector.
142 X       +------------------------+
143         |  Boot loader           |      <- Boot sector entry point 0000:7C00
144 001000  +------------------------+
145         |  Reserved for MBR/BIOS |
146 000800  +------------------------+
147         |  Typically used by MBR |
148 000600  +------------------------+ 
149         |  BIOS use only         |
150 000000  +------------------------+
151
152 ... where the address X is as low as the design of the boot loader
153 permits.
154
155
156 **** THE REAL-MODE KERNEL HEADER
157
158 In the following text, and anywhere in the kernel boot sequence, "a
159 sector" refers to 512 bytes.  It is independent of the actual sector
160 size of the underlying medium.
161
162 The first step in loading a Linux kernel should be to load the
163 real-mode code (boot sector and setup code) and then examine the
164 following header at offset 0x01f1.  The real-mode code can total up to
165 32K, although the boot loader may choose to load only the first two
166 sectors (1K) and then examine the bootup sector size.
167
168 The header looks like:
169
170 Offset  Proto   Name            Meaning
171 /Size
172
173 01F1/1  ALL(1   setup_sects     The size of the setup in sectors
174 01F2/2  ALL     root_flags      If set, the root is mounted readonly
175 01F4/4  2.04+(2 syssize         The size of the 32-bit code in 16-byte paras
176 01F8/2  ALL     ram_size        DO NOT USE - for bootsect.S use only
177 01FA/2  ALL     vid_mode        Video mode control
178 01FC/2  ALL     root_dev        Default root device number
179 01FE/2  ALL     boot_flag       0xAA55 magic number
180 0200/2  2.00+   jump            Jump instruction
181 0202/4  2.00+   header          Magic signature "HdrS"
182 0206/2  2.00+   version         Boot protocol version supported
183 0208/4  2.00+   realmode_swtch  Boot loader hook (see below)
184 020C/2  2.00+   start_sys_seg   The load-low segment (0x1000) (obsolete)
185 020E/2  2.00+   kernel_version  Pointer to kernel version string
186 0210/1  2.00+   type_of_loader  Boot loader identifier
187 0211/1  2.00+   loadflags       Boot protocol option flags
188 0212/2  2.00+   setup_move_size Move to high memory size (used with hooks)
189 0214/4  2.00+   code32_start    Boot loader hook (see below)
190 0218/4  2.00+   ramdisk_image   initrd load address (set by boot loader)
191 021C/4  2.00+   ramdisk_size    initrd size (set by boot loader)
192 0220/4  2.00+   bootsect_kludge DO NOT USE - for bootsect.S use only
193 0224/2  2.01+   heap_end_ptr    Free memory after setup end
194 0226/1  2.02+(3 ext_loader_ver  Extended boot loader version
195 0227/1  2.02+(3 ext_loader_type Extended boot loader ID
196 0228/4  2.02+   cmd_line_ptr    32-bit pointer to the kernel command line
197 022C/4  2.03+   initrd_addr_max Highest legal initrd address
198 0230/4  2.05+   kernel_alignment Physical addr alignment required for kernel
199 0234/1  2.05+   relocatable_kernel Whether kernel is relocatable or not
200 0235/1  2.10+   min_alignment   Minimum alignment, as a power of two
201 0236/2  2.12+   xloadflags      Boot protocol option flags
202 0238/4  2.06+   cmdline_size    Maximum size of the kernel command line
203 023C/4  2.07+   hardware_subarch Hardware subarchitecture
204 0240/8  2.07+   hardware_subarch_data Subarchitecture-specific data
205 0248/4  2.08+   payload_offset  Offset of kernel payload
206 024C/4  2.08+   payload_length  Length of kernel payload
207 0250/8  2.09+   setup_data      64-bit physical pointer to linked list
208                                 of struct setup_data
209 0258/8  2.10+   pref_address    Preferred loading address
210 0260/4  2.10+   init_size       Linear memory required during initialization
211 0264/4  2.11+   handover_offset Offset of handover entry point
212 0268/8  2.14+   acpi_rsdp_addr  Physical address of RSDP table
213
214 (1) For backwards compatibility, if the setup_sects field contains 0, the
215     real value is 4.
216
217 (2) For boot protocol prior to 2.04, the upper two bytes of the syssize
218     field are unusable, which means the size of a bzImage kernel
219     cannot be determined.
220
221 (3) Ignored, but safe to set, for boot protocols 2.02-2.09.
222
223 If the "HdrS" (0x53726448) magic number is not found at offset 0x202,
224 the boot protocol version is "old".  Loading an old kernel, the
225 following parameters should be assumed:
226
227         Image type = zImage
228         initrd not supported
229         Real-mode kernel must be located at 0x90000.
230
231 Otherwise, the "version" field contains the protocol version,
232 e.g. protocol version 2.01 will contain 0x0201 in this field.  When
233 setting fields in the header, you must make sure only to set fields
234 supported by the protocol version in use.
235
236
237 **** DETAILS OF HEADER FIELDS
238
239 For each field, some are information from the kernel to the bootloader
240 ("read"), some are expected to be filled out by the bootloader
241 ("write"), and some are expected to be read and modified by the
242 bootloader ("modify").
243
244 All general purpose boot loaders should write the fields marked
245 (obligatory).  Boot loaders who want to load the kernel at a
246 nonstandard address should fill in the fields marked (reloc); other
247 boot loaders can ignore those fields.
248
249 The byte order of all fields is littleendian (this is x86, after all.)
250
251 Field name:     setup_sects
252 Type:           read
253 Offset/size:    0x1f1/1
254 Protocol:       ALL
255
256   The size of the setup code in 512-byte sectors.  If this field is
257   0, the real value is 4.  The real-mode code consists of the boot
258   sector (always one 512-byte sector) plus the setup code.
259
260 Field name:      root_flags
261 Type:            modify (optional)
262 Offset/size:     0x1f2/2
263 Protocol:        ALL
264
265   If this field is nonzero, the root defaults to readonly.  The use of
266   this field is deprecated; use the "ro" or "rw" options on the
267   command line instead.
268
269 Field name:     syssize
270 Type:           read
271 Offset/size:    0x1f4/4 (protocol 2.04+) 0x1f4/2 (protocol ALL)
272 Protocol:       2.04+
273
274   The size of the protected-mode code in units of 16-byte paragraphs.
275   For protocol versions older than 2.04 this field is only two bytes
276   wide, and therefore cannot be trusted for the size of a kernel if
277   the LOAD_HIGH flag is set.
278
279 Field name:     ram_size
280 Type:           kernel internal
281 Offset/size:    0x1f8/2
282 Protocol:       ALL
283
284   This field is obsolete.
285
286 Field name:     vid_mode
287 Type:           modify (obligatory)
288 Offset/size:    0x1fa/2
289
290   Please see the section on SPECIAL COMMAND LINE OPTIONS.
291
292 Field name:     root_dev
293 Type:           modify (optional)
294 Offset/size:    0x1fc/2
295 Protocol:       ALL
296
297   The default root device device number.  The use of this field is
298   deprecated, use the "root=" option on the command line instead.
299
300 Field name:     boot_flag
301 Type:           read
302 Offset/size:    0x1fe/2
303 Protocol:       ALL
304
305   Contains 0xAA55.  This is the closest thing old Linux kernels have
306   to a magic number.
307
308 Field name:     jump
309 Type:           read
310 Offset/size:    0x200/2
311 Protocol:       2.00+
312
313   Contains an x86 jump instruction, 0xEB followed by a signed offset
314   relative to byte 0x202.  This can be used to determine the size of
315   the header.
316
317 Field name:     header
318 Type:           read
319 Offset/size:    0x202/4
320 Protocol:       2.00+
321
322   Contains the magic number "HdrS" (0x53726448).
323
324 Field name:     version
325 Type:           modify
326 Offset/size:    0x206/2
327 Protocol:       2.00+
328
329   Contains the boot protocol version, in (major << 8)+minor format,
330   e.g. 0x0204 for version 2.04, and 0x0a11 for a hypothetical version
331   10.17.
332
333   Up to protocol version 2.13 this information is only read by the
334   bootloader. From protocol version 2.14 onwards the bootloader will
335   write the used protocol version or-ed with 0x8000 to the field. The
336   used protocol version will be the minimum of the supported protocol
337   versions of the bootloader and the kernel.
338
339 Field name:     realmode_swtch
340 Type:           modify (optional)
341 Offset/size:    0x208/4
342 Protocol:       2.00+
343
344   Boot loader hook (see ADVANCED BOOT LOADER HOOKS below.)
345
346 Field name:     start_sys_seg
347 Type:           read
348 Offset/size:    0x20c/2
349 Protocol:       2.00+
350
351   The load low segment (0x1000).  Obsolete.
352
353 Field name:     kernel_version
354 Type:           read
355 Offset/size:    0x20e/2
356 Protocol:       2.00+
357
358   If set to a nonzero value, contains a pointer to a NUL-terminated
359   human-readable kernel version number string, less 0x200.  This can
360   be used to display the kernel version to the user.  This value
361   should be less than (0x200*setup_sects).
362
363   For example, if this value is set to 0x1c00, the kernel version
364   number string can be found at offset 0x1e00 in the kernel file.
365   This is a valid value if and only if the "setup_sects" field
366   contains the value 15 or higher, as:
367
368         0x1c00  < 15*0x200 (= 0x1e00) but
369         0x1c00 >= 14*0x200 (= 0x1c00)
370
371         0x1c00 >> 9 = 14, so the minimum value for setup_secs is 15.
372
373 Field name:     type_of_loader
374 Type:           write (obligatory)
375 Offset/size:    0x210/1
376 Protocol:       2.00+
377
378   If your boot loader has an assigned id (see table below), enter
379   0xTV here, where T is an identifier for the boot loader and V is
380   a version number.  Otherwise, enter 0xFF here.
381
382   For boot loader IDs above T = 0xD, write T = 0xE to this field and
383   write the extended ID minus 0x10 to the ext_loader_type field.
384   Similarly, the ext_loader_ver field can be used to provide more than
385   four bits for the bootloader version.
386
387   For example, for T = 0x15, V = 0x234, write:
388
389   type_of_loader  <- 0xE4
390   ext_loader_type <- 0x05
391   ext_loader_ver  <- 0x23
392
393   Assigned boot loader ids (hexadecimal):
394
395         0  LILO                 (0x00 reserved for pre-2.00 bootloader)
396         1  Loadlin
397         2  bootsect-loader      (0x20, all other values reserved)
398         3  Syslinux
399         4  Etherboot/gPXE/iPXE
400         5  ELILO
401         7  GRUB
402         8  U-Boot
403         9  Xen
404         A  Gujin
405         B  Qemu
406         C  Arcturus Networks uCbootloader
407         D  kexec-tools
408         E  Extended             (see ext_loader_type)
409         F  Special              (0xFF = undefined)
410        10  Reserved
411        11  Minimal Linux Bootloader <http://sebastian-plotz.blogspot.de>
412        12  OVMF UEFI virtualization stack
413
414   Please contact <hpa@zytor.com> if you need a bootloader ID
415   value assigned.
416
417 Field name:     loadflags
418 Type:           modify (obligatory)
419 Offset/size:    0x211/1
420 Protocol:       2.00+
421
422   This field is a bitmask.
423
424   Bit 0 (read): LOADED_HIGH
425         - If 0, the protected-mode code is loaded at 0x10000.
426         - If 1, the protected-mode code is loaded at 0x100000.
427
428   Bit 1 (kernel internal): KASLR_FLAG
429         - Used internally by the compressed kernel to communicate
430           KASLR status to kernel proper.
431           If 1, KASLR enabled.
432           If 0, KASLR disabled.
433
434   Bit 5 (write): QUIET_FLAG
435         - If 0, print early messages.
436         - If 1, suppress early messages.
437                 This requests to the kernel (decompressor and early
438                 kernel) to not write early messages that require
439                 accessing the display hardware directly.
440
441   Bit 6 (write): KEEP_SEGMENTS
442         Protocol: 2.07+
443         - If 0, reload the segment registers in the 32bit entry point.
444         - If 1, do not reload the segment registers in the 32bit entry point.
445                 Assume that %cs %ds %ss %es are all set to flat segments with
446                 a base of 0 (or the equivalent for their environment).
447
448   Bit 7 (write): CAN_USE_HEAP
449         Set this bit to 1 to indicate that the value entered in the
450         heap_end_ptr is valid.  If this field is clear, some setup code
451         functionality will be disabled.
452
453 Field name:     setup_move_size
454 Type:           modify (obligatory)
455 Offset/size:    0x212/2
456 Protocol:       2.00-2.01
457
458   When using protocol 2.00 or 2.01, if the real mode kernel is not
459   loaded at 0x90000, it gets moved there later in the loading
460   sequence.  Fill in this field if you want additional data (such as
461   the kernel command line) moved in addition to the real-mode kernel
462   itself.
463
464   The unit is bytes starting with the beginning of the boot sector.
465   
466   This field is can be ignored when the protocol is 2.02 or higher, or
467   if the real-mode code is loaded at 0x90000.
468
469 Field name:     code32_start
470 Type:           modify (optional, reloc)
471 Offset/size:    0x214/4
472 Protocol:       2.00+
473
474   The address to jump to in protected mode.  This defaults to the load
475   address of the kernel, and can be used by the boot loader to
476   determine the proper load address.
477
478   This field can be modified for two purposes:
479
480   1. as a boot loader hook (see ADVANCED BOOT LOADER HOOKS below.)
481
482   2. if a bootloader which does not install a hook loads a
483      relocatable kernel at a nonstandard address it will have to modify
484      this field to point to the load address.
485
486 Field name:     ramdisk_image
487 Type:           write (obligatory)
488 Offset/size:    0x218/4
489 Protocol:       2.00+
490
491   The 32-bit linear address of the initial ramdisk or ramfs.  Leave at
492   zero if there is no initial ramdisk/ramfs.
493
494 Field name:     ramdisk_size
495 Type:           write (obligatory)
496 Offset/size:    0x21c/4
497 Protocol:       2.00+
498
499   Size of the initial ramdisk or ramfs.  Leave at zero if there is no
500   initial ramdisk/ramfs.
501
502 Field name:     bootsect_kludge
503 Type:           kernel internal
504 Offset/size:    0x220/4
505 Protocol:       2.00+
506
507   This field is obsolete.
508
509 Field name:     heap_end_ptr
510 Type:           write (obligatory)
511 Offset/size:    0x224/2
512 Protocol:       2.01+
513
514   Set this field to the offset (from the beginning of the real-mode
515   code) of the end of the setup stack/heap, minus 0x0200.
516
517 Field name:     ext_loader_ver
518 Type:           write (optional)
519 Offset/size:    0x226/1
520 Protocol:       2.02+
521
522   This field is used as an extension of the version number in the
523   type_of_loader field.  The total version number is considered to be
524   (type_of_loader & 0x0f) + (ext_loader_ver << 4).
525
526   The use of this field is boot loader specific.  If not written, it
527   is zero.
528
529   Kernels prior to 2.6.31 did not recognize this field, but it is safe
530   to write for protocol version 2.02 or higher.
531
532 Field name:     ext_loader_type
533 Type:           write (obligatory if (type_of_loader & 0xf0) == 0xe0)
534 Offset/size:    0x227/1
535 Protocol:       2.02+
536
537   This field is used as an extension of the type number in
538   type_of_loader field.  If the type in type_of_loader is 0xE, then
539   the actual type is (ext_loader_type + 0x10).
540
541   This field is ignored if the type in type_of_loader is not 0xE.
542
543   Kernels prior to 2.6.31 did not recognize this field, but it is safe
544   to write for protocol version 2.02 or higher.
545
546 Field name:     cmd_line_ptr
547 Type:           write (obligatory)
548 Offset/size:    0x228/4
549 Protocol:       2.02+
550
551   Set this field to the linear address of the kernel command line.
552   The kernel command line can be located anywhere between the end of
553   the setup heap and 0xA0000; it does not have to be located in the
554   same 64K segment as the real-mode code itself.
555
556   Fill in this field even if your boot loader does not support a
557   command line, in which case you can point this to an empty string
558   (or better yet, to the string "auto".)  If this field is left at
559   zero, the kernel will assume that your boot loader does not support
560   the 2.02+ protocol.
561
562 Field name:     initrd_addr_max
563 Type:           read
564 Offset/size:    0x22c/4
565 Protocol:       2.03+
566
567   The maximum address that may be occupied by the initial
568   ramdisk/ramfs contents.  For boot protocols 2.02 or earlier, this
569   field is not present, and the maximum address is 0x37FFFFFF.  (This
570   address is defined as the address of the highest safe byte, so if
571   your ramdisk is exactly 131072 bytes long and this field is
572   0x37FFFFFF, you can start your ramdisk at 0x37FE0000.)
573
574 Field name:     kernel_alignment
575 Type:           read/modify (reloc)
576 Offset/size:    0x230/4
577 Protocol:       2.05+ (read), 2.10+ (modify)
578
579   Alignment unit required by the kernel (if relocatable_kernel is
580   true.)  A relocatable kernel that is loaded at an alignment
581   incompatible with the value in this field will be realigned during
582   kernel initialization.
583
584   Starting with protocol version 2.10, this reflects the kernel
585   alignment preferred for optimal performance; it is possible for the
586   loader to modify this field to permit a lesser alignment.  See the
587   min_alignment and pref_address field below.
588
589 Field name:     relocatable_kernel
590 Type:           read (reloc)
591 Offset/size:    0x234/1
592 Protocol:       2.05+
593
594   If this field is nonzero, the protected-mode part of the kernel can
595   be loaded at any address that satisfies the kernel_alignment field.
596   After loading, the boot loader must set the code32_start field to
597   point to the loaded code, or to a boot loader hook.
598
599 Field name:     min_alignment
600 Type:           read (reloc)
601 Offset/size:    0x235/1
602 Protocol:       2.10+
603
604   This field, if nonzero, indicates as a power of two the minimum
605   alignment required, as opposed to preferred, by the kernel to boot.
606   If a boot loader makes use of this field, it should update the
607   kernel_alignment field with the alignment unit desired; typically:
608
609         kernel_alignment = 1 << min_alignment
610
611   There may be a considerable performance cost with an excessively
612   misaligned kernel.  Therefore, a loader should typically try each
613   power-of-two alignment from kernel_alignment down to this alignment.
614
615 Field name:     xloadflags
616 Type:           read
617 Offset/size:    0x236/2
618 Protocol:       2.12+
619
620   This field is a bitmask.
621
622   Bit 0 (read): XLF_KERNEL_64
623         - If 1, this kernel has the legacy 64-bit entry point at 0x200.
624
625   Bit 1 (read): XLF_CAN_BE_LOADED_ABOVE_4G
626         - If 1, kernel/boot_params/cmdline/ramdisk can be above 4G.
627
628   Bit 2 (read): XLF_EFI_HANDOVER_32
629         - If 1, the kernel supports the 32-bit EFI handoff entry point
630           given at handover_offset.
631
632   Bit 3 (read): XLF_EFI_HANDOVER_64
633         - If 1, the kernel supports the 64-bit EFI handoff entry point
634           given at handover_offset + 0x200.
635
636   Bit 4 (read): XLF_EFI_KEXEC
637         - If 1, the kernel supports kexec EFI boot with EFI runtime support.
638
639 Field name:     cmdline_size
640 Type:           read
641 Offset/size:    0x238/4
642 Protocol:       2.06+
643
644   The maximum size of the command line without the terminating
645   zero. This means that the command line can contain at most
646   cmdline_size characters. With protocol version 2.05 and earlier, the
647   maximum size was 255.
648
649 Field name:     hardware_subarch
650 Type:           write (optional, defaults to x86/PC)
651 Offset/size:    0x23c/4
652 Protocol:       2.07+
653
654   In a paravirtualized environment the hardware low level architectural
655   pieces such as interrupt handling, page table handling, and
656   accessing process control registers needs to be done differently.
657
658   This field allows the bootloader to inform the kernel we are in one
659   one of those environments.
660
661   0x00000000    The default x86/PC environment
662   0x00000001    lguest
663   0x00000002    Xen
664   0x00000003    Moorestown MID
665   0x00000004    CE4100 TV Platform
666
667 Field name:     hardware_subarch_data
668 Type:           write (subarch-dependent)
669 Offset/size:    0x240/8
670 Protocol:       2.07+
671
672   A pointer to data that is specific to hardware subarch
673   This field is currently unused for the default x86/PC environment,
674   do not modify.
675
676 Field name:     payload_offset
677 Type:           read
678 Offset/size:    0x248/4
679 Protocol:       2.08+
680
681   If non-zero then this field contains the offset from the beginning
682   of the protected-mode code to the payload.
683
684   The payload may be compressed. The format of both the compressed and
685   uncompressed data should be determined using the standard magic
686   numbers.  The currently supported compression formats are gzip
687   (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA
688   (magic number 5D 00), XZ (magic number FD 37), and LZ4 (magic number
689   02 21).  The uncompressed payload is currently always ELF (magic
690   number 7F 45 4C 46).
691
692 Field name:     payload_length
693 Type:           read
694 Offset/size:    0x24c/4
695 Protocol:       2.08+
696
697   The length of the payload.
698
699 Field name:     setup_data
700 Type:           write (special)
701 Offset/size:    0x250/8
702 Protocol:       2.09+
703
704   The 64-bit physical pointer to NULL terminated single linked list of
705   struct setup_data. This is used to define a more extensible boot
706   parameters passing mechanism. The definition of struct setup_data is
707   as follow:
708
709   struct setup_data {
710           u64 next;
711           u32 type;
712           u32 len;
713           u8  data[0];
714   };
715
716   Where, the next is a 64-bit physical pointer to the next node of
717   linked list, the next field of the last node is 0; the type is used
718   to identify the contents of data; the len is the length of data
719   field; the data holds the real payload.
720
721   This list may be modified at a number of points during the bootup
722   process.  Therefore, when modifying this list one should always make
723   sure to consider the case where the linked list already contains
724   entries.
725
726 Field name:     pref_address
727 Type:           read (reloc)
728 Offset/size:    0x258/8
729 Protocol:       2.10+
730
731   This field, if nonzero, represents a preferred load address for the
732   kernel.  A relocating bootloader should attempt to load at this
733   address if possible.
734
735   A non-relocatable kernel will unconditionally move itself and to run
736   at this address.
737
738 Field name:     init_size
739 Type:           read
740 Offset/size:    0x260/4
741
742   This field indicates the amount of linear contiguous memory starting
743   at the kernel runtime start address that the kernel needs before it
744   is capable of examining its memory map.  This is not the same thing
745   as the total amount of memory the kernel needs to boot, but it can
746   be used by a relocating boot loader to help select a safe load
747   address for the kernel.
748
749   The kernel runtime start address is determined by the following algorithm:
750
751   if (relocatable_kernel)
752         runtime_start = align_up(load_address, kernel_alignment)
753   else
754         runtime_start = pref_address
755
756 Field name:     handover_offset
757 Type:           read
758 Offset/size:    0x264/4
759
760   This field is the offset from the beginning of the kernel image to
761   the EFI handover protocol entry point. Boot loaders using the EFI
762   handover protocol to boot the kernel should jump to this offset.
763
764   See EFI HANDOVER PROTOCOL below for more details.
765
766 Field name:     acpi_rsdp_addr
767 Type:           write
768 Offset/size:    0x268/8
769 Protocol:       2.14+
770
771   This field can be set by the boot loader to tell the kernel the
772   physical address of the ACPI RSDP table.
773
774   A value of 0 indicates the kernel should fall back to the standard
775   methods to locate the RSDP.
776
777
778 **** THE IMAGE CHECKSUM
779
780 From boot protocol version 2.08 onwards the CRC-32 is calculated over
781 the entire file using the characteristic polynomial 0x04C11DB7 and an
782 initial remainder of 0xffffffff.  The checksum is appended to the
783 file; therefore the CRC of the file up to the limit specified in the
784 syssize field of the header is always 0.
785
786
787 **** THE KERNEL COMMAND LINE
788
789 The kernel command line has become an important way for the boot
790 loader to communicate with the kernel.  Some of its options are also
791 relevant to the boot loader itself, see "special command line options"
792 below.
793
794 The kernel command line is a null-terminated string. The maximum
795 length can be retrieved from the field cmdline_size.  Before protocol
796 version 2.06, the maximum was 255 characters.  A string that is too
797 long will be automatically truncated by the kernel.
798
799 If the boot protocol version is 2.02 or later, the address of the
800 kernel command line is given by the header field cmd_line_ptr (see
801 above.)  This address can be anywhere between the end of the setup
802 heap and 0xA0000.
803
804 If the protocol version is *not* 2.02 or higher, the kernel
805 command line is entered using the following protocol:
806
807         At offset 0x0020 (word), "cmd_line_magic", enter the magic
808         number 0xA33F.
809
810         At offset 0x0022 (word), "cmd_line_offset", enter the offset
811         of the kernel command line (relative to the start of the
812         real-mode kernel).
813         
814         The kernel command line *must* be within the memory region
815         covered by setup_move_size, so you may need to adjust this
816         field.
817
818
819 **** MEMORY LAYOUT OF THE REAL-MODE CODE
820
821 The real-mode code requires a stack/heap to be set up, as well as
822 memory allocated for the kernel command line.  This needs to be done
823 in the real-mode accessible memory in bottom megabyte.
824
825 It should be noted that modern machines often have a sizable Extended
826 BIOS Data Area (EBDA).  As a result, it is advisable to use as little
827 of the low megabyte as possible.
828
829 Unfortunately, under the following circumstances the 0x90000 memory
830 segment has to be used:
831
832         - When loading a zImage kernel ((loadflags & 0x01) == 0).
833         - When loading a 2.01 or earlier boot protocol kernel.
834
835           -> For the 2.00 and 2.01 boot protocols, the real-mode code
836              can be loaded at another address, but it is internally
837              relocated to 0x90000.  For the "old" protocol, the
838              real-mode code must be loaded at 0x90000.
839
840 When loading at 0x90000, avoid using memory above 0x9a000.
841
842 For boot protocol 2.02 or higher, the command line does not have to be
843 located in the same 64K segment as the real-mode setup code; it is
844 thus permitted to give the stack/heap the full 64K segment and locate
845 the command line above it.
846
847 The kernel command line should not be located below the real-mode
848 code, nor should it be located in high memory.
849
850
851 **** SAMPLE BOOT CONFIGURATION
852
853 As a sample configuration, assume the following layout of the real
854 mode segment:
855
856     When loading below 0x90000, use the entire segment:
857
858         0x0000-0x7fff   Real mode kernel
859         0x8000-0xdfff   Stack and heap
860         0xe000-0xffff   Kernel command line
861
862     When loading at 0x90000 OR the protocol version is 2.01 or earlier:
863
864         0x0000-0x7fff   Real mode kernel
865         0x8000-0x97ff   Stack and heap
866         0x9800-0x9fff   Kernel command line
867
868 Such a boot loader should enter the following fields in the header:
869
870         unsigned long base_ptr; /* base address for real-mode segment */
871
872         if ( setup_sects == 0 ) {
873                 setup_sects = 4;
874         }
875
876         if ( protocol >= 0x0200 ) {
877                 type_of_loader = <type code>;
878                 if ( loading_initrd ) {
879                         ramdisk_image = <initrd_address>;
880                         ramdisk_size = <initrd_size>;
881                 }
882
883                 if ( protocol >= 0x0202 && loadflags & 0x01 )
884                         heap_end = 0xe000;
885                 else
886                         heap_end = 0x9800;
887
888                 if ( protocol >= 0x0201 ) {
889                         heap_end_ptr = heap_end - 0x200;
890                         loadflags |= 0x80; /* CAN_USE_HEAP */
891                 }
892
893                 if ( protocol >= 0x0202 ) {
894                         cmd_line_ptr = base_ptr + heap_end;
895                         strcpy(cmd_line_ptr, cmdline);
896                 } else {
897                         cmd_line_magic  = 0xA33F;
898                         cmd_line_offset = heap_end;
899                         setup_move_size = heap_end + strlen(cmdline)+1;
900                         strcpy(base_ptr+cmd_line_offset, cmdline);
901                 }
902         } else {
903                 /* Very old kernel */
904
905                 heap_end = 0x9800;
906
907                 cmd_line_magic  = 0xA33F;
908                 cmd_line_offset = heap_end;
909
910                 /* A very old kernel MUST have its real-mode code
911                    loaded at 0x90000 */
912
913                 if ( base_ptr != 0x90000 ) {
914                         /* Copy the real-mode kernel */
915                         memcpy(0x90000, base_ptr, (setup_sects+1)*512);
916                         base_ptr = 0x90000;              /* Relocated */
917                 }
918
919                 strcpy(0x90000+cmd_line_offset, cmdline);
920
921                 /* It is recommended to clear memory up to the 32K mark */
922                 memset(0x90000 + (setup_sects+1)*512, 0,
923                        (64-(setup_sects+1))*512);
924         }
925
926
927 **** LOADING THE REST OF THE KERNEL
928
929 The 32-bit (non-real-mode) kernel starts at offset (setup_sects+1)*512
930 in the kernel file (again, if setup_sects == 0 the real value is 4.)
931 It should be loaded at address 0x10000 for Image/zImage kernels and
932 0x100000 for bzImage kernels.
933
934 The kernel is a bzImage kernel if the protocol >= 2.00 and the 0x01
935 bit (LOAD_HIGH) in the loadflags field is set:
936
937         is_bzImage = (protocol >= 0x0200) && (loadflags & 0x01);
938         load_address = is_bzImage ? 0x100000 : 0x10000;
939
940 Note that Image/zImage kernels can be up to 512K in size, and thus use
941 the entire 0x10000-0x90000 range of memory.  This means it is pretty
942 much a requirement for these kernels to load the real-mode part at
943 0x90000.  bzImage kernels allow much more flexibility.
944
945
946 **** SPECIAL COMMAND LINE OPTIONS
947
948 If the command line provided by the boot loader is entered by the
949 user, the user may expect the following command line options to work.
950 They should normally not be deleted from the kernel command line even
951 though not all of them are actually meaningful to the kernel.  Boot
952 loader authors who need additional command line options for the boot
953 loader itself should get them registered in
954 Documentation/admin-guide/kernel-parameters.rst to make sure they will not
955 conflict with actual kernel options now or in the future.
956
957   vga=<mode>
958         <mode> here is either an integer (in C notation, either
959         decimal, octal, or hexadecimal) or one of the strings
960         "normal" (meaning 0xFFFF), "ext" (meaning 0xFFFE) or "ask"
961         (meaning 0xFFFD).  This value should be entered into the
962         vid_mode field, as it is used by the kernel before the command
963         line is parsed.
964
965   mem=<size>
966         <size> is an integer in C notation optionally followed by
967         (case insensitive) K, M, G, T, P or E (meaning << 10, << 20,
968         << 30, << 40, << 50 or << 60).  This specifies the end of
969         memory to the kernel. This affects the possible placement of
970         an initrd, since an initrd should be placed near end of
971         memory.  Note that this is an option to *both* the kernel and
972         the bootloader!
973
974   initrd=<file>
975         An initrd should be loaded.  The meaning of <file> is
976         obviously bootloader-dependent, and some boot loaders
977         (e.g. LILO) do not have such a command.
978
979 In addition, some boot loaders add the following options to the
980 user-specified command line:
981
982   BOOT_IMAGE=<file>
983         The boot image which was loaded.  Again, the meaning of <file>
984         is obviously bootloader-dependent.
985
986   auto
987         The kernel was booted without explicit user intervention.
988
989 If these options are added by the boot loader, it is highly
990 recommended that they are located *first*, before the user-specified
991 or configuration-specified command line.  Otherwise, "init=/bin/sh"
992 gets confused by the "auto" option.
993
994
995 **** RUNNING THE KERNEL
996
997 The kernel is started by jumping to the kernel entry point, which is
998 located at *segment* offset 0x20 from the start of the real mode
999 kernel.  This means that if you loaded your real-mode kernel code at
1000 0x90000, the kernel entry point is 9020:0000.
1001
1002 At entry, ds = es = ss should point to the start of the real-mode
1003 kernel code (0x9000 if the code is loaded at 0x90000), sp should be
1004 set up properly, normally pointing to the top of the heap, and
1005 interrupts should be disabled.  Furthermore, to guard against bugs in
1006 the kernel, it is recommended that the boot loader sets fs = gs = ds =
1007 es = ss.
1008
1009 In our example from above, we would do:
1010
1011         /* Note: in the case of the "old" kernel protocol, base_ptr must
1012            be == 0x90000 at this point; see the previous sample code */
1013
1014         seg = base_ptr >> 4;
1015
1016         cli();  /* Enter with interrupts disabled! */
1017
1018         /* Set up the real-mode kernel stack */
1019         _SS = seg;
1020         _SP = heap_end;
1021
1022         _DS = _ES = _FS = _GS = seg;
1023         jmp_far(seg+0x20, 0);   /* Run the kernel */
1024
1025 If your boot sector accesses a floppy drive, it is recommended to
1026 switch off the floppy motor before running the kernel, since the
1027 kernel boot leaves interrupts off and thus the motor will not be
1028 switched off, especially if the loaded kernel has the floppy driver as
1029 a demand-loaded module!
1030
1031
1032 **** ADVANCED BOOT LOADER HOOKS
1033
1034 If the boot loader runs in a particularly hostile environment (such as
1035 LOADLIN, which runs under DOS) it may be impossible to follow the
1036 standard memory location requirements.  Such a boot loader may use the
1037 following hooks that, if set, are invoked by the kernel at the
1038 appropriate time.  The use of these hooks should probably be
1039 considered an absolutely last resort!
1040
1041 IMPORTANT: All the hooks are required to preserve %esp, %ebp, %esi and
1042 %edi across invocation.
1043
1044   realmode_swtch:
1045         A 16-bit real mode far subroutine invoked immediately before
1046         entering protected mode.  The default routine disables NMI, so
1047         your routine should probably do so, too.
1048
1049   code32_start:
1050         A 32-bit flat-mode routine *jumped* to immediately after the
1051         transition to protected mode, but before the kernel is
1052         uncompressed.  No segments, except CS, are guaranteed to be
1053         set up (current kernels do, but older ones do not); you should
1054         set them up to BOOT_DS (0x18) yourself.
1055
1056         After completing your hook, you should jump to the address
1057         that was in this field before your boot loader overwrote it
1058         (relocated, if appropriate.)
1059
1060
1061 **** 32-bit BOOT PROTOCOL
1062
1063 For machine with some new BIOS other than legacy BIOS, such as EFI,
1064 LinuxBIOS, etc, and kexec, the 16-bit real mode setup code in kernel
1065 based on legacy BIOS can not be used, so a 32-bit boot protocol needs
1066 to be defined.
1067
1068 In 32-bit boot protocol, the first step in loading a Linux kernel
1069 should be to setup the boot parameters (struct boot_params,
1070 traditionally known as "zero page"). The memory for struct boot_params
1071 should be allocated and initialized to all zero. Then the setup header
1072 from offset 0x01f1 of kernel image on should be loaded into struct
1073 boot_params and examined. The end of setup header can be calculated as
1074 follow:
1075
1076         0x0202 + byte value at offset 0x0201
1077
1078 In addition to read/modify/write the setup header of the struct
1079 boot_params as that of 16-bit boot protocol, the boot loader should
1080 also fill the additional fields of the struct boot_params as that
1081 described in zero-page.txt.
1082
1083 After setting up the struct boot_params, the boot loader can load the
1084 32/64-bit kernel in the same way as that of 16-bit boot protocol.
1085
1086 In 32-bit boot protocol, the kernel is started by jumping to the
1087 32-bit kernel entry point, which is the start address of loaded
1088 32/64-bit kernel.
1089
1090 At entry, the CPU must be in 32-bit protected mode with paging
1091 disabled; a GDT must be loaded with the descriptors for selectors
1092 __BOOT_CS(0x10) and __BOOT_DS(0x18); both descriptors must be 4G flat
1093 segment; __BOOT_CS must have execute/read permission, and __BOOT_DS
1094 must have read/write permission; CS must be __BOOT_CS and DS, ES, SS
1095 must be __BOOT_DS; interrupt must be disabled; %esi must hold the base
1096 address of the struct boot_params; %ebp, %edi and %ebx must be zero.
1097
1098 **** 64-bit BOOT PROTOCOL
1099
1100 For machine with 64bit cpus and 64bit kernel, we could use 64bit bootloader
1101 and we need a 64-bit boot protocol.
1102
1103 In 64-bit boot protocol, the first step in loading a Linux kernel
1104 should be to setup the boot parameters (struct boot_params,
1105 traditionally known as "zero page"). The memory for struct boot_params
1106 could be allocated anywhere (even above 4G) and initialized to all zero.
1107 Then, the setup header at offset 0x01f1 of kernel image on should be
1108 loaded into struct boot_params and examined. The end of setup header
1109 can be calculated as follows:
1110
1111         0x0202 + byte value at offset 0x0201
1112
1113 In addition to read/modify/write the setup header of the struct
1114 boot_params as that of 16-bit boot protocol, the boot loader should
1115 also fill the additional fields of the struct boot_params as described
1116 in zero-page.txt.
1117
1118 After setting up the struct boot_params, the boot loader can load
1119 64-bit kernel in the same way as that of 16-bit boot protocol, but
1120 kernel could be loaded above 4G.
1121
1122 In 64-bit boot protocol, the kernel is started by jumping to the
1123 64-bit kernel entry point, which is the start address of loaded
1124 64-bit kernel plus 0x200.
1125
1126 At entry, the CPU must be in 64-bit mode with paging enabled.
1127 The range with setup_header.init_size from start address of loaded
1128 kernel and zero page and command line buffer get ident mapping;
1129 a GDT must be loaded with the descriptors for selectors
1130 __BOOT_CS(0x10) and __BOOT_DS(0x18); both descriptors must be 4G flat
1131 segment; __BOOT_CS must have execute/read permission, and __BOOT_DS
1132 must have read/write permission; CS must be __BOOT_CS and DS, ES, SS
1133 must be __BOOT_DS; interrupt must be disabled; %rsi must hold the base
1134 address of the struct boot_params.
1135
1136 **** EFI HANDOVER PROTOCOL
1137
1138 This protocol allows boot loaders to defer initialisation to the EFI
1139 boot stub. The boot loader is required to load the kernel/initrd(s)
1140 from the boot media and jump to the EFI handover protocol entry point
1141 which is hdr->handover_offset bytes from the beginning of
1142 startup_{32,64}.
1143
1144 The function prototype for the handover entry point looks like this,
1145
1146     efi_main(void *handle, efi_system_table_t *table, struct boot_params *bp)
1147
1148 'handle' is the EFI image handle passed to the boot loader by the EFI
1149 firmware, 'table' is the EFI system table - these are the first two
1150 arguments of the "handoff state" as described in section 2.3 of the
1151 UEFI specification. 'bp' is the boot loader-allocated boot params.
1152
1153 The boot loader *must* fill out the following fields in bp,
1154
1155     o hdr.code32_start
1156     o hdr.cmd_line_ptr
1157     o hdr.ramdisk_image (if applicable)
1158     o hdr.ramdisk_size  (if applicable)
1159
1160 All other fields should be zero.