.. SPDX-License-Identifier: GPL-2.0+

Booting Linux on x86 with FIT
=============================

Background
----------

Generally Linux x86 uses its own very complex booting method. There is a setup
binary which contains all sorts of parameters and a compressed self-extracting
binary for the kernel itself, often with a small built-in serial driver to
display decompression progress.

The x86 CPU has various processor modes. I am no expert on these, but my
understanding is that an x86 CPU (even a really new one) starts up in a 16-bit
'real' mode where only 1MB of memory is visible, moves to 32-bit 'protected'
mode where 4GB is visible (or more with special memory access techniques) and
then to 64-bit 'long' mode if 64-bit execution is required.

Partly the self-extracting nature of Linux was introduced to cope with boot
loaders that were barely capable of loading anything. Even changing to 32-bit
mode was something of a challenge, so putting this logic in the kernel seemed
to make sense.

Bit by bit more and more logic has been added to this post-boot pre-Linux
wrapper:

- Changing to 32-bit mode
- Decompression
- Serial output (with drivers for various chips)
- Load address randomisation
- Elf loader complete with relocation (for the above)
- Random number generator via 3 methods (again for the above)
- Some sort of EFI mini-loader (1000+ glorious lines of code)
- Locating and tacking on a device tree and ramdisk

To my mind, if you sit back and look at things from first principles, this
doesn't make a huge amount of sense. Any boot loader worth its salts already
has most of the above features and more besides. The boot loader already knows
the layout of memory, has a serial driver, can decompress things, includes an
ELF loader and supports device tree and ramdisks. The decision to duplicate
all these features in a Linux wrapper caters for the lowest common
denominator: a boot loader which consists of a BIOS call to load something off
disk, followed by a jmp instruction.

