Building and Porting embedded operating systems

advertisement
BUILDING AND PORTING
EMBEDDED OPERATING
SYSTEMS
Dif ference
between
booting a PC or
an Embedded
System
THE BOOTING PROCESS
Power
On
PC
Embedded
BIOS
X-Loader
Get Bootloader
Get Bootloader
GRUB
U-Boot
Get Kernel
Kernel
Power
On
Get Kernel
Kernel
EMBEDDED SYSTEM VS PC
 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
i7-930
i7-920
i7-940
i7-950
i7-965X
i7-960
i7-970
i7-980X
EMBEDDED SYSTEM VS PC
EMBEDDED SYSTEM VS PC
EMBEDDED SYSTEM VS PC
USB 2.0
USB 3.0
Intel PCH
Gigabit Ethernet
7.1 Audio Codec
S-ATA
3 & 6Gbps
IDE & Floppy
EMBEDDED SYSTEM VS PC
TI OMAP 3730 Processor
512MB DDR@200MHz
PowerVR SGX530 Graphics
All soldered directly to the
board. Not intended for
replacements.
EMBEDDED SYSTEM VS PC
 PC booting is a much
longer process than
x86 Desktop
for embedded
systems.
x86 Laptop
 Desktop PCs are by far
the worst due to their
BCM97425
massive compatibility
issue
Raspberry Pi
 Laptops are faster
because their
IGEPv2
components are much
more controlled.
Time to Linux
Kernel
Prompt
Time to
Bootloader
Time to POST
0
20
40
Desktop PC: Gigabyte GA-X58A-UD3R, Intel Core i7-950 @ 4.2GHz, 12GB DDR3-1600, GeForce GTX580, Crucial M4 256GB SSD
Laptop PC: Dell XPS 15 L502x, Intel Core i7-2670QM @ 2.2GHz, 6GB DDR3-1600, Intel HD3000 & GeForce GT540M, Western Digital Caviar Black 750GB.
BUILDING AND PORTING
EMBEDDED OPERATING
SYSTEMS
BIOS and
Bootloaders
BIOS
• 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)
Bootloader
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.
UEFI – The Future?
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)
BUILDING AND PORTING
EMBEDDED OPERATING
SYSTEMS
IGEPv2
framework
IGEP boot process
ROM Code
X-Loader
U-Boot
Kernel
ROM Code
What 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
ROM Code
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.
X-loader
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
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.
BUILDING AND PORTING
EMBEDDED OPERATING
SYSTEMS
Das U-Boot
BUILDING AND PORTING
EMBEDDED OPERATING
SYSTEMS
OS/Bootloader
Coupling in:
QNX?
 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.
BOOTLOADER/OS INTERACTION
 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 capabilities (NFS,
ping) to ensure hardware works, and easily bring it to life.
 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.
QNX BOOTING
U-Boot
IPL
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 initialising basic hardware and
passing control to “Startup” code, and
subsequently the QNX Kernel.
QNX IPL








CODE
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.
CODE
QNX STARTUP
 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.
CODE
SYSPAGE
 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.
MINIDRIVERS
 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.
SUMMARY
 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?
Download