^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) Booting ARM Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) Author: Russell King
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) Date : 18 May 2002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) The following documentation is relevant to 2.4.18-rmk6 and beyond.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) In order to boot ARM Linux, you require a boot loader, which is a small
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) program that runs before the main kernel. The boot loader is expected
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) to initialise various devices, and eventually call the Linux kernel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) passing information to the kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) Essentially, the boot loader should provide (as a minimum) the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 1. Setup and initialise the RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 2. Initialise one serial port.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 3. Detect the machine type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 4. Setup the kernel tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 5. Load initramfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 6. Call the kernel image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 1. Setup and initialise RAM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) The boot loader is expected to find and initialise all RAM that the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) kernel will use for volatile data storage in the system. It performs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) this in a machine dependent manner. (It may use internal algorithms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) to automatically locate and size all RAM, or it may use knowledge of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) the RAM in the machine, or any other method the boot loader designer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) sees fit.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 2. Initialise one serial port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) -----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) OPTIONAL, RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) OPTIONAL, RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) The boot loader should initialise and enable one serial port on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) target. This allows the kernel serial driver to automatically detect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) which serial port it should use for the kernel console (generally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) used for debugging purposes, or communication with the target.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) As an alternative, the boot loader can pass the relevant 'console='
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) option to the kernel via the tagged lists specifying the port, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) serial format options as described in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) Documentation/admin-guide/kernel-parameters.rst.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 3. Detect the machine type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) MANDATORY except for DT-only platforms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) The boot loader should detect the machine type its running on by some
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) method. Whether this is a hard coded value or some algorithm that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) looks at the connected hardware is beyond the scope of this document.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) The boot loader must ultimately be able to provide a MACH_TYPE_xxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) value to the kernel. (see linux/arch/arm/tools/mach-types). This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) should be passed to the kernel in register r1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) For DT-only platforms, the machine type will be determined by device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) tree. set the machine type to all ones (~0). This is not strictly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) necessary, but assures that it will not match any existing types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 4. Setup boot data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) OPTIONAL, HIGHLY RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) The boot loader must provide either a tagged list or a dtb image for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) passing configuration data to the kernel. The physical address of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) boot data is passed to the kernel in register r2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) 4a. Setup the kernel tagged list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) --------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) The boot loader must create and initialise the kernel tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) has the size field set to '2' (0x00000002). The ATAG_NONE must set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) the size field to zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) Any number of tags can be placed in the list. It is undefined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) whether a repeated tag appends to the information carried by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) previous tag, or whether it replaces the information in its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) entirety; some tags behave as the former, others the latter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) The boot loader must pass at a minimum the size and location of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) the system memory, and root filesystem location. Therefore, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) minimum tagged list should look::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) +-----------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) base -> | ATAG_CORE | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) +-----------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) | ATAG_MEM | | increasing address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) +-----------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) | ATAG_NONE | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) +-----------+ v
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) The tagged list should be stored in system RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) The tagged list must be placed in a region of memory where neither
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) the kernel decompressor nor initrd 'bootp' program will overwrite
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) it. The recommended placement is in the first 16KiB of RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 4b. Setup the device tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) -------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) The boot loader must load a device tree image (dtb) into system ram
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) at a 64bit aligned address and initialize it with the boot data. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) dtb format is documented in Documentation/devicetree/booting-without-of.rst.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) physical address to determine if a dtb has been passed instead of a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) The boot loader must pass at a minimum the size and location of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) system memory, and the root filesystem location. The dtb must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) placed in a region of memory where the kernel decompressor will not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) overwrite it, while remaining within the region which will be covered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) by the kernel's low-memory mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) A safe location is just above the 128MiB boundary from start of RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 5. Load initramfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) If an initramfs is in use then, as with the dtb, it must be placed in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) a region of memory where the kernel decompressor will not overwrite it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) while also with the region which will be covered by the kernel's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) low-memory mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) A safe location is just above the device tree blob which itself will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) be loaded just above the 128MiB boundary from the start of RAM as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) recommended above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 6. Calling the kernel image
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) There are two options for calling the kernel zImage. If the zImage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) is stored in flash, and is linked correctly to be run from flash,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) then it is legal for the boot loader to call the zImage in flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) directly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) The zImage may also be placed in system RAM and called there. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) kernel should be placed in the first 128MiB of RAM. It is recommended
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) that it is loaded above 32MiB in order to avoid the need to relocate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) prior to decompression, which will make the boot process slightly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) faster.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) When booting a raw (non-zImage) kernel the constraints are tighter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) In this case the kernel must be loaded at an offset into system equal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) to TEXT_OFFSET - PAGE_OFFSET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) In any case, the following conditions must be met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) - Quiesce all DMA capable devices so that memory does not get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) corrupted by bogus network packets or disk data. This will save
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) you many hours of debug.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) - CPU register settings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) - r0 = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) - r1 = machine type number discovered in (3) above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) - r2 = physical address of tagged list in system RAM, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) physical address of device tree block (dtb) in system RAM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) - CPU mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) All forms of interrupts must be disabled (IRQs and FIQs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) For CPUs which do not include the ARM virtualization extensions, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) CPU must be in SVC mode. (A special exception exists for Angel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) CPUs which include support for the virtualization extensions can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) entered in HYP mode in order to enable the kernel to make full use of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) these extensions. This is the recommended boot method for such CPUs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) unless the virtualisations are already in use by a pre-installed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) hypervisor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) If the kernel is not entered in HYP mode for any reason, it must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) entered in SVC mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) - Caches, MMUs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) The MMU must be off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) Instruction cache may be on or off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) Data cache must be off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) If the kernel is entered in HYP mode, the above requirements apply to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) the HYP mode configuration in addition to the ordinary PL1 (privileged
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) kernel modes) configuration. In addition, all traps into the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) hypervisor must be disabled, and PL1 access must be granted for all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) peripherals and CPU resources for which this is architecturally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) possible. Except for entering in HYP mode, the system configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) should be such that a kernel which does not include support for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) virtualization extensions can boot correctly without extra help.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) - The boot loader is expected to call the kernel image by jumping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) directly to the first instruction of the kernel image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) On CPUs supporting the ARM instruction set, the entry must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) made in ARM state, even for a Thumb-2 kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) On CPUs supporting only the Thumb instruction set such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) Cortex-M class CPUs, the entry must be made in Thumb state.