Difference between booting a PC or an Embedded System
BUILDING AND PORTING EMBEDDED OPERATING
SYSTEMS
THE BOOTING PROCESS
Power On
BIOS
GRUB
Kernel
Get Bootloader
Get Kernel
Power On
X-Loader
U-Boot
Kernel
Get Bootloader
Get Kernel
PC Embedded
PCs are a highly modular platform. Most components are in sockets or slots that permits easy replacement.
Embedded Systems tend to solder their components directly to the PCB as they don’t need to be replaced.
EMBEDDED SYSTEM VS PC
EMBEDDED SYSTEM VS PC
i7-930
i7-940
i7-960
i7-950
i7-970
i7-920
i7-980X
i7-965X
EMBEDDED SYSTEM VS PC
DDR3-2133DDR3-1866DDR3-1600DDR3-1333DDR3-1066DDR3-800
Voltage1.2-1.5v
LatencyCS-RAS-CAS-WE
EMBEDDED SYSTEM VS PC
Different PC I -E s tandardsV1 .0 /v2 .0 /v3 .0
D ifferent l ane countsx1 /x2 /x4 /x8 /x16
A lso Legacy PC I suppor t
EMBEDDED SYSTEM VS PC
USB 2.0
7.1 Audio Codec
USB 3.0
Gigabit Ethernet
S-ATA3 & 6Gbps
IDE & Floppy
Intel PCH
EMBEDDED SYSTEM VS PC
TI OMAP 3730 Processor512MB DDR@200MHzPowerVR SGX530 Graphics
All soldered directly to theboard. Not intended forreplacements.
PC booting is a much longer process than for embedded systems.
Desktop PCs are by far the worst due to their massive compatibility issue
Laptops are faster because their components are much more controlled.
IGEPv2
Raspberry Pi
BCM97425
x86 Laptop
x86 Desktop
0 20 40
Time to Linux Kernel PromptTime to BootloaderTime to POST
EMBEDDED SYSTEM VS PC
Desktop PC: Gigabyte GA-X58A-UD3R, Intel Core i7-950 @ 4.2GHz, 12GB DDR3-1600, GeForce GTX580, Crucial M4 256GB SSDLaptop PC: Dell XPS 15 L502x, Intel Core i7-2670QM @ 2.2GHz, 6GB DDR3-1600, Intel HD3000 & GeForce GT540M, Western Digital Caviar Black 750GB.
BIOS and Bootloaders
BUILDING AND PORTING EMBEDDED OPERATING
SYSTEMS
• BIOS stands for Basic Input Output System
• First performs Power on self test and initializes Memory, PCI bus, Video, storage, Network(PXE), HID and any other systems a bootloader may need to load the OS.
• Allows user to choose hardware settings within a simple UI
• X86 always starts CPU in real mode.• 20 bit segmented memory address space• Only 1 MiB of addressable memory.
BIOS
BIOS
• Post POST search for a bootable drive and copy 512byte MBR to RAM.
• This 512bytes is the MBR• Partition table 64b• Two byte boot signature• Optional Disk timestamps and signatures• First stage Bootstrap code takes up the rest
• The BIOS yields control to the bootstrap who's only task is to locate and execute a more complex second stage bootloader (grub,BOOTMGR,NTLDR)
BIOS
What is a bootloader?• Program used to load an operating system or another boot loader.• Boot loaders run in Real mode and use BIOS provided code • Operating systems replace BIOS code with their own.
What is a second stage bootloader?• Programs like GRUB, LILO or NTLDR • allow multi-boot systems• They are aware of file systems• Allow creation of ram discs in memory to boot the linux kernel• Once the kernel has retrieved all the information it requires in Real mode it will
change the cpu to protected mode providing support for virtual memory, memory protection, multitasking and code privilege levels.
Bootloader
What is it?• Unified Extensible Firmware Interface
• Replacement for BIOS
Improvements• Not a single piece of firmware but a programmable software
interface. • It is hardware independent
• It provides a standard method of interfacing with firmware during the boot process
• It's faster due to using Block I/O over interrupts
UEFI – The Future?
• 64bit version can address all system memory while booting.
• Can boot from disks larger than 2TB
• Pre-boot networking support
• Mouse usable in boot options
• You can mount partitions and read file systems
• Doesn't solve the problem of requiring two drivers. One for the firmware and one for the operating system.
• Secure Boot(arguably)
UEFI – The Future?
IGEPv2 framework
BUILDING AND PORTING EMBEDDED OPERATING
SYSTEMS
IGEP boot process
ROM Code U-BootX-Loader Kernel
ROM CodeWhat does the IGEP ROM code do?• Code is executed in a known location in ROM• Minimal Configuration is performed
• Some clocks set• Some memories and peripherals initialised
• Searches boot devices for suitable boot image
• Supports serial, SD card, NAND flash and USB amongst others.
• Boot order is defined by a set of GPIO configuration pins referred to as SYSBOOT
• On finding the first x-loader image it is copied to SRAM and then executed
Serial Boot• ID is written out to the serial port and a response is waited for.• If response received within time limit ROM will transfer data received from serial port to
SRAM and execute it.
SD Boot• The ROM code looks for a suitably formatted SD card on the MMC controllers.
If a readable partition is found directory is scanned for a specially signed file called an "MLO" . Assuming the file is as expected, it is transferred into the internal SRAM and control is passed to it.
NAND\eMMC• If NAND is in the boot list the ROM code will attempt to load the first sector, skipping it if its
bad, corrupt or blank. If it reaches the 4th sector and no good sector has been found it will move on. If a good sector is found then it will load the contents to ram and then start executing it.
ROM Code
X-loaderWhat 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
MLO files• Through MLO files the need for a second stage boot loader can be removed. • An MLO file is a an x-loader file that has been given a header with the size of the image
and deployment memory location.• You can optionally define clock frequency amongst other things• MLO files allow zImages to be booted without the need for a second stage boot loader
Serial and SD• X-loader supports transfering an image to the board using kermit over a serial connection
and will also load a uboot.bin file stored on the SD.
Watch out!Boot-loaders are doing configuration
that the kernel is not!
JTAG• Initially devised for testing printed circuit boards with its boundary
scanning functionality JTAG is now used extensively for debugging, programming CPLDS and initialising flash memory.
• Can be useful to recover bricked devices or write new firmware to NAND on restricted devices. But the IGEP is un-brickable
• Tools like OpenOCD and GDB ARM have successfully been used on OMAP530 devices like the beagleboard.
Das U-BootBUILDING AND PORTING EMBEDDED OPERATING
SYSTEMS
OS/Bootloader Coupling in:
BUILDING AND PORTING EMBEDDED OPERATING
SYSTEMS
QNX is a Canadian microkernel-based RTOS. Device drivers are all run as userspace applications
outside the kernel. Used in many applications, mainly automotive systems. HAM (High Availability Manager). Adaptive Partitioning Scheduler. Safety critical certification. QNX owned by RIM. Tightly coupled bootloader and kernel. Transparent distributed networking.
QNX?
Most general purpose operating systems (such as linux) avoid becoming too tightly coupled with their bootloaders.
This has led to bootloaders which support a multitude of functions.
An RTOS developer can take advantage of this by using the generic bootloader (and it’s more advanced capabilit ies (NFS, ping) to ensure hardware works, and easily bring it to l ife.
During development this general purpose bootloader can be effectively used as a “bootloader loader”.
The high-functionality (and easy to hack!) bootloader (i.e. U-Boot) can then be removed from a shipped product, leaving behind only a basic tightly-coupled version.
BOOTLOADER/OS INTERACTION
QNX BOOTING
U-Boot
Startup
QNX Kernel
On-Chip boot ROM code generally causes the CPU to perform minimal initialisation of peripheral such as NAND Flash and instructs it to begin reading code from there into memory and executing it.
This code can be a standard embedded bootloader such as U-Boot, or it can be a QNX IPL.
U-Boot loads the QNX “IPL” image into memory, and begins executing it.
The “IPL” is an “Initial Program Loader” which is responsible for init ial ising basic hardware and passing control to “Startup” code, and subsequently the QNX Kernel.
IPL
Begins in assembly, performs initialisation for HLL. Initialises CPU/(some) Peripheral Clocks. Initialises basic I/O (serial). Minimal pin multiplexing for required peripherals (i.e.
SDHC hardware). Reads in and decompresses “IFS” image (ramdisk +
kernel). Includes basic (FAT) filesystem drivers for SDHC reading. Passes control to “Startup” Can start “minidrivers” for device interaction before
OS/Kernel even begins booting.
QNX IPL
CODE
CODE
Startup begins in C language, initialises most peripherals, and sets up important kernel structures.
The QNX kernel expects a “syspage” structure to exist at a pre-defined location in memory. This structures provides important information about the host system.
Enables CPU SMP operation (multiple-cores).Often re-does initialisation done by IPL (such as serial
I/O) to enable more advanced functionality. Informs minidrivers of new environment before passing
control to kernel.
QNX STARTUP
CODE
Indicates CPU type (e.g. ARM) and vital information (e.g. number of cores), and other supported features such as NEON extensions.
Provides access to hardware-specific function callouts made available to the system before the Kernel was running.
Provides information about the memory environment in which the kernel is running.
Information about bus devices, IRQs. Information about connected peripherals and device trees
for /dev population.
SYSPAGE
Prevents need for auxillary processors for instant-on peripheral ineraction.
Linked against bootloader code.Called periodically during startup, initially with
polling and then interrupts when they become available.
Full drivers are allowed access to minidriver memory once the kernel has loaded so they can take over without data loss.
Make use of I/O hardware within 10ms of power-on.
MINIDRIVERS
QNX Implements its own FS-aware bootloader (IPL).This bootloader is tightly coupled with its own system
initialisation and kernel.This bootloader is only configurable via source code,
unlike U-Boot or Grub.Source code for bootloader and startup is freely
available for a variety of hardware (kernel is not):http://
community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/BSPAndDrivers
Questions?
SUMMARY
Top Related