You are on page 1of 15

BeagleBoard Fast Boot

Hui Chen
Keji Ren
Dec 10th, 2009

EE382N-4 Project

Outline
Motivation
Objectives
Hardware of BeagleBoard
Techniques in optimizing boot time
Boot time result
Conclusions
Future work
Live demo

EE382N-4 Project

Motivation:
Why Faster Boot Time?
Boot time definition:
Time from turning on power to a shell welcome prompt (or a GUI).

Impact the first perception an end user has of the product


Critical to obtain a positive end user experience
Save power

EE382N-4 Project

Objectives
Optimize software in BeagleBoard for speed
1. bootloader
2. Linux Kernel
3. user-space applications

Achieve a 5-second
second fast boot time in BeagleBoard. Original boot time
was about 15 seconds.

EE382N-4 Project

BeagleBoard Hardware
OMAP 3530 Processor
600 MHz ARM Cortex-A8
A8 with NEON
256MB on-chip RAM
256MB NAND Flash
Peripheral I/Os
DVI-D, SD/MMC+, S-Video,
Video, USB 2.0
Stereo In/Out, RS232 Serial
Power
USB or 5V DC

EE382N-4 Project

Serial Cable Setup


We made a customized Null Modem cable to connect BeagleBoard to
PC's serial port.

EE382N-4 Project

Boot Sequence

EE382N-4 Project

Strategies
Load from NAND Flash
X-loader/u-boot
boot loading speed in SVC32 cpu mode: NAND = 1MB, MMC = 500KB/s
NANDs block size is 128 KB per reading. We modified x-loader
x
to only load 2
blocks (instead of 7 blocks originally).

Remove unnecessary initialization, integration check and data movement


We modified u-boot to
1. Embed configuration environments into u-boot
u
(instead of reading from NAND)
2. Turn off Kernel CRC check
3. Remove Kernel relocation in u-boot
boot (skip the 64-byte
64
header of Linux image)

EE382N-4 Project

Strategies (cont.)
Reduce user response time
1. Set bootdelay to zero in u-boot
boot (so user can't interrupt u-boot)
u
2. Turn off serial output by passing 'quiet' parameter to Kernel

Reduce code size


(x
u-boot, kernel and
We used '-Os -mthumb'' flag to compile all code (x-loader,
user-space
space applications). Code size wins hands down.

Remove unnecessary functionalities in Kernel and avoid modules


We compiled a 1.2MB 2.6.29 Kernel with USB, network, ext3/JFFS2 and a driver
for our Pegasus USB Ethernet adapter.
EE382N-4 Project

Strategies (cont.)
User-space optimization
1. Build Linux rootfs from scratch. By carefully tuning uclibc and busybox, we
reduced total size of rootfs to about 780KB without losing desired features.
2. Minimize init script: disable syslogd and klogd, remove unused tty and rc
scripts.

Choose faster file system


Ext3 needs journal daemon whose loading time varies (can be over one second).
Instead we use Ext2.
We didn't choose JFFS2 on NAND due to the buggy Linux driver.

EE382N-4 Project

Boot Time Result


[ 0.000005] < 0.000005> Texas Instruments X-Loader
Loader 1.4.2 (Dec 8 2009 - 23:36:42)
[ 0.003808] < 0.003803> Loading u-boot.bin from nand
[ 0.228279] < 0.224471>
[ 0.228349] < 0.000070>
[ 0.232136] < 0.003787> U-Boot 2009.06-rc2-dirty
dirty (Dec 08 2009 - 23:47:30)
[ 0.232178] < 0.000042>
[ 0.239877] < 0.007699> OMAP3530-GP ES3.0, CPU-OPP2 L3-165MHz
165MHz
[ 0.239932] < 0.000055> OMAP3 Beagle board + LPDDR/NAND
[ 0.239959] < 0.000027> DRAM: 256 MB
Boot time was measured by using ptx_ts script from host
[ 0.251298] < 0.011339> NAND: 256 MiB
Linux PC:
[ 0.259473] < 0.008175> In: serial
$ picocom --b 115200 -d 8 /dev/ttyS0 | ptx_ts 'Texas'
[ 0.259526] < 0.000053> Out: serial
[ 0.259545] < 0.000019> Err: serial
Total boot time from power on to terminal welcome
[ 0.263444] < 0.003899> Board revision C
prompt is 2.92 seconds without network.
[ 0.263485] < 0.000041> Hit any key to stop autoboot: 0
[ 0.267380] < 0.003895>
[ 0.271382] < 0.004002> NAND read: device 0 offset 0x280000, size 0x123000
[ 1.551374] < 1.279992> 1191936 bytes read: OK
[ 1.555640] < 0.004266> ## Booting kernel from Legacy Image at 80007fc0 ...
[ 1.561426] < 0.005786> Loading Kernel Image ... OK
[ 1.561455] < 0.000029> OK
[ 1.565348] < 0.003893>
[ 1.565392] < 0.000044> Starting kernel ...
[ 1.565410] < 0.000018>
[ 1.895363] < 0.329953> Uncompressing Linux.............................................................................. done,
don booting the
kernel.
[ 2.923280] < 1.027917>
Please press Enter to activate this console.

EE382N-4 Project

Boot time composition


Delay (second)
Loading u-boot from NAND

0.22

Loading Kernel from NAND

1.28

Execution (x-loader + u-boot)

0.06

Uncompressing Kernel

0.73

Execution (Kernel)

0.29

Mounting Memory Card

0.27

User-space applications

0.07

Total

2.92

EE382N-4 Project

Conclusions

We achieved shorter boot time than we expected.


expected

We established a website with wiki pages, all modified source code and binaries:
http://code.google.com/p/swiftbeagle/

We obtained a good understanding on


1. BeagleBoard hardware
2. What are required in writing a bootloader (such as disabling MMU/dcache,
detecting machine ID and passing ATAGS to Kernel). We wrote our own
bootloader called S-Boot. However, development of S-Boot is still in debugging
phase and Kernel stalls after uncompressing itself.
3. Patching Kernel source
4. Building a Linux rootfs from scratch
5. Compiler optimization techniques (we believe we found a defect in Code
Sourcery's latest ARM gcc compiler/library)

EE382N-4 Project

Future Work: What Would Be Different?


0.5 second boot can be realized by utilizing XIP(Execution in Place), faster
NAND driver, uncompressed Kernel and faster FS(JFFS2 on MTD).

Delay (second)

Optimization to use

Loading u-boot from NAND

0.22

XIP/driver

Loading Kernel from NAND

1.28

XIP/driver

Execution (x-loader + u-boot)

0.06

Uncompressing Kernel

0.73

Execution (Kernel)

0.29

Mounting Memory Card

0.27

User-space applications

0.07

Total

0.42

uncompressed Kernel

faster FS/driver

EE382N-4 Project

Demo Time

EE382N-4 Project

You might also like