2009年4月2日 星期四

Embedded Linux 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/




2. http://209.85.175.104/search?q=cache:aU49jDJGEhUJ:www.zhuaxia.com/pre_channel/4806028/%3FlogId%3D181+openmoko+%E6%B5%81%E7%A8%8B&hl=zh-TW&ct=clnk&cd=7&gl=tw

沒有留言:

張貼留言