定製嵌入式Linux系統的啓動程序

定製嵌入式Linux系統的啓動程序
  

摘  要  嵌入式系統的特點決定了它具有功能的專用性,而不能作爲一種通用的計算機系統。基於Linux操作系統開發嵌入式產品,必須對它的啓動程序進行定製。本文研究了Linux操作系統的啓動過程,並給出瞭如何爲嵌入式Linux系統添加用戶自己的啓動服務,以及指定開機後運行的主功能程序的方法。
關鍵詞  嵌入式    Linux   啓動程序

一、嵌入式系統的概念及特點[1]
    引用電氣工程師協會IEE給嵌入式系統下的一個定義:嵌入式系統是用來控制或監視機器、裝置或工廠等大規模系統的設備。但是後來隨着嵌入式系統的發展,這個定義就變得不是很準確。比如說像手機、PDA及電子詞典之類的小型設備,它們均由內部的嵌入式系統控制,但是卻不可稱之爲大規模的系統。
有些文獻這樣下定義我覺得比較確切:嵌入式系統是電腦軟件與硬件的綜合體,它是以應用爲中心,以計算機技術爲基礎,軟硬件均可裁剪,能夠適應實際應用中對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。
    嵌入式系統具有以下幾個特點:
    1、 嵌入式系統是先進的計算機技術、半導體技術以及電子技術與各個行業的具體應用相結合的產物。也就是說嵌入式系統並不像通用計算機那樣通用,而是與各待業的特定應用相關聯的,每行每業的嵌入式系統要實現的功能也不一樣。因此,在嵌入式系統上沒有哪個公司的操作系統和處理器能夠壟斷市場。
    2、 嵌入式系統實現的功能單一,通常是面向用戶、面向產品、面向特定應用的,一般只實現某行業的特定功能。
    3、 成本低、體積小、功耗低及可靠性高,在運行速度及存儲容量上有一定的限制。
    4、 嵌入式系統本身不具備在其上進一步開發的能力,必須要在相關的開發平臺上開發。
    5、 全自動操作循環,一直重複地執行一個特定的程序
    嵌入式系統的靈魂應該說是它的嵌入式操作系統,本文使用的是嵌入式Linux,硬件基礎是基於x86的嵌入式主板。由上述嵌入式系統的特點可知,爲了讓嵌入式系統具有一個產品或儀器的特性,不能讓像通用計算機那樣開機後進入桌面系統,而是要運行指定服務和一個特定的用戶應用程序。本文將如何讓Linux開機後執行指定服務和運行一特定的用戶程序進行探討。

二、Linux系統的啓動過程
    讓我們先了解一下Linux系統啓動的過程當引導程序(如LILO)加載Linux內核映象啓動時,它先進行內核的初始化工作,主要是檢測整個硬件環境。內核初始化完成後,系統就啓動init進程,它是系統的第一個用戶級進程。Linux系統具有許多運行級別,它由文件/etc/inittab文件決定,各級別的功能如下:
     0:終止或停止系統的運行
     1:單用戶模式
     2:多用戶模式,但無網絡功能
     3:多用戶模式且有網絡功能
     4:保留,用戶可以定義自己的啓動模式
     5:圖形界面登陸模式
     6:重新啓動系統
    init進程運行後,它會訪問/etc/inittab文件,該文件確定系統運行於上面的哪個級別。由於嵌入式系統的特性,我們要讓系統運行於級別1上,即單用戶模式,這只要在/etc/inittab文件的id:3:initdefault行,將3改爲0即可。同時每個級別還對應了一個啓動各種服務的腳本目錄,一般在/etc/rc.d/下面
    接着init進程又分別啓動/etc/rc.d/rc.sysinit和與等級n相對應的/etc/rc.d/rcn.d目錄裏的初始化進程,最後init會運行用戶登陸程序,這時在終端上就會顯示login:的登錄信息,用戶登錄成功後會啓動shell程序,shell啓動後,它會讀取並執行文件/etc/profile,/etc/bashrc,和用戶主目錄下的文件.bashrc,這些文件負責建立用戶自己的環境。

三、設置特定服務及開機啓動程序
     如前所述,添加指定服務,定製特定的啓動程序,就從配置文件/etc/rc.d/rcn.d和/etc/profile入手。
     1、添加指定的服務:是指在系統啓動時進行一些用戶所需要的操作,如初始化用戶應用程序或用戶開發的新硬件等等。可以增加自己的腳本程序來完成這些工作,主要步驟如下:
    (1) 仿照系統目錄/etc/rc.d/init.d裏的任何一個腳本文件的格式自己編寫一個啓動服務腳本文件。
    (2) 將寫好的腳本文件拷貝到/etc/rc.d/init.d目錄下。因爲/etc/rc.d/rcn.d只是/etc/rc.d/init.d的一個鏈接,故要將真實的文件先拷到後者的目錄下。
    (3) 在相應的運行級別n的/etc/rc.d/rcn.d下建立該腳本文件的鏈接。如運行級別爲2,則n=2,目錄即爲/etc/rc.d/rc2.d。假如該腳本名爲initform,鏈接名定爲my_initform,則鍵入如下命令即可:ln –s /etc/rc.d/init.d/initform  /etc/rc.d/rc2.d/my_initform。
    完成以上幾步後,系統開機後就會自動執行腳本initform裏的服務
     2、運行特定用戶應用程序:這裏主要是指GUI應用程序,如果原系統啓動後直接進入桌面系統,則要將桌面程序在相應腳本中屏蔽,然後修改/etc/profile腳本定製用戶自己的程序。步驟如下:
     (1) 在startx腳本中將運行相應的桌面系統程序屏蔽。例如桌面系統程序名爲qvwm(紅旗嵌入式Linux的桌面系統),則修改內容如下:
     ……
     # xinit /usr/bin/qvwm
     #加個“#”表示將這行腳本屏蔽掉
     (2) 修改/etc/profile,啓動用戶應用程序。如用戶應用程序名爲start_initform,且在目錄/root/ 下,則在它的末尾加上如下幾行內容:
     ……
     export LC_ALL=zh_CN.GB2312
     #設置中文化環境
     cd /root/
     #切換到應用程序當前目錄
     xinit ./start_initform
     #運行指定的用戶應用程序
     修改完成後,重新啓動系統,則當系統初始化完後,會執行用戶指定的服務,且最後運行用戶應用程序,達到嵌入式系統的要求

參考文獻
1 李善平,劉文峯,王煥龍. Linux與嵌入式系統. 清華大學出版社,2002
2 鄒思軼. 嵌入式Linux設計與應用. 清華大學出版社,2002
3 王學龍. 嵌入式Linux系統設計與應用. 清華大學出版社,2001
4 於明儉,陳嚮明,方漢. Linux程序設計權威指南. 機械工業出版社,2001
5 聯想軟件超星空工作室. 精通Linux系統管理與應用開發技術. 清華大學出版社,2001
6 李主琛. Linux面向對象窗口高級編程. 科學出版社,2001
7 徐千洋. Linux 函數庫參考手冊. 中國青年出版社,2002

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章