張祖鷹
ZHANG Zu-ying
(南京化工職業(yè)技術(shù)學(xué)院,南京 210048)
嵌入式系統(tǒng)是電腦軟件與硬件的綜合體,它是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,從而能夠適應(yīng)應(yīng)用系統(tǒng),對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。它將操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中,簡(jiǎn)單的說(shuō)就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類(lèi)似于BIOS的工作方式,具有軟件代碼小,高度自動(dòng)化,響應(yīng)速度快等特點(diǎn),適合于要求實(shí)時(shí)的和多任務(wù)的體系。
在網(wǎng)絡(luò)日益重要的今天,越來(lái)越多的嵌入式產(chǎn)品有了聯(lián)網(wǎng)的要求。Linux對(duì)網(wǎng)絡(luò)有很強(qiáng)的支持能力,甚至比大多數(shù)操作系統(tǒng)的性能更好。實(shí)際上,Linux的發(fā)展是人們?cè)诰W(wǎng)絡(luò)上的相互合作下進(jìn)行的,且Linux本來(lái)就是用在網(wǎng)絡(luò)上的。Linux幾乎支持所有常見(jiàn)的Internet協(xié)議,如FTP、POP、DNS、NIS等等,Linux也適合各種局域網(wǎng)。
基于嵌入式linux的系統(tǒng)以嵌入式微處理器為核心,運(yùn)行嵌入式Linux操作系統(tǒng)。應(yīng)用程序可通過(guò)網(wǎng)絡(luò)進(jìn)行更新,通過(guò)鍵盤(pán)進(jìn)行人機(jī)對(duì)話,數(shù)據(jù)可通過(guò)LCD現(xiàn)場(chǎng)顯示,重要數(shù)據(jù)可以文件形式保存在Flash等閃存存儲(chǔ)器中,數(shù)據(jù)和報(bào)警信息可通過(guò)串口向上位機(jī)傳輸,也可通過(guò)以太網(wǎng)口向工業(yè)以太網(wǎng)或Internet發(fā)布信息,用戶(hù)還可通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控、遠(yuǎn)程維護(hù)。更為關(guān)鍵的是可充分利用Internet上已有的軟件和協(xié)議,如ftp、http、Apache、PHP、MySQL等應(yīng)用程序,迅速搭建前臺(tái)數(shù)據(jù)采集系統(tǒng)、測(cè)控系統(tǒng)和后臺(tái)管理系統(tǒng)的通信。其優(yōu)點(diǎn)是不需要專(zhuān)用的通信線路,可用現(xiàn)成的Internet網(wǎng)絡(luò)傳送數(shù)據(jù);可以傳送音響和圖像;Internet的協(xié)議是現(xiàn)成和公開(kāi)的,大到幾十MB的MicrosoftIE瀏覽器,小到只有600KB的Mosaic瀏覽器都可以對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行讀取。系統(tǒng)結(jié)構(gòu)如圖1。
圖1 系統(tǒng)結(jié)構(gòu)圖
對(duì)于嵌入式設(shè)備,系統(tǒng)結(jié)構(gòu)框圖如圖2。硬件部分,兩個(gè)串行通信接口可以采用RS232。用以采集來(lái)自其他設(shè)備的遠(yuǎn)程的數(shù)據(jù),然后由ARM微處理器進(jìn)行處理,處理后的結(jié)果通過(guò)以太網(wǎng)接口分發(fā)給其他設(shè)備。Flash存儲(chǔ)器可為一到兩個(gè),512K的用于存儲(chǔ)引導(dǎo)裝載程序,2M的用來(lái)承載包含應(yīng)用程序的操作系統(tǒng)映像。此種設(shè)計(jì)方式可以使在啟動(dòng)加載方式下,調(diào)試不同操作系統(tǒng)的應(yīng)用程序時(shí),只需要簡(jiǎn)單的更換包含對(duì)應(yīng)的操作系統(tǒng)的引導(dǎo)程序的Flash芯片就能做到。滿足大多數(shù)情況的需要,內(nèi)存選用容量可為16M的16bit的芯片。10M以太網(wǎng)接口的設(shè)計(jì)是考慮到通用性。為了調(diào)試的方便,這里使用了一個(gè)JTAG(國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議)接口,可以訪問(wèn)其他系統(tǒng)資源,它還可以跟仿真器相連。USB接口分為兩個(gè)主機(jī)接口和一個(gè)設(shè)備接口。LED用來(lái)在調(diào)試和使用過(guò)程中的顯示數(shù)據(jù)結(jié)果。
圖2 嵌入式設(shè)備結(jié)構(gòu)圖
軟件實(shí)現(xiàn),軟件的實(shí)現(xiàn)包括兩個(gè)方面,一個(gè)是系統(tǒng)的內(nèi)核,另一個(gè)是設(shè)備的驅(qū)動(dòng)程序。
執(zhí)行下列命令:
會(huì)出現(xiàn)一個(gè)界面,可以根據(jù)自己的實(shí)際需要來(lái)選擇。在編譯內(nèi)核的過(guò)程中,最繁雜的事情就是這步配置工作。在配置過(guò)程中,大部分選項(xiàng)可以使用其缺省值,只有小部分需要根據(jù)用戶(hù)不同的需要選擇。選擇的原則是將與內(nèi)核其它部分關(guān)系較遠(yuǎn)且不經(jīng)常使用的部分功能代碼編譯成為可加載模塊,有利于減小內(nèi)核的長(zhǎng)度,減小內(nèi)核消耗的內(nèi)存,簡(jiǎn)化該功能相應(yīng)的環(huán)境改變時(shí)對(duì)內(nèi)核的影響;不需要的功能就不要選;與內(nèi)核關(guān)系緊密而且經(jīng)常使用的部分功能代碼直接編譯到內(nèi)核中。在選項(xiàng)Code maturity level options、Loadable module support、Processor type and features、Networking options、Network device support、ISDN subsystem、Character devices等分別選擇適合自己所需要的項(xiàng)目。File systems建議選擇相應(yīng)的項(xiàng)目,為了以后擴(kuò)充使用。
Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)程序完成的主要工作是:
1)對(duì)每個(gè)硬件設(shè)備進(jìn)行初始化和釋放;
2)數(shù)據(jù)傳輸,將數(shù)據(jù)從內(nèi)核傳到硬件設(shè)備,或者從硬件設(shè)備傳到內(nèi)核,讀取應(yīng)用程序傳送給硬件設(shè)備的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);
3)檢測(cè)和處理硬件設(shè)備出現(xiàn)的錯(cuò)誤和異常;
Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)程序的主要組成部分有:
1)自動(dòng)配置和初始化子程序;
2)服務(wù)于I/O請(qǐng)求的子程序;
3)中斷服務(wù)子程序;
根據(jù)所選擇的設(shè)備和設(shè)備所要完成的功能分別進(jìn)行編寫(xiě)。
Linux不僅能很好地用于通用計(jì)算機(jī),而且已很好地移植于嵌入式系統(tǒng)。嵌入式Linux,就是經(jīng)過(guò)小型化裁減,而且可以被燒制到容量?jī)H為幾KB或幾MB的存儲(chǔ)器中,不需要硬盤(pán),應(yīng)用于各種特定的嵌入式環(huán)境的專(zhuān)用中,不需要硬盤(pán),應(yīng)用于各種嵌入式環(huán)境的專(zhuān)用操作系統(tǒng)。它保留了Linux的大多功能,特別是網(wǎng)絡(luò)支持能力。Uclinux就是一個(gè)優(yōu)秀的嵌入式Linux操作系統(tǒng)。在嵌入式系統(tǒng)中,操作系統(tǒng)和所有的應(yīng)用軟件都被固化到Flash等存儲(chǔ)設(shè)備中。在嵌入式系統(tǒng)中很少使用外存。嵌入式系統(tǒng)的啟動(dòng)往往也是“自動(dòng)”的,即從上電到處于工作狀態(tài),不用人的介入。這是嵌入式設(shè)備應(yīng)用的要求和特點(diǎn)。嵌入式網(wǎng)絡(luò)設(shè)備的啟動(dòng),很自然會(huì)遇到地址的設(shè)置問(wèn)題。
對(duì)于通用計(jì)算機(jī),其以太網(wǎng)的MAC地址一般是不能變的,它是由網(wǎng)卡生產(chǎn)廠家固化在網(wǎng)卡中的。除了網(wǎng)卡生產(chǎn)廠家,很少有其他人關(guān)心它。而IP地址,可以根據(jù)用戶(hù)的需要設(shè)為指定值。其設(shè)定的IP地址是存儲(chǔ)在硬盤(pán)上的,操作系統(tǒng)啟動(dòng)時(shí),可以自動(dòng)取得該值并啟用它。
嵌入式網(wǎng)絡(luò)設(shè)備中地址的設(shè)置有它的特點(diǎn):
1)關(guān)心和接觸嵌入式網(wǎng)絡(luò)設(shè)備MAC地址的人比關(guān)心和接觸通用計(jì)算機(jī)MAC地址的人多得多。因?yàn)樵O(shè)計(jì)、研究和生產(chǎn)嵌入式網(wǎng)絡(luò)設(shè)備的廠家比網(wǎng)卡的廠家多得多。
2)在嵌入式設(shè)備中往往沒(méi)有硬盤(pán),它的操作系統(tǒng)和應(yīng)用軟件通常是打包放在Flash等存儲(chǔ)設(shè)備中。系統(tǒng)啟動(dòng)時(shí),把Flash中的代碼釋放到內(nèi)存中,再在內(nèi)存中運(yùn)行。比如嵌入式操作系統(tǒng)Uclinux,在用于S3C4510B這樣的帶以太網(wǎng)接口的嵌入式設(shè)備時(shí),把內(nèi)核和應(yīng)用程序代碼壓成一個(gè)映像文件包,在包中有網(wǎng)絡(luò)部分MAC及IP地址。但這些MAC及IP地址的值是在編譯映像文件時(shí)設(shè)定的,而且在編譯后的映像文件中的值是不能直觀地看到的,而且在編譯后的映像文件中的值是不能直觀地看到的,它是壓縮了的二進(jìn)制數(shù)據(jù),不方便地映像文件中直接更改MAC及IP地址的值。
3)對(duì)于使用同一映像文件的嵌入式網(wǎng)絡(luò)設(shè)備,如果不做進(jìn)一步的處理,其MAC及IP地址是相同的。這顯然不能滿足應(yīng)用,因?yàn)椴煌脑O(shè)備應(yīng)該有不同的MAC及IP地址。而編譯生成映像文件往往要用十幾甚至幾十分鐘。對(duì)于生產(chǎn)廠家,不可能為每臺(tái)設(shè)備編譯一個(gè)特定的映像文件。
嵌入式網(wǎng)絡(luò)設(shè)備系統(tǒng)的MAC及IP地址設(shè)置的基本思想是:把MAC及IP地址存放在Flash的未用扇區(qū)(一般在高扇區(qū)),嵌入式操作系統(tǒng)啟動(dòng)后,自動(dòng)運(yùn)行一個(gè)程序去讀取MAC及IP地址并設(shè)置它。
用戶(hù)使用的方法是通過(guò)計(jì)算機(jī)串口與網(wǎng)絡(luò)設(shè)備的RS232接口(即串口)相連,使用超級(jí)終端的方式,運(yùn)行網(wǎng)絡(luò)設(shè)備中的程序把數(shù)據(jù)寫(xiě)入Flash中。
嵌入式網(wǎng)絡(luò)設(shè)備的“身份證”——MAC及IP地址的設(shè)置,與通用計(jì)算機(jī)的設(shè)置有獨(dú)特之處。嵌入式網(wǎng)絡(luò)設(shè)備往往沒(méi)有硬盤(pán),不能像通用計(jì)算機(jī)那樣操作;也不可能為每一臺(tái)設(shè)備“量身”編譯映像文件。可以把MAC及IP地址存放在Flash等存儲(chǔ)設(shè)備上,嵌入式操作系統(tǒng)啟動(dòng)后,自動(dòng)運(yùn)行一個(gè)程序去讀取MAC及IP地址并設(shè)置它。這樣就可以在同一映像文件包下方便地配置嵌入式網(wǎng)絡(luò)設(shè)備MAC及IP地址。
如今,互聯(lián)網(wǎng)的應(yīng)用正在轉(zhuǎn)向以嵌入式設(shè)備為中心。系統(tǒng)與Internet的結(jié)合實(shí)現(xiàn)網(wǎng)絡(luò)化是一種必然的趨勢(shì)。把嵌入式linux微內(nèi)核嵌入到32位MCU系統(tǒng)中,通過(guò)構(gòu)造TCP/IP多種網(wǎng)絡(luò)協(xié)議和基本網(wǎng)絡(luò)通信協(xié)議,充分利用嵌入式操作系統(tǒng)對(duì)底層硬件和網(wǎng)絡(luò)協(xié)議的支持,
并對(duì)系統(tǒng)實(shí)時(shí)性的要求改造linux內(nèi)核和虛擬內(nèi)存機(jī)制來(lái)保證任務(wù)完成的實(shí)時(shí)性和可靠性,在各類(lèi)應(yīng)用領(lǐng)域有很好的前景,具有開(kāi)發(fā)周期短、系統(tǒng)穩(wěn)定可靠、適應(yīng)性強(qiáng)等特點(diǎn)。
[1]班建民,付保川等,基于嵌入式數(shù)據(jù)庫(kù)的實(shí)時(shí)數(shù)據(jù)采集方法[J].微計(jì)算機(jī)信息,2005,10.
[2]田霖,李正熙,童朝南.實(shí)時(shí)仿真與嵌入式系統(tǒng)[J].微計(jì)算機(jī)信息,2005,13.
[3]王保進(jìn),一種提高構(gòu)件化嵌入式操作系統(tǒng)性能的方案[J].微計(jì)算機(jī)信息,2005,7.
[4]許海燕,付炎.嵌入式系統(tǒng)技術(shù)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2003
[5]雷澎,Linux 的內(nèi)核與編程[M].北京:機(jī)械工業(yè)出版社,2000.
[6]陳莉君,Linux 操作系統(tǒng)內(nèi)核分析[M].北京:人民郵電出版社,2000.
[7]鄒思軼,嵌入式 Linux 設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
[8]王學(xué)龍,嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2001.
[9]張星燁,基于Linux的嵌入式系統(tǒng)在測(cè)控系統(tǒng)中的設(shè)計(jì)與應(yīng)用[J].貴州工業(yè)大學(xué)學(xué)報(bào),2002,(4).
[10]waynewolf,著,孫玉芳,譯.嵌入式計(jì)算系統(tǒng)設(shè)計(jì)原理[M].北京:機(jī)械工業(yè)出版社,2002.