張 林,劉 輝,孫啟龍,何 輝
(中國(guó)礦業(yè)大學(xué)信息與電氣工程學(xué)院,江蘇 徐州 221116)
嵌入式系統(tǒng)是一種以應(yīng)用為中心,為應(yīng)用所推動(dòng)的專(zhuān)用計(jì)算機(jī)系統(tǒng),其教學(xué)需要注重對(duì)學(xué)生實(shí)踐能力的培養(yǎng)。然而,從目前高校的“嵌入式系統(tǒng)原理與應(yīng)用”課程教學(xué)的情況來(lái)看,尚未突出嵌入式系統(tǒng)的以應(yīng)用為中心、軟硬件可裁剪的特點(diǎn),因而尚待努力形成更為合理的嵌入式系統(tǒng)教學(xué)體系。
從“嵌入式系統(tǒng)原理與應(yīng)用”課程的教學(xué)實(shí)踐[1]以及筆者多年的嵌入式系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)來(lái)看,該課程的講授應(yīng)不拘泥于教材。
嵌入式系統(tǒng)的體系結(jié)構(gòu)如圖1所示。其開(kāi)發(fā)一般從硬件和軟件兩方面結(jié)合在一起進(jìn)行[2]。與理論課程配套的實(shí)驗(yàn)考慮實(shí)現(xiàn)嵌入式操作系統(tǒng)的加載,熟悉和掌握嵌入式系統(tǒng)的體系結(jié)構(gòu)。
圖1 嵌入式系統(tǒng)體系結(jié)構(gòu)
通過(guò)“嵌入式系統(tǒng)原理與應(yīng)用”課程的學(xué)習(xí),學(xué)生具備一定的嵌入式系統(tǒng)開(kāi)發(fā)能力:能夠設(shè)計(jì)出相關(guān)的硬件電路,了解硬件驅(qū)動(dòng)的開(kāi)發(fā)以及系統(tǒng)軟件和應(yīng)用軟件的設(shè)計(jì)。
本課程授課應(yīng)結(jié)合其以應(yīng)用為中心的特點(diǎn),闡述嵌入式系統(tǒng)的研發(fā)過(guò)程。本文以圍繞“UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器”的設(shè)計(jì)案例加以具體說(shuō)明。首先,UART串口和網(wǎng)口這兩種接口屬于較常見(jiàn)的計(jì)算機(jī)接口;其次,各種嵌入式系統(tǒng)當(dāng)中,這兩種接口應(yīng)用廣泛,多種嵌入式操作系統(tǒng)中均已包含其相關(guān)驅(qū)動(dòng)程序,適合課程講授使用;接著,對(duì)初次接觸嵌入式系統(tǒng)的高校學(xué)生而言,串口在硬件和軟件上都均表現(xiàn)得較為簡(jiǎn)單易懂,而網(wǎng)口在研發(fā)過(guò)程中則能在軟件方面體現(xiàn)出嵌入式操作系統(tǒng)的優(yōu)勢(shì)。
由“UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器”的標(biāo)題即可啟發(fā)學(xué)生進(jìn)行有關(guān)該系統(tǒng)應(yīng)用目標(biāo)的討論。形成嵌入式系統(tǒng)開(kāi)發(fā)的第一步:根據(jù)系統(tǒng)設(shè)計(jì)的需求,分析系統(tǒng)結(jié)構(gòu),提出設(shè)計(jì)目標(biāo)。該設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)UART串口數(shù)據(jù)和以太網(wǎng)數(shù)據(jù)的相互轉(zhuǎn)換,涉及包括信號(hào)電氣特性的轉(zhuǎn)換和數(shù)據(jù)幀結(jié)構(gòu)的轉(zhuǎn)換。顯然,電氣特性的轉(zhuǎn)換由硬件電路來(lái)實(shí)現(xiàn),而數(shù)據(jù)幀結(jié)構(gòu)的轉(zhuǎn)換由相關(guān)軟件實(shí)現(xiàn)。
本案例以S3C4510為硬件核心,由Linux嵌入式操作系統(tǒng)實(shí)現(xiàn)UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器功能。
系統(tǒng)開(kāi)發(fā)的第二個(gè)步是從系統(tǒng)的設(shè)計(jì)目標(biāo)出發(fā),進(jìn)行該系統(tǒng)硬件電路結(jié)構(gòu)的規(guī)劃和設(shè)計(jì)。本案例中,系統(tǒng)硬件需要提供一個(gè)UART串口的接口和一個(gè)網(wǎng)絡(luò)接口,并進(jìn)行相關(guān)協(xié)議的轉(zhuǎn)換,核心器件考慮采用嵌入式處理器實(shí)現(xiàn)。因此,必須首先在課堂上給學(xué)生說(shuō)清什么是嵌入式處理器,如何選擇嵌入式處理器、以及嵌入式系統(tǒng)最小系統(tǒng)的設(shè)計(jì)等問(wèn)題。
嵌入式處理器的選型主要從系統(tǒng)的功能、性能和成本等幾個(gè)方面考慮,功能上應(yīng)涵蓋所需的接口,性能上則綜合考慮系統(tǒng)的運(yùn)行速度、系統(tǒng)容量等要素。嵌入式最小系統(tǒng)是嵌入式系統(tǒng)硬件可裁剪的體現(xiàn)。最小系統(tǒng)中包含有嵌入式系統(tǒng)必備的模塊,比如,嵌入式處理器、存儲(chǔ)器、電源電路、時(shí)鐘電路和及I/O接口等,如圖2所示。
圖2 嵌入式系統(tǒng)硬件最小系統(tǒng)
一般來(lái)講,嵌入式系統(tǒng)的硬件設(shè)計(jì)宜以經(jīng)典的嵌入式最小系統(tǒng)電路為基礎(chǔ)加以擴(kuò)展,達(dá)到特定的應(yīng)用目的。比如,UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器的硬件就可在嵌入式最小系統(tǒng)的基礎(chǔ)上,增加UART串口接口和網(wǎng)絡(luò)接口電路。這些系統(tǒng)接口電路框圖如圖3所示。
圖3 UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器接口電路
由圖1可知,嵌入式系統(tǒng)軟件的開(kāi)發(fā)為兩部分:嵌入式操作系統(tǒng)的開(kāi)發(fā)和應(yīng)用程序的編寫(xiě)。其中嵌入式操作系統(tǒng)部分又分為硬件驅(qū)動(dòng)的開(kāi)發(fā)和操作系統(tǒng)的裁剪。
本文主要討論嵌入式Linux的設(shè)備驅(qū)動(dòng)開(kāi)發(fā)。Linux設(shè)備驅(qū)動(dòng)程序一般劃分為三個(gè)部分:①自動(dòng)配置和初始化子程序,負(fù)責(zé)監(jiān)測(cè)所要驅(qū)動(dòng)的硬件設(shè)備是否存在和能否正常工作;②服務(wù)于I/O請(qǐng)求的子程序;③中斷服務(wù)子程序[3]。
驅(qū)動(dòng)程序的開(kāi)發(fā)大概分為如下幾步:①在內(nèi)核中找到相近的驅(qū)動(dòng)程序,以其為模板進(jìn)行開(kāi)發(fā),有時(shí)候需要從頭開(kāi)始做;②實(shí)現(xiàn)驅(qū)動(dòng)程序的初始化:如向內(nèi)核注冊(cè)該驅(qū)動(dòng)程序;③設(shè)計(jì)所要實(shí)現(xiàn)的操作,常見(jiàn)的有open()、close()、read()和 write()等;④一些驅(qū)動(dòng)需要中斷服務(wù);⑤編譯該驅(qū)動(dòng)程序到內(nèi)核中,或者用insmod實(shí)現(xiàn)加載。
上述案例涉及UART串口和網(wǎng)口接口,兩者在Linux中支持均很完善,具備統(tǒng)一的編程接口。學(xué)生在學(xué)習(xí)的過(guò)程中并不需要從頭開(kāi)始編寫(xiě)驅(qū)動(dòng)程序,只需讀懂相關(guān)驅(qū)動(dòng)程序代碼加以配置和裝載,便可達(dá)到快速認(rèn)知的效果。與理論課程配套的實(shí)驗(yàn),要求學(xué)生實(shí)現(xiàn)串口和網(wǎng)口驅(qū)動(dòng)的配置和裝載,理解嵌入式系統(tǒng)中驅(qū)動(dòng)程序的作用、工作機(jī)理和開(kāi)發(fā)方法。
在嵌入式環(huán)境中軟件運(yùn)行所需的硬件資源十分有限,為了在實(shí)現(xiàn)應(yīng)用功能的同時(shí)最大限度地減小對(duì)硬件的要求,常常要對(duì)軟件進(jìn)行裁剪。嵌入式Linux的裁剪主要發(fā)生在內(nèi)核和文件系統(tǒng)內(nèi)。
與理論課程相配套的實(shí)驗(yàn)課要求實(shí)現(xiàn)“UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器”中嵌入式Linux操作系統(tǒng)內(nèi)核及文件系統(tǒng)的裁剪,掌握裁剪的原則和方法。
1)裁剪嵌入式Linux內(nèi)核
Linux內(nèi)核是非常龐大的軟件工程,由于高度模塊化,在裁剪內(nèi)核時(shí)只要針對(duì)實(shí)際應(yīng)用,選擇必需的模塊即可。
內(nèi)核裁剪時(shí)應(yīng)選擇網(wǎng)絡(luò)協(xié)議棧、TCP/IP協(xié)議、UART串口驅(qū)動(dòng)和以太網(wǎng)口驅(qū)動(dòng)[4]等模塊。
2)裁剪嵌入式Linux文件系統(tǒng)
文件系統(tǒng)占嵌入式Linux軟件很大比重,即使僅包含最基本軟件的文件系統(tǒng),其大小也達(dá)到內(nèi)核的2~3倍,因此對(duì)文件系統(tǒng)的裁剪至關(guān)重要。
要完成“UART串口—網(wǎng)口協(xié)議轉(zhuǎn)換器”這一項(xiàng)目,還需要完成嵌入式系統(tǒng)開(kāi)發(fā)的第三個(gè)步驟,即UART串口數(shù)據(jù)幀向以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu)的轉(zhuǎn)換。借助這部分內(nèi)容,可以向?qū)W生介紹一些相關(guān)基礎(chǔ)知識(shí),比如嵌入式系統(tǒng)的網(wǎng)絡(luò)協(xié)議棧和 socket編程等。而具體的實(shí)現(xiàn)也作為課程配套實(shí)驗(yàn),交由學(xué)生自行完成。
“嵌入式系統(tǒng)原理與應(yīng)用”是一門(mén)應(yīng)用性很強(qiáng)的課程,終極目標(biāo)是面向?qū)嶋H應(yīng)用。通過(guò)連續(xù)幾個(gè)學(xué)期的實(shí)踐發(fā)現(xiàn),課堂內(nèi)容主要講解概念、開(kāi)發(fā)流程和方法,同時(shí)結(jié)合一個(gè)具體的嵌入式系統(tǒng)開(kāi)發(fā)項(xiàng)目,將理論與實(shí)踐結(jié)合在一起,這對(duì)學(xué)生動(dòng)手能力和創(chuàng)新能力的培養(yǎng),能夠達(dá)到更好的效果,學(xué)生在學(xué)習(xí)之后對(duì)系統(tǒng)概念的理解,對(duì)開(kāi)發(fā)方法的掌握更透徹。
[1]徐敏,林瑞金,關(guān)健生.嵌入式系統(tǒng)教學(xué)改革與實(shí)踐[J].南京:電氣電子教學(xué)學(xué)報(bào),2009(6):13-14,22
[2]Tammy Noergaard著,馬洪兵,谷源濤譯.嵌入式系統(tǒng)硬件與軟件架構(gòu)[M].北京:人民郵電出版社,2008
[3]Christopher Hallinan.嵌入式Linux開(kāi)發(fā)(英文版)[M].北京:人民郵電出版社,2008
[4]劉輝.基于嵌入式 Linux的接入網(wǎng)通信設(shè)備軟件架構(gòu)研究與設(shè)計(jì)[D].徐州:中國(guó)礦業(yè)大學(xué)圖書(shū)館,2006