Lines Matching +full:mode +full:- +full:bootloader
1 .. SPDX-License-Identifier: GPL-2.0
12 real-mode DOS as a mainstream operating system.
28 Protocol 2.02 (Kernel 2.4.0-test3-pre3) New command line protocol.
31 safe for systems which use the EBDA from SMM or 32-bit
35 Protocol 2.03 (Kernel 2.4.18-pre1) Explicitly makes the highest possible
36 initrd address available to the bootloader.
40 Protocol 2.05 (Kernel 2.6.20) Make protected mode kernel relocatable.
54 Protocol 2.09 (Kernel 2.6.26) Added a field of 64-bit physical
68 Protocol 2.13 (Kernel 3.14) Support 32- and 64-bit flags being set in
69 xloadflags to support booting a 64-bit kernel from 32-bit
99 0A0000 +------------------------+
101 09A000 +------------------------+
103 | Stack/heap | For use by the kernel real-mode code.
104 098000 +------------------------+
105 | Kernel setup | The kernel real-mode code.
106 090200 +------------------------+
108 090000 +------------------------+
109 | Protected-mode kernel | The bulk of the kernel image.
110 010000 +------------------------+
111 | Boot loader | <- Boot sector entry point 0000:7C00
112 001000 +------------------------+
114 000800 +------------------------+
116 000600 +------------------------+
118 000000 +------------------------+
120 When using bzImage, the protected-mode kernel was relocated to
121 0x100000 ("high memory"), and the kernel real-mode block (boot sector,
127 It is desirable to keep the "memory ceiling" -- the highest point in
128 low memory touched by the boot loader -- as low as possible, since
146 | Protected-mode kernel |
147 100000 +------------------------+
149 0A0000 +------------------------+
153 X+10000 +------------------------+
154 | Stack/heap | For use by the kernel real-mode code.
155 X+08000 +------------------------+
156 | Kernel setup | The kernel real-mode code.
158 X +------------------------+
159 | Boot loader | <- Boot sector entry point 0000:7C00
160 001000 +------------------------+
162 000800 +------------------------+
164 000600 +------------------------+
166 000000 +------------------------+
171 The Real-Mode Kernel Header
179 real-mode code (boot sector and setup code) and then examine the
180 following header at offset 0x01f1. The real-mode code can total up to
191 01F4/4 2.04+(2) syssize The size of the 32-bit code in 16-byte paras
192 01F8/2 ALL ram_size DO NOT USE - for bootsect.S use only
193 01FA/2 ALL vid_mode Video mode control
200 020C/2 2.00+ start_sys_seg The load-low segment (0x1000) (obsolete)
208 0220/4 2.00+ bootsect_kludge DO NOT USE - for bootsect.S use only
212 0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line
220 0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data
223 0250/8 2.09+ setup_data 64-bit physical pointer to linked list
239 (3) Ignored, but safe to set, for boot protocols 2.02-2.09.
247 Real-mode kernel must be located at 0x90000.
258 For each field, some are information from the kernel to the bootloader
259 ("read"), some are expected to be filled out by the bootloader
261 bootloader ("modify").
277 The size of the setup code in 512-byte sectors. If this field is
278 0, the real value is 4. The real-mode code consists of the boot
279 sector (always one 512-byte sector) plus the setup code.
299 The size of the protected-mode code in units of 16-byte paragraphs.
397 If set to a nonzero value, contains a pointer to a NUL-terminated
398 human-readable kernel version number string, less 0x200. This can
426 four bits for the bootloader version.
430 type_of_loader <- 0xE4
431 ext_loader_type <- 0x05
432 ext_loader_ver <- 0x23
438 (0x00 reserved for pre-2.00 bootloader)
440 2 bootsect-loader
446 8 U-Boot
451 D kexec-tools
455 11 Minimal Linux Bootloader
456 <http://sebastian-plotz.blogspot.de>
460 Please contact <hpa@zytor.com> if you need a bootloader ID value assigned.
473 - If 0, the protected-mode code is loaded at 0x10000.
474 - If 1, the protected-mode code is loaded at 0x100000.
478 - Used internally by the compressed kernel to communicate
481 - If 1, KASLR enabled.
482 - If 0, KASLR disabled.
486 - If 0, print early messages.
487 - If 1, suppress early messages.
497 - This flag is obsolete.
510 Protocol: 2.00-2.01
513 When using protocol 2.00 or 2.01, if the real mode kernel is not
516 the kernel command line) moved in addition to the real-mode kernel
522 if the real-mode code is loaded at 0x90000.
531 The address to jump to in protected mode. This defaults to the load
539 2. if a bootloader which does not install a hook loads a
550 The 32-bit linear address of the initial ramdisk or ramfs. Leave at
579 Set this field to the offset (from the beginning of the real-mode
625 same 64K segment as the real-mode code itself.
671 If this field is nonzero, the protected-mode part of the kernel can
692 power-of-two alignment from kernel_alignment down to this alignment.
705 - If 1, this kernel has the legacy 64-bit entry point at 0x200.
709 - If 1, kernel/boot_params/cmdline/ramdisk can be above 4G.
713 - If 1, the kernel supports the 32-bit EFI handoff entry point
718 - If 1, the kernel supports the 64-bit EFI handoff entry point
723 - If 1, the kernel supports kexec EFI boot with EFI runtime support.
749 This field allows the bootloader to inform the kernel we are in one
762 Type: write (subarch-dependent)
778 If non-zero then this field contains the offset from the beginning
779 of the protected-mode code to the payload.
805 The 64-bit physical pointer to NULL terminated single linked list of
817 Where, the next is a 64-bit physical pointer to the next node of
829 and because it has a 32-bit length field. However, it is important that
876 kernel. A relocating bootloader should attempt to load at this
879 A non-relocatable kernel will unconditionally move itself and to run
923 in the uncompressed protected mode region.
940 a long time, for lack of alternatives and -- especially early on -- inertia.
942 available to a BIOS-based loader (setup_data is, though).
945 2-byte jump field, which doubles as a length field for the structure, combined
946 with the size of the "hole" in struct boot_params that a protected-mode loader
953 the kernel image, because it is .bss and has no image-provided content.
957 bootloader copying its contents anywhere, but that is OK; if it becomes
958 necessary it can still contain data items that an enabled bootloader would be
968 .long kernel_info_var_len_data - kernel_info
969 .long kernel_info_end - kernel_info
974 .long example_struct_end - example_struct
980 .long example_strings_end - example_strings
986 This way the kernel_info is self-contained blob.
989 Each variable size data header/magic can be any 4-character string,
1033 From boot protocol version 2.08 onwards the CRC-32 is calculated over
1048 The kernel command line is a null-terminated string. The maximum
1061 - At offset 0x0020 (word), "cmd_line_magic", enter the magic
1064 - At offset 0x0022 (word), "cmd_line_offset", enter the offset
1066 real-mode kernel).
1068 - The kernel command line *must* be within the memory region
1073 Memory Layout of The Real-Mode Code
1076 The real-mode code requires a stack/heap to be set up, as well as
1078 in the real-mode accessible memory in bottom megabyte.
1087 - When loading a zImage kernel ((loadflags & 0x01) == 0).
1088 - When loading a 2.01 or earlier boot protocol kernel.
1091 For the 2.00 and 2.01 boot protocols, the real-mode code
1094 real-mode code must be loaded at 0x90000.
1099 located in the same 64K segment as the real-mode setup code; it is
1103 The kernel command line should not be located below the real-mode
1111 mode segment.
1116 0x0000-0x7fff Real mode kernel
1117 0x8000-0xdfff Stack and heap
1118 0xe000-0xffff Kernel command line
1124 0x0000-0x7fff Real mode kernel
1125 0x8000-0x97ff Stack and heap
1126 0x9800-0x9fff Kernel command line
1131 unsigned long base_ptr; /* base address for real-mode segment */
1150 heap_end_ptr = heap_end - 0x200;
1171 /* A very old kernel MUST have its real-mode code
1175 /* Copy the real-mode kernel */
1184 (64-(setup_sects+1))*512);
1191 The 32-bit (non-real-mode) kernel starts at offset (setup_sects+1)*512
1203 the entire 0x10000-0x90000 range of memory. This means it is pretty
1204 much a requirement for these kernels to load the real-mode part at
1216 Documentation/admin-guide/kernel-parameters.rst to make sure they will not
1219 vga=<mode>
1220 <mode> here is either an integer (in C notation, either
1234 the bootloader!
1238 obviously bootloader-dependent, and some boot loaders
1242 user-specified command line:
1246 is obviously bootloader-dependent.
1252 recommended that they are located *first*, before the user-specified
1253 or configuration-specified command line. Otherwise, "init=/bin/sh"
1261 located at *segment* offset 0x20 from the start of the real mode
1262 kernel. This means that if you loaded your real-mode kernel code at
1265 At entry, ds = es = ss should point to the start of the real-mode
1281 /* Set up the real-mode kernel stack */
1292 a demand-loaded module!
1309 A 16-bit real mode far subroutine invoked immediately before
1310 entering protected mode. The default routine disables NMI, so
1314 A 32-bit flat-mode routine *jumped* to immediately after the
1315 transition to protected mode, but before the kernel is
1325 32-bit Boot Protocol
1329 LinuxBIOS, etc, and kexec, the 16-bit real mode setup code in kernel
1330 based on legacy BIOS can not be used, so a 32-bit boot protocol needs
1333 In 32-bit boot protocol, the first step in loading a Linux kernel
1344 boot_params as that of 16-bit boot protocol, the boot loader should
1346 described in chapter :doc:`zero-page`.
1349 32/64-bit kernel in the same way as that of 16-bit boot protocol.
1351 In 32-bit boot protocol, the kernel is started by jumping to the
1352 32-bit kernel entry point, which is the start address of loaded
1353 32/64-bit kernel.
1355 At entry, the CPU must be in 32-bit protected mode with paging
1363 64-bit Boot Protocol
1366 For machine with 64bit cpus and 64bit kernel, we could use 64bit bootloader
1367 and we need a 64-bit boot protocol.
1369 In 64-bit boot protocol, the first step in loading a Linux kernel
1380 boot_params as that of 16-bit boot protocol, the boot loader should
1382 in chapter :doc:`zero-page`.
1385 64-bit kernel in the same way as that of 16-bit boot protocol, but
1388 In 64-bit boot protocol, the kernel is started by jumping to the
1389 64-bit kernel entry point, which is the start address of loaded
1390 64-bit kernel plus 0x200.
1392 At entry, the CPU must be in 64-bit mode with paging enabled.
1408 which is hdr->handover_offset bytes from the beginning of
1422 firmware, 'table' is the EFI system table - these are the first two
1424 UEFI specification. 'bp' is the boot loader-allocated boot params.
1428 - hdr.cmd_line_ptr
1429 - hdr.ramdisk_image (if applicable)
1430 - hdr.ramdisk_size (if applicable)
1436 loading protocol (refer to [0] for an example of the bootloader side of
1438 bootloader regarding the internal representation of boot_params or any
1442 [0] https://github.com/u-boot/u-boot/commit/ec80b4735a593961fe701cc3a5d717d4739b0fd0