OpenMoko Booting Process

往往開發embedded linux device的開發者都會面臨到一個大問題就是開機過程太久, Linux在開機時會將一連串的程序叫起並啟動, 所以會花許久的時間等待所有程序被一一叫起, 在這邊介紹兩種方法可以平行處理初始化的程序.

先介紹傳統PC上linux開機流程是如何運作的

BIOS –> Kernel Boot –> System Init

  • BIOS 初始化硬體週邊, 例如主機板, CD-ROM, …
  • Kernel Boot

第1階段的Boot程式是存放在MBR之中, 第1階段的Boot loader透過partition table找到第二階段的Boot loader程式, 並將他load進SDRAM並執行它, 接下來會將kernel image和initial RAM disk image (initrd)也會被load到SDRAM上.

Kernel Boot雖然是很複雜的過程, 但幾乎都寫成機器語言了, 所以Kernel Boot執行的時間相當短, 執行完後第一個被執行的程序是init, 是所有程序之母

  • System Init

Linux是利用Init程序去初始化所有服務跟應用程式, 會開啟/etc/inittab檔案, 裡面可以設定如何初始化整個系統, 下面是個configuration example, 裡面的格式為id:runlevel:action:process

# The default runlevel
id:2:initdefault

# Boot-time system configuration/initialization script
si::sysinit:/etc/init.d/rcS

# Runlevels
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
z6:6:respawn:/sbin/sulogin

# How to react to ctrl-alt-del
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Init程序是有缺點的,所花的時間是串列累加的, 若能改成連漪式累加時間是最佳的選擇, 下一篇會介紹3種改進boot時間的程序: Initng, Upstart, Monitoring init performance with bootchart

參考文獻:

1. http://www.ibm.com/developerworks/linux/library/l-boot-faster/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: