build and install
- Run make
- Copy the final kernel image to the target storage
- can be zImage, vmlinux, bzImage in arch/
/boot - copying the Device Tree Blob might be necessary as well, they are available in
arch/
/boot/dts
- can be zImage, vmlinux, bzImage in arch/
- make install is rarely used in embedded development, as the
kernel image is a single file, easy to handle
- It is however possible to customize the make install behaviour in
arch/
/boot/install.sh
- It is however possible to customize the make install behaviour in
arch/
- make modules_install is used even in embedded
development, as it installs many modules and description files
- make INSTALL_MOD_PATH=
/ modules_install - The INSTALL_MOD_PATH variable is needed to install the modules in the target root filesystem instead of your host root filesystem.
- make INSTALL_MOD_PATH=
Booting with U-Boot
Recent versions of U-Boot can boot the zImage binary.
Older versions require a special kernel image format: uImage
uImage is generated from zImage using the mkimage tool. It is done automatically by the kernel make uImage target.
On some ARM platforms, make uImage requires passing a LOADADDR environment variable, which indicates at which physical memory address the kernel will be executed.
In addition to the kernel image, U-Boot can also pass a Device Tree Blob to the kernel.
The typical boot process is therefore:
- Load zImage or uImage at address X in memory
- Load
.dtb at address Y in memory
- Load
- Start the kernel with bootz X - Y (zImage case), or bootm X - Y (uImage case) The - in the middle indicates no initramfs
Kernel command line
In addition to the compile time configuration, the kernel behaviour can be adjusted with no recompilation using the kernel command line
The kernel command line is a string that defines various arguments to the kernel
- It is very important for system configuration
- root= for the root filesystem (covered later)
- console= for the destination of kernel messages
Many more exist. The most important ones are documented in Documentation/kernel-parameters.txt in kernel sources.
This kernel command line is either
- Passed by the bootloader. In U-Boot, the contents of the bootargs environment variable is automatically passed to the kernel
- Built into the kernel, using the CONFIG_CMDLINE option.