View
8.271
Download
0
Category
Preview:
DESCRIPTION
Done as part of OMAP Tutorial Hourhttp://omapedia.org/wiki/Tutorial_Hour_Topics#Aug_25th_at_8:30_am_CST_.28Central_Standard_Time.29
Citation preview
Linux without a boot loader – the OMAP way!
OR
Why I stopped being scared of X-loader and started using Linux
Nishanth Menon25 August 2010
Introduction
Why do we need a bootloader?
Too many bootloaders, yet, not one that works for me..
Heresy: What if Linux is used as a bootloader? A single s/w package- Reduce maintenance. New features – easier to borrow from Linux It'd be kinda fun
Builds on ELC2010 SFO Greg Ungerer, Magnus Damm 's work
2 /
Agenda 1/2
Concepts of OMAP GP device boot load process
Why x-loader?
Content of a Linux image without bootloader
The tools Tagger Gpsign
Demo
3 /
Agenda 2/2
What next? Using Linux as a bootloader
Problems with the Approach
Summary
Terminology
References
4 /
Concepts of OMAP boot load process
ROM Code
X-loader U-Boot Kernel
KernelU-Boot“XIP”
I/O device(Nand/MMC)
Memory mappeddevice(NOR)
2nd U-Boot Kernel Peripheral (USB/UART)
NORNOR
SRAMSRAM
SDRAMSDRAM
ROMROM
Scope of this presentation
5 /
Why X-loader?
SRAM is tiny: 64K(OMAP3 GP), 32K(OMAP4)
“Traditional Bootloaders” are bloated!– e.g. U-boot: beagleboard build is 196K!! Barebox: first beagleboard version of
barebox was 36k, it is around 40+k now!
There is never going to be a solution as long as we need to keep adding new features!
6 /
What I love about X-loader
“shared code” with TI u-boot
Does the stuff (well.. mostly) Simple code (usually!)
TINY.. well.. mostly so, until we started adding FAT, MMC, USB...
TI mostly has some variant for every OMAP
7 /
What I hate about X-loader
It does way more than what it needs to do the job - “load and execute u-boot”
There is NO mainline x-loader code
Toooo many variants of x-loader.. There is a broken up community of x-loader – each centered around some silicon variant
I am gonna stop now..
8 /
Do I REALLY need x-loader?
There are alternatives: Barebox? my_own_stupid_bootloader.s Linux? But it is 3 megs big!! Soln: Load it to SDRAM directly
NOPsuedocode:Switch cpsr to svcDisable watchdogEnable uartCopy image from x to sdramGive control to image
9 /
Basic things for Linux to boot on OMAP?
Basic h/w configuration: Make the SDRAM ready – clocks
configured Very basic mux – we expect the kernel to
take care of it's own needs.. One serial port configured Setup ATAGs as required for any Linux port of
ARM to boot
Load the kernel up in SDRAMRef: http://www.arm.linux.org.uk/developer/booting.php
10 /
Linux image without bootloader
bzImage
Sty
BootHeader
zImage
piggy
Disable watchdogConfigure one uartSetup r0 = 0r1 = mach IDr2 = ATAG address
Disable watchdogConfigure one uartSetup r0 = 0r1 = mach IDr2 = ATAG address
Configuration Header
Load address, sizegpsigngpsign
taggertagger
make bzImagemake bzImage
11 /
How does tagger work?
taggertagger
bzImagebzImageConfig file
-tags- machid
Config file-tags- machid
bzImage
ATAG
Sty
Marker:MACHID
Marker:Size
Sty template
12 /
zImage
piggy
Sty in the works
ATAG
Sty
DisableWDT
Cache, intdisable
SetupUART
Setup Uart mux
Relocate atag toFirst 16k memory
Uncompressed kernel
1 – the setup
2 – hand over to piggy
3- uncompress the real image
4- give control to kernel
13 /
GP Sign – Boot Header
gpsigngpsign
imageimageConfig file
- clock config- ddr config
Config file- clock config- ddr config
Clockconfiguration
DDRconfiguration
GPMC CS0configuration
MMCconfiguration
ConfigurationHeader
Load addressSize of image
image
14 /
How does this GP image boot?
Clockconfiguration
DDRconfiguration
GPMC CS0configuration
MMCconfiguration
ConfigurationHeader
Load addressSize of image
image
OMAPRomCode
SDRAMSDRAM
DPLLs1 Configures clocks
2Figures out where to load
3 -Loads image
4 – gives control
OMAP
There is more that happens in HS/EMU device..15 /
Demo
16 /
Next steps 1/2: optimize
Choose a sane kernel configuration for the environment you'd like to work on
If your board has ethernet, enable ethernet, use nfs as rootfs
If you board has usb, you may want to try out usbnet
Reduce statically built kernel drivers and have only the kernel modules you need (if you dont care for multimedia in your bootloader, why have dspbridge, audio drivers enabled?)
17 /
Next steps 2/2: power features Write your own custom shell scripts if your “users”
are interested in “u-boot like” environment, -e.g. setenv/saveenv pair could be:setenv() { x=$1;shift;export $x="$*";}saveenv() { export>/etc/exported_vars;}
and the /etc/profile file uses that file..
Use kexec! With kexec you get bootm equivalent. You can wrap kexec inside a bootm as well.
Remember you now have the power to do what you can imagine without thinking how to port it..
18 /
Ok, so what's the catch? (1/2) Deployment issues
Single bootimage requirement for multiple board variants and (clocks sdrc, machid are all coded in),
Training new users and re-training old users?
NAND technology and badblocks → with large uImage, any bad block can make the image no longer usable.. but we can debate that at a later date ;)
19 /
Ok, so what's the catch? (2/2)
“MLO file” MMC with FAT partition on OMAP3 has limitations of 128k sized image(so not kernel or u-boot at least :(), but it will become usable with OMAP4 -are there options? Probably (see references)
So now we need to maintain and test kernel in two defconfig configurations? - yeah maybe..
20 /
Summary
Linux without a bootloader provides a lot of flexibilities
There are limitations as well – wont solve everyone's problems.
Could be suited in a single platform environment
Not really hardcore tested solution beyond “lab environment”
21 /
Terminology
XIP – Execute in Place U-Boot – Das U-Boot – the Universal Boot
loader X-loader – TI variant of U-Boot. A stripped
down version Barebox – Somewhere between Linux and U-
boot – can also be used as a boot loader Busybox – a filesystem with tiny versions of
standard unix utils OMAP-Uboot-utils – a bunch of utilities to do
the grunt workof this presentation
22 /
References ARM linux kernel boot requirements:
http://www.arm.linux.org.uk/developer/booting.php
ELC2010 work (SFO) Greg Ungerer: Linux without a bootloaderhttp://elinux.org/images/7/7b/LinuxWithoutABootLoader.pdf Magnus Damm: Linux as a bootloaderhttp://elinux.org/images/2/2f/ELC-2010-Damm-Kexec.pdf Grant Likely: Device tree supporthttp://elinux.org/images/b/b6/ARM_Device_Tree_Status_Report.pdf
Ghorai Sukumar: eMMC boothttp://omapedia.org/wiki/E-MMC_boot#You_can_boot_omap3630_without_x-loader
Kexec: http://www.ibm.com/developerworks/linux/library/l-kexec.html
Omap u-boot utils: http://code.google.com/p/omap-u-boot-utils/
23 /
Backup
Reference code:http://github.com/nmenon/uomapfs branch: ldemo You get kexec, linux-omap omap-uboot-fs and a
bunch of reference configuration files for SDP3630 which can be easily customized and improved for development platforms.
24 /
Recommended