Unit IV:Embedded Linux Kernel
Topic: Bootloaders
School Of Electrical Engineering, MITAcademy Of Engineering
Course: RealTime Embedded Systems
Instructor: Prof. Amit Nagarale
- By Omkar Rane BETA17 0120160172 Block-A B.Tech E&TC
Content
1) What is a Bootloader?
2) What is task of a Bootloader?
3) Desktop PC Vs Embedded System Booting Process
4) Embedded System Booting
5) Types of Bootloader and Booting process
6) U-Boot: Universal Bootloader
7) U-Boot: Directory structure
8) U-Boot: Configuration
9) U-Boot: Building
10)U-Boot: Summary
11)References
What is a Bootloader?
The first section of code to be executed after the embedded system is powered on or reset
on any platform .
Program that loads the “first program” (the kernel).
The bootloader is the first code to run after power up or reset, and runs before any other
software starts on a processor, including an operating system (OS), if an OS exists. For
some embedded processors, bootloaders are part of a Board Support Package (BSP),
which is used to start up and run the first silicon chips of an embedded MCU, processor,
or System on a Chip (SoC).
A boot loader is a type of program that loads and starts the process of an core processor or
any system or application or firmware.
Bootloader enables loading an application within the processor memory when a processor
is started or booted up.
A boot loader is also known as boot manager or bootstrap loader.
What is task of a Bootloader?
In an embedded system the role of the boot loader is more complicated since these systems
do not have a BIOS(Basic input output System) to perform the initial system configuration.
Bootloader initializes basic hardware of system.(Memory setup & initialization, System
peripheral initialization).
Bootloader loads application binary, usually an operating system kernel, from flash storage,
from the network, or from another type of non-volatile storage.
Bootloader is used for decompression of the application binary.
Bootloader is used for execution of the application.
Besides these basic functions, most bootloaders provide a shell with various commands
implementing different operations.
Loading of data from storage or network, memory inspection, hardware diagnostics and
testing, etc.
Multiple kernel boots and multiple way boots.
Embedded System Booting
What are different ways of booting embedded system?
Reset/Halt command
BIOS+Boot loader configuration.
Bootloader environment.
Load kernel using TFTP/Net boot
Load kernel from NAND or NOR
Load kernel from SD-CARD.
What are the booting media available in embedded systems?
Hard disk and Solid state devices are common in laptops and desktops. However
embedded system rarely have disk drives. They often include -
NAND flash ROM
NOR flash ROM
SD CARD
MMC
USB Drive
Disk less Network booting
Types of Bootloader and Booting process
What are different types of boot loaders ?
1) Boot-ROM ( or Pre-Boot Loader)
• Small code which loads First stage boot loader (Boot code i.e. available on ROM).
2) First Stage Boot Loader
• Small Piece of code that initialize the NAND/MMC & DRAM controller.
• Initialize hardware components.
• Prepare memory space for loading 2nd stage program and set up stack pointer.
• Jump entry to second stage.
3) Second Stage Boot Loader
• Primary function of the second-stage boot loader is to Loading the kernel into RAM or jumping
directly to the start of the kernel.
• Check memory map.
• Set parameters and initialize hardware components in this stage.
• Boot kernel.
U-Boot: Universal Bootloader
The "Universal Bootloader" ("Das U-Boot") is a monitor program
Free Software: full source code under GPL Can get at: //www.denx.de/wiki/U-Boot
Production quality: used as default boot loader by several board vendors.
Portable and easy to port and to debug
Many supported architectures: PPC, ARM, MIPS, x86, m68k, NIOS, Microblaze.
More than 216 boards supported by public source tree Simple user interface: CLI or Hush shell.
Environment variable storing option on different media like EEPROM, Flash etc. Advanced
command supports.
Easy to port to new architectures, new processors, and new boards
Easy to debug: serial console output as soon as possible Features and commands configurable
As small as possible .As reliable as possible
U-Boot: Directory structure
Api-Machine/arch independentAPI for external applications.
Arch-All architecture dependent functions and CPU specific information.
Board-Platform, board level files. Eg, atmel, icecube, oxc etc., Contains all
board specific initialization.
Common-All architecture independent functions and all commands.
Configs-Default configuration files for boards.
Disks-Partition and device information for disks.
Doc- you can find all readme files.
driver-Various device drivers files.
dts- Contains Makefile for building internal U-Boot fdt(file device tree).
examples-Example code for standalone application
Fs-File system directories and codes
Include-Various header files.
lib-Processor specific libraries
Net-network related files.
Post-power on self test.
Scripts-contain sources for various helper programs.
Tools-tool directories and files.
Makefile-Top level make for uboot build and configuration.
U-Boot: Configuration
The include/configs/ directory contains one configuration file for each supported board.
It defines the CPU type, the peripherals and their configuration, the memory mapping, the
Uboot features that should be compiled in, etc.
It is a simple .h file that sets preprocessor constants. See the README file for the
documentation of these constants.
Assuming that your board is already supported by Uboot, there should be a config
corresponding to your board, for example include/configs/at91rm9200ek.h
We need to configure U-Boot for the required board which is generally done as:
make <board_name>_config
The board_name can be found in include/configs/ directory
The newer version supports kernel like configuration options like make menuconfig
Compile Uboot, by specifying the cross compiler prefix.
make CROSS_COMPILE=<cross_compile_path>.
cross_compile_path could be the command itself if already exported in PATH variable, else you can specify
the installation path of command:
For example for arm platform it would look like
make CROSS_COMPILE=arm-linux-
The result would be u-boot.bin which has to be stored in flash memory (in most of the cases).The invocation
of the stored image depends on the target architecture. The memory used to store would play the role here.
U-Boot: Building
Name of the bootloader Description
Bootmgr boot program for Microsoft systems since
Windows Vista and Windows Server 2008
NT loader (NTLDR) boot program for Microsoft systems until Windows
XP and Windows Server 2003
Barebox bootloader for embedded systems in printers,
cameras, cars, airplanes, and more
boot.efi EFI bootloader that has been used in Mac devices
since 2006
BootX former bootloader for Mac operating systems
Grand Unified Bootloader (GRUB) free boot program for Unix-like operating systems
such as Linux
ARM Core Bootloader bootloader for microcontrollers (used in iPhones
among others)
OpenBIOS free, portable boot manager under a GNU-GPL
license
References
[1] Embedded Boot loader training by Team EMERTXE,PPT ref material.
[2] Universal Bootloader by Wave digitech,PPT ref material.
[3] Das U-Boot by analog devices ref PPT material.
[4] https://github.com/u-boot/u-boot
[5] Embedded Linux | Introduction To U-Boot | Beginners,
https://www.youtube.com/watch?v=rVaiLgXccSE
[6] https://www.researchgate.net/publication/324381484_Design_and_implementation
_of_a_bootloader_in_the_context_of_intelligent_vehicle_systems
[7] https://en.wikipedia.org/wiki/Das_U-Boot
[8] https://www.denx.de/wiki/U-Boot/
Editor's Notes
Desktop:
1)Initialization task are done by BIOS.
2) Bootloader is just to boot the kernel.
The GRUB (Grand Unified Bootloader) is a bootloader available from the GNU project. A bootloader is very important as it is impossible to start an operating system without it.
On embedded System:
All needs to be done by the bootloader
But in optimized way.
What is x-loader?
X-loader is a first stage boot-loader that implements a subset of the features of u-boot.
It's small enough to fit in on-chip memory but still provides the ability to configure the pin muxing, clocks, serial console and DDR access to load the fully featured u-boot into the second stage boot loader.
In IGEP a copy of the x-loader is part of the NAND
Not limited to 512bytes
Desktop Working:
PCs first execute a part of the software known as BIOS (Basic Input/Output System). Its main task is to boot the hardware, carry out the POST (Power On Self Test), which basically checks the hardware is in perfect condition, and load the bootstrap (boot manager) to upload the operating system into the memory. BIOS can also serve as a layer between the operating system and the hardware.
Embedded System:
This software boots the processor (and surrounding devices) and loads the operating system in the memory. The latter is normally found compressed, together with the boot load, in flash. Aside from this, typical PC features (such as Power On Self Tests) are also added. The main advantage of embedded bootloaders is they occupy little space and boot far more quickly than the average BIOS (PC).
1) Trivial File Transfer Protocol (TFTP) is a simple protocol used for transferring files. TFTP uses the User Datagram Protocol (UDP) to transport data from one end to another.
History:
The project's origin is a 8xx PowerPC bootloader called 8xxROM written by Magnus Damm.[7] In October 1999 Wolfgang Denk moved the project to SourceForge.net and renamed it to PPCBoot, because SF.net did not allow project names starting with digits.[7] Version 0.4.1 of PPCBoot was first publicly released July 19, 2000.
In 2002 a previous version of the source code was briefly forked into a product called ARMBoot, but was merged back into the PPCBoot project shortly thereafter. On October 31, 2002 PPCBoot−2.0.0 was released. This marked the last release under the PPCBoot name, as it was renamed to reflect its ability to work on other architectures besides the PPC ISA.[8][9]
PPCBoot−2.0.0 became U−Boot−0.1.0 in November 2002, expanded to work on the x86 processor architecture. Additional architecture capabilities were added in the following months: MIPS32 in March 2003, MIPS64 in April, Nios II in October, ColdFire in December, and MicroBlaze in April 2004. The May 2004 release of U-Boot-1.1.2 worked on the products of 216 board manufacturers across the various architectures.[9]
The current name Das U-Boot adds a German definite article, to create a bilingual pun on the classic 1981 German submarine film Das Boot, which takes place on a World War II German U-boat. It is free software released under the terms of the GNU General Public License. It can be built on an x86 PC for any of its intended architectures using a cross development GNU toolchain, for example crosstool, the Embedded Linux Development Kit (ELDK) or OSELAS.Toolchain.
The importance of U-Boot in embedded Linux systems is quite succinctly stated in the book Building Embedded Linux Systems, by Karim Yaghmour, whose text about U-Boot begins, "Though there are quite a few other bootloaders, 'Das U-Boot', the universal bootloader, is arguably the richest, most flexible, and most actively developed open source bootloader available."[10]
Makefiles are a simple way to organize code compilation. Compiling the source code files can be tiring, especially when you have to include several source files and type the compiling command every time you need to compile. Makefiles are the solution to simplify this task.