(Aside: On ARM systems, we worry that the boot loader won't know where to load
the kernel. It might be easier to just provide that information in the image,
or in the boot loader rather than adding a self-relocator to put it in the
right place. Or just use ELF?

As a result, the x86 kernel boot process is needlessly complex. The file
format is also complex, and obfuscates the contents to a degree that it is
quite a challenge to extract anything from it. This bzImage format has become
so prevalent that is actually isn't possible to produce the 'raw' kernel build
outputs with the standard Makefile (as it is on ARM for example, at least at
the time of writing).

This document describes an alternative boot process which uses simple raw
images which are loaded into the right place by the boot loader and then
executed.


Build the kernel
----------------

Note: these instructions assume a 32-bit kernel. U-Boot also supports directly
booting a 64-bit kernel by jumping into 64-bit mode first (see below).

You can build the kernel as normal with 'make'. This will create a file called
'vmlinux'. This is a standard ELF file and you can look at it if you like::

    $ objdump -h vmlinux

    vmlinux:     file format elf32-i386

    Sections:
    Idx Name          Size      VMA       LMA       File off  Algn
      0 .text         00416850  81000000  01000000  00001000  2**5
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
      1 .notes        00000024  81416850  01416850  00417850  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
      2 __ex_table    00000c50  81416880  01416880  00417880  2**3
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      3 .rodata       00154b9e  81418000  01418000  00419000  2**5
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      4 __bug_table   0000597c  8156cba0  0156cba0  0056dba0  2**0
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      5 .pci_fixup    00001b80  8157251c  0157251c  0057351c  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      6 .tracedata    00000024  8157409c  0157409c  0057509c  2**0
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      7 __ksymtab     00007ec0  815740c0  015740c0  005750c0  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      8 __ksymtab_gpl 00004a28  8157bf80  0157bf80  0057cf80  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
      9 __ksymtab_strings 0001d6fc  815809a8  015809a8  005819a8  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     10 __init_rodata 00001c3c  8159e0a4  0159e0a4  0059f0a4  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     11 __param       00000ff0  8159fce0  0159fce0  005a0ce0  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     12 __modver      00000330  815a0cd0  015a0cd0  005a1cd0  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     13 .data         00063000  815a1000  015a1000  005a2000  2**12
                      CONTENTS, ALLOC, LOAD, RELOC, DATA
     14 .init.text    0002f104  81604000  01604000  00605000  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
     15 .init.data    00040cdc  81634000  01634000  00635000  2**12
                      CONTENTS, ALLOC, LOAD, RELOC, DATA
     16 .x86_cpu_dev.init 0000001c  81674cdc  01674cdc  00675cdc  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     17 .altinstructions 0000267c  81674cf8  01674cf8  00675cf8  2**0
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     18 .altinstr_replacement 00000942  81677374  01677374  00678374  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     19 .iommu_table  00000014  81677cb8  01677cb8  00678cb8  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     20 .apicdrivers  00000004  81677cd0  01677cd0  00678cd0  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, DATA
     21 .exit.text    00001a80  81677cd8  01677cd8  00678cd8  2**0
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
     22 .data..percpu 00007880  8167a000  0167a000  0067b000  2**12
                      CONTENTS, ALLOC, LOAD, RELOC, DATA
     23 .smp_locks    00003000  81682000  01682000  00683000  2**2
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
     24 .bss          000a1000  81685000  01685000  00686000  2**12
                      ALLOC
     25 .brk          00424000  81726000  01726000  00686000  2**0
                      ALLOC
     26 .comment      00000049  00000000  00000000  00686000  2**0
                      CONTENTS, READONLY
     27 .GCC.command.line 0003e055  00000000  00000000  00686049  2**0
                      CONTENTS, READONLY
     28 .debug_aranges 0000f4c8  00000000  00000000  006c40a0  2**3
                      CONTENTS, RELOC, READONLY, DEBUGGING
     29 .debug_info   0440b0df  00000000  00000000  006d3568  2**0
                      CONTENTS, RELOC, READONLY, DEBUGGING
     30 .debug_abbrev 0022a83b  00000000  00000000  04ade647  2**0
                      CONTENTS, READONLY, DEBUGGING
     31 .debug_line   004ead0d  00000000  00000000  04d08e82  2**0
                      CONTENTS, RELOC, READONLY, DEBUGGING
     32 .debug_frame  0010a960  00000000  00000000  051f3b90  2**2
                      CONTENTS, RELOC, READONLY, DEBUGGING
     33 .debug_str    001b442d  00000000  00000000  052fe4f0  2**0
                      CONTENTS, READONLY, DEBUGGING
     34 .debug_loc    007c7fa9  00000000  00000000  054b291d  2**0
                      CONTENTS, RELOC, READONLY, DEBUGGING
     35 .debug_ranges 00098828  00000000  00000000  05c7a8c8  2**3
                      CONTENTS, RELOC, READONLY, DEBUGGING

There is also the setup binary mentioned earlier. This is at
arch/x86/boot/setup.bin and is about 12KB in size. It includes the command
line and various settings need by the kernel. Arguably the boot loader should
provide all of this also, but setting it up is some complex that the kernel
helps by providing a head start.

As you can see the code loads to address 0x01000000 and everything else
follows after that. We could load this image using the 'bootelf' command but
we would still need to provide the setup binary. This is not supported by
U-Boot although I suppose you could mostly script it. This would permit the
use of a relocatable kernel.

All we need to boot is the vmlinux file and the setup.bin file.


Create a FIT
------------

To create a FIT you will need a source file describing what should go in the
FIT. See kernel.its for an example for x86 and also instructions on setting
the 'arch' value for booting 64-bit kernels if desired. Put this into a file
called image.its.

Note that setup is loaded to the special address of 0x90000 (a special address
you just have to know) and the kernel is loaded to 0x01000000 (the address you
saw above). This means that you will need to load your FIT to a different
address so that U-Boot doesn't overwrite it when decompressing. Something like
0x02000000 will do so you can set CONFIG_SYS_LOAD_ADDR to that.

In that example the kernel is compressed with lzo. Also we need to provide a
flat binary, not an ELF. So the steps needed to set things are are::

    # Create a flat binary
    objcopy -O binary vmlinux vmlinux.bin

    # Compress it into LZO format
    lzop vmlinux.bin

    # Build a FIT image
    mkimage -f image.its image.fit

(be careful to run the mkimage from your U-Boot tools directory since it
will have x86_setup support.)

You can take a look at the resulting fit file if you like::

    $ dumpimage -l image.fit
    FIT description: Simple image with single Linux kernel on x86
    Created:         Tue Oct  7 10:57:24 2014
     Image 0 (kernel)
      Description:  Vanilla Linux kernel
      Created:      Tue Oct  7 10:57:24 2014
      Type:         Kernel Image
      Compression:  lzo compressed
      Data Size:    4591767 Bytes = 4484.15 kB = 4.38 MB
      Architecture: Intel x86
      OS:           Linux
      Load Address: 0x01000000
      Entry Point:  0x00000000
      Hash algo:    sha1
      Hash value:   446b5163ebfe0fb6ee20cbb7a8501b263cd92392
     Image 1 (setup)
      Description:  Linux setup.bin
      Created:      Tue Oct  7 10:57:24 2014
      Type:         x86 setup.bin
      Compression:  uncompressed
      Data Size:    12912 Bytes = 12.61 kB = 0.01 MB
      Hash algo:    sha1
      Hash value:   a1f2099cf47ff9816236cd534c77af86e713faad
     Default Configuration: 'config-1'
     Configuration 0 (config-1)
      Description:  Boot Linux kernel
      Kernel:       kernel


Booting the FIT
---------------

To make it boot you need to load it and then use 'bootm' to boot it. A
suitable script to do this from a network server is::

    bootp
    tftp image.fit
    bootm

This will load the image from the network and boot it. The command line (from
the 'bootargs' environment variable) will be passed to the kernel.

If you want a ramdisk you can add it as normal with FIT. If you want a device
tree then x86 doesn't normally use those - it has ACPI instead.


Why Bother?
-----------

#. It demystifies the process of booting an x86 kernel
#. It allows use of the standard U-Boot boot file format
#. It allows U-Boot to perform decompression - problems will provide an error
   message and you are still in the boot loader. It is possible to investigate.
#. It avoids all the pre-loader code in the kernel which is quite complex to
   follow
#. You can use verified/secure boot and other features which haven't yet been
   added to the pre-Linux
#. It makes x86 more like other architectures in the way it boots a kernel.
   You can potentially use the same file format for the kernel, and the same
   procedure for building and packaging it.


References
----------

In the Linux kernel, Documentation/x86/boot.txt defines the boot protocol for
the kernel including the setup.bin format. This is handled in U-Boot in
arch/x86/lib/zimage.c and arch/x86/lib/bootm.c.

Various files in the same directory as this file describe the FIT format.


.. sectionauthor:: Simon Glass <sjg@chromium.org> 7-Oct-2014
