張 林,劉 輝,孫啟龍,何 輝
(中國礦業大學信息與電氣工程學院,江蘇 徐州 221116)
嵌入式系統是一種以應用為中心,為應用所推動的專用計算機系統,其教學需要注重對學生實踐能力的培養。然而,從目前高校的“嵌入式系統原理與應用”課程教學的情況來看,尚未突出嵌入式系統的以應用為中心、軟硬件可裁剪的特點,因而尚待努力形成更為合理的嵌入式系統教學體系。
從“嵌入式系統原理與應用”課程的教學實踐[1]以及筆者多年的嵌入式系統開發經驗來看,該課程的講授應不拘泥于教材。
嵌入式系統的體系結構如圖1所示。其開發一般從硬件和軟件兩方面結合在一起進行[2]。與理論課程配套的實驗考慮實現嵌入式操作系統的加載,熟悉和掌握嵌入式系統的體系結構。

圖1 嵌入式系統體系結構
通過“嵌入式系統原理與應用”課程的學習,學生具備一定的嵌入式系統開發能力:能夠設計出相關的硬件電路,了解硬件驅動的開發以及系統軟件和應用軟件的設計。
本課程授課應結合其以應用為中心的特點,闡述嵌入式系統的研發過程。本文以圍繞“UART串口—網口協議轉換器”的設計案例加以具體說明。首先,UART串口和網口這兩種接口屬于較常見的計算機接口;其次,各種嵌入式系統當中,這兩種接口應用廣泛,多種嵌入式操作系統中均已包含其相關驅動程序,適合課程講授使用;接著,對初次接觸嵌入式系統的高校學生而言,串口在硬件和軟件上都均表現得較為簡單易懂,而網口在研發過程中則能在軟件方面體現出嵌入式操作系統的優勢。
由“UART串口—網口協議轉換器”的標題即可啟發學生進行有關該系統應用目標的討論。形成嵌入式系統開發的第一步:根據系統設計的需求,分析系統結構,提出設計目標。該設計目標是實現UART串口數據和以太網數據的相互轉換,涉及包括信號電氣特性的轉換和數據幀結構的轉換。顯然,電氣特性的轉換由硬件電路來實現,而數據幀結構的轉換由相關軟件實現。
本案例以S3C4510為硬件核心,由Linux嵌入式操作系統實現UART串口—網口協議轉換器功能。
系統開發的第二個步是從系統的設計目標出發,進行該系統硬件電路結構的規劃和設計。本案例中,系統硬件需要提供一個UART串口的接口和一個網絡接口,并進行相關協議的轉換,核心器件考慮采用嵌入式處理器實現。因此,必須首先在課堂上給學生說清什么是嵌入式處理器,如何選擇嵌入式處理器、以及嵌入式系統最小系統的設計等問題。
嵌入式處理器的選型主要從系統的功能、性能和成本等幾個方面考慮,功能上應涵蓋所需的接口,性能上則綜合考慮系統的運行速度、系統容量等要素。嵌入式最小系統是嵌入式系統硬件可裁剪的體現。最小系統中包含有嵌入式系統必備的模塊,比如,嵌入式處理器、存儲器、電源電路、時鐘電路和及I/O接口等,如圖2所示。

圖2 嵌入式系統硬件最小系統
一般來講,嵌入式系統的硬件設計宜以經典的嵌入式最小系統電路為基礎加以擴展,達到特定的應用目的。比如,UART串口—網口協議轉換器的硬件就可在嵌入式最小系統的基礎上,增加UART串口接口和網絡接口電路。這些系統接口電路框圖如圖3所示。

圖3 UART串口—網口協議轉換器接口電路
由圖1可知,嵌入式系統軟件的開發為兩部分:嵌入式操作系統的開發和應用程序的編寫。其中嵌入式操作系統部分又分為硬件驅動的開發和操作系統的裁剪。
本文主要討論嵌入式Linux的設備驅動開發。Linux設備驅動程序一般劃分為三個部分:①自動配置和初始化子程序,負責監測所要驅動的硬件設備是否存在和能否正常工作;②服務于I/O請求的子程序;③中斷服務子程序[3]。
驅動程序的開發大概分為如下幾步:①在內核中找到相近的驅動程序,以其為模板進行開發,有時候需要從頭開始做;②實現驅動程序的初始化:如向內核注冊該驅動程序;③設計所要實現的操作,常見的有open()、close()、read()和 write()等;④一些驅動需要中斷服務;⑤編譯該驅動程序到內核中,或者用insmod實現加載。
上述案例涉及UART串口和網口接口,兩者在Linux中支持均很完善,具備統一的編程接口。學生在學習的過程中并不需要從頭開始編寫驅動程序,只需讀懂相關驅動程序代碼加以配置和裝載,便可達到快速認知的效果。與理論課程配套的實驗,要求學生實現串口和網口驅動的配置和裝載,理解嵌入式系統中驅動程序的作用、工作機理和開發方法。
在嵌入式環境中軟件運行所需的硬件資源十分有限,為了在實現應用功能的同時最大限度地減小對硬件的要求,常常要對軟件進行裁剪。嵌入式Linux的裁剪主要發生在內核和文件系統內。
與理論課程相配套的實驗課要求實現“UART串口—網口協議轉換器”中嵌入式Linux操作系統內核及文件系統的裁剪,掌握裁剪的原則和方法。
1)裁剪嵌入式Linux內核
Linux內核是非常龐大的軟件工程,由于高度模塊化,在裁剪內核時只要針對實際應用,選擇必需的模塊即可。
內核裁剪時應選擇網絡協議棧、TCP/IP協議、UART串口驅動和以太網口驅動[4]等模塊。
2)裁剪嵌入式Linux文件系統
文件系統占嵌入式Linux軟件很大比重,即使僅包含最基本軟件的文件系統,其大小也達到內核的2~3倍,因此對文件系統的裁剪至關重要。
要完成“UART串口—網口協議轉換器”這一項目,還需要完成嵌入式系統開發的第三個步驟,即UART串口數據幀向以太網數據幀結構的轉換。借助這部分內容,可以向學生介紹一些相關基礎知識,比如嵌入式系統的網絡協議棧和 socket編程等。而具體的實現也作為課程配套實驗,交由學生自行完成。
“嵌入式系統原理與應用”是一門應用性很強的課程,終極目標是面向實際應用。通過連續幾個學期的實踐發現,課堂內容主要講解概念、開發流程和方法,同時結合一個具體的嵌入式系統開發項目,將理論與實踐結合在一起,這對學生動手能力和創新能力的培養,能夠達到更好的效果,學生在學習之后對系統概念的理解,對開發方法的掌握更透徹。
[1]徐敏,林瑞金,關健生.嵌入式系統教學改革與實踐[J].南京:電氣電子教學學報,2009(6):13-14,22
[2]Tammy Noergaard著,馬洪兵,谷源濤譯.嵌入式系統硬件與軟件架構[M].北京:人民郵電出版社,2008
[3]Christopher Hallinan.嵌入式Linux開發(英文版)[M].北京:人民郵電出版社,2008
[4]劉輝.基于嵌入式 Linux的接入網通信設備軟件架構研究與設計[D].徐州:中國礦業大學圖書館,2006