基于Linux的嵌入式系統(tǒng)在測(cè)控系統(tǒng)中的設(shè)計(jì)
摘 要:針對(duì)當(dāng)前工業(yè)控制領(lǐng)域?qū)y(cè)控系統(tǒng)提出的將測(cè)控分散到現(xiàn)場(chǎng)、實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的要求,給出了一種應(yīng)用于測(cè)控系統(tǒng)的基于Linux的嵌入式系統(tǒng)的設(shè)計(jì)方案,能保證測(cè)控任務(wù)完成的實(shí)時(shí)性、可靠性,可以連到工業(yè)以太網(wǎng),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,在工業(yè)控制領(lǐng)域有很好的應(yīng)用前景。
關(guān)鍵詞:嵌入式系統(tǒng);Linux;測(cè)控系統(tǒng);網(wǎng)絡(luò)控制;工業(yè)以太網(wǎng)
0 引 言
當(dāng)前,在工業(yè)控制領(lǐng)域,網(wǎng)絡(luò)控制技術(shù)快速發(fā)展。網(wǎng)絡(luò)控制要求測(cè)控系統(tǒng)必須具備兩方面的功能:一方面要在現(xiàn)場(chǎng)完成復(fù)雜的測(cè)控任務(wù),通常一些任務(wù)具有一定的實(shí)時(shí)性的要求;另一方面要求測(cè)控系統(tǒng)能夠與某一類型的控制網(wǎng)相連,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。而在目前應(yīng)用的大多數(shù)測(cè)控系統(tǒng)中,嵌入式系統(tǒng)的硬件采用8/16位的單片機(jī);軟件多采用匯編語(yǔ)言編程,僅包含一個(gè)簡(jiǎn)單的循環(huán)處理的控制流程;單片機(jī)與單片機(jī)或上位機(jī)之間通信通過(guò)RS232、RS485來(lái)組網(wǎng)。這些網(wǎng)絡(luò)存在通信速度慢、聯(lián)網(wǎng)功能差、開(kāi)發(fā)困難的問(wèn)題。而工業(yè)以太網(wǎng)已逐步完善,在工業(yè)控制領(lǐng)域獲得越來(lái)越多的應(yīng)用。工業(yè)以太網(wǎng)使用了TCP/IP協(xié)議,便于聯(lián)網(wǎng),并具有高速控制網(wǎng)絡(luò)的優(yōu)點(diǎn)。現(xiàn)在,32位嵌入式CPU價(jià)格的下降,性能指標(biāo)的提高,為嵌入式系統(tǒng)的廣泛應(yīng)用提供了可能性。基于上述情況,我們將嵌入式系統(tǒng)應(yīng)用于測(cè)控系統(tǒng),可大大提高測(cè)控系統(tǒng)的性能,嵌入式系統(tǒng)一般應(yīng)用嵌入式操作系統(tǒng)來(lái)開(kāi)發(fā)。在嵌入式操作系統(tǒng)的選擇上,由于Linux有完整開(kāi)放的源代碼,可針對(duì)具體應(yīng)用修改和優(yōu)化系統(tǒng),內(nèi)核穩(wěn)定,適用于多種CPU和多種硬件平臺(tái),支持網(wǎng)絡(luò)等特點(diǎn),因而選擇Linux作為嵌入式操作系統(tǒng)。
1 測(cè)控系統(tǒng)總體設(shè)計(jì)
1.1 設(shè)計(jì)目標(biāo)
測(cè)控系統(tǒng)以基于Linux的嵌入式系統(tǒng)為核心,設(shè)計(jì)目標(biāo)歸納起來(lái)主要有以下幾點(diǎn):
(1)測(cè)控任務(wù)在現(xiàn)場(chǎng)完成。測(cè)控系統(tǒng)采用分散的控制策略,系統(tǒng)正常運(yùn)行時(shí)上位機(jī)只起到狀態(tài)監(jiān)控的作用。在工業(yè)現(xiàn)場(chǎng)完成數(shù)據(jù)測(cè)量、數(shù)據(jù)處理、過(guò)程控制等多種任務(wù),能確保一些任務(wù)完成的實(shí)時(shí)性。
(2)具有一定的自診斷、自校正的功能,將故障情況上傳給上位機(jī),便于維護(hù)人員查錯(cuò)、排錯(cuò)。具有動(dòng)態(tài)顯示和數(shù)據(jù)存儲(chǔ)能力。
(3)測(cè)控系統(tǒng)可連到工業(yè)以太網(wǎng),通過(guò)工業(yè)以太網(wǎng)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
1.2 技術(shù)路線
嵌入式系統(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)或Inernet發(fā)布信息,用戶通過(guò)顯示界面查看設(shè)備狀態(tài),設(shè)置設(shè)備參數(shù),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控、遠(yuǎn)程維護(hù)。
1.3 總體框圖
圖1 系統(tǒng)框圖
2 基于Linux的嵌入式系統(tǒng)的設(shè)計(jì)
2.1 硬件設(shè)計(jì)
考慮一般測(cè)控系統(tǒng)對(duì)嵌入式系統(tǒng)要求比較多的功能有:鍵盤(pán)接口、顯示接口、A/D(或D/A)轉(zhuǎn)換單元、可擴(kuò)展的I/O接口、打印機(jī)接口、與PC機(jī)通信的串行接口、以太網(wǎng)口等。實(shí)現(xiàn)的嵌入式系統(tǒng)硬件框圖如下:
圖2 硬件框圖
針對(duì)測(cè)控系統(tǒng)的應(yīng)用,選擇Motorola的Coldfire系列的MCF5307.MCF5307是一款高性能、低價(jià)位、高集成度的微處理器,為嵌入式控制應(yīng)用而設(shè)計(jì)。MCF5307的處理能力達(dá)70 MIPS,工作頻率88.47 MHz,總線頻率44.236 MHz,為運(yùn)行Linux提供硬件上的支持,在開(kāi)發(fā)板上還集成有16 M的SDRAM、2 M的FLASH、10 baseT以太網(wǎng)接口、RS232/RS485串口、I/O接口等。
2.2 軟件設(shè)計(jì)
嵌入式操作系統(tǒng)是整個(gè)嵌入式系統(tǒng)的核心。我們選擇Linux,但典型的Linux是為桌面配置的,內(nèi)核十分龐大,而嵌入式系統(tǒng)的RAM存儲(chǔ)容量很小,因此,要把Linux操作系統(tǒng)裝入有限的內(nèi)存,就要對(duì)它進(jìn)行裁剪,在裁剪過(guò)程中涉及的主要技術(shù)有:
(1) 內(nèi)核的精簡(jiǎn)。標(biāo)準(zhǔn)Linux是面向PC的,集成了許多PC需要而嵌入式系統(tǒng)并不需要的功能。對(duì)一些可獨(dú)立加上或卸下的功能塊,可在編譯內(nèi)核時(shí),僅保留嵌入式系統(tǒng)所需的功能支持模塊,刪除不需要的功能。例如,測(cè)控系統(tǒng)要連入以太網(wǎng),就要提供對(duì)TCP/IP的支持,編譯時(shí)加上TCP/IP棧;而SCSI、 Floppy之類的外設(shè)在我們的嵌入式系統(tǒng)中完全沒(méi)有必要,編譯時(shí)可去掉。這樣,重新編譯過(guò)的內(nèi)核顯著減小。
(2) 虛擬內(nèi)存機(jī)制的屏蔽。經(jīng)過(guò)分析發(fā)現(xiàn),虛擬內(nèi)存是導(dǎo)致Linux實(shí)時(shí)性不強(qiáng)的原因之一。在工業(yè)控制中一些任務(wù)要滿足一定的實(shí)時(shí)性的要求,屏蔽內(nèi)核的虛擬內(nèi)存管理機(jī)制可以增強(qiáng)Linux的實(shí)時(shí)性。當(dāng)要更改內(nèi)核的某項(xiàng)機(jī)制時(shí),一般不必大規(guī)模的改寫(xiě)代碼,可采用條件編譯的方法。思路是用#ifdef或 #ifndef屏蔽現(xiàn)有語(yǔ)句,在#else宏編譯語(yǔ)句中包括自己編寫(xiě)的代碼。實(shí)現(xiàn)虛擬內(nèi)存的機(jī)制有:地址映射機(jī)制、內(nèi)存分配和回收機(jī)制,緩存和刷新機(jī)制、請(qǐng)頁(yè)機(jī)制、交換機(jī)制、內(nèi)存共享機(jī)制,將實(shí)現(xiàn)這些機(jī)制的數(shù)據(jù)結(jié)構(gòu)和函數(shù)屏蔽或修改,還要修改與之相關(guān)的文件。需要改動(dòng)的文件主要在 /include/linux、/mm、/drivers/char、/fs、/ipc/kernel、/init目錄下。主要的改動(dòng)如下:與虛存有關(guān)的主要的數(shù)據(jù)結(jié)構(gòu)是vm_area_struct,將進(jìn)程的mm_struct結(jié)構(gòu)中的vm_area_struct去掉,vm_area_struct利用了vm_ops來(lái)抽象出對(duì)虛擬內(nèi)存的處理方法,屏蔽與虛擬內(nèi)存操作有關(guān)的函數(shù)。內(nèi)存映射主要由do_mmap()實(shí)現(xiàn),改寫(xiě)此函數(shù)的代碼。取消交換操作,屏蔽用于交換的結(jié)構(gòu)和函數(shù)聲明,以及實(shí)現(xiàn)交換的代碼。取消內(nèi)核守護(hù)進(jìn)程kswapd.
(3) 設(shè)備驅(qū)動(dòng)程序的編寫(xiě)。確定了內(nèi)核的基本功能后,就要為特定的設(shè)備編寫(xiě)驅(qū)動(dòng)程序,可按照在Linux下編寫(xiě)驅(qū)動(dòng)程序的規(guī)則編寫(xiě)。編寫(xiě)的設(shè)備驅(qū)動(dòng)程序應(yīng)具有以下功能:①對(duì)設(shè)備初始化和釋放;②把數(shù)據(jù)從內(nèi)核傳到硬件和從硬件讀取數(shù)據(jù);③讀取應(yīng)用程序傳遞給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);④檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
實(shí)現(xiàn)上述步驟后,一個(gè)小型的Linux 操作系統(tǒng)就構(gòu)造完成了。構(gòu)造后的Linux包括進(jìn)程管理、內(nèi)存管理和文件管理,支持多任務(wù)并行;開(kāi)發(fā)基于閃存的文件系統(tǒng),應(yīng)用程序和重要數(shù)據(jù)以文件的形式被存放在閃存文件系統(tǒng)中;有完整的TCP/IP協(xié)議棧,Linux內(nèi)建有對(duì)以太網(wǎng)控制器的支持,可以通過(guò)以太網(wǎng)口連到工業(yè)以太網(wǎng)上,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
還要將裁剪好的內(nèi)核移植到所用的目標(biāo)板上,通常移植內(nèi)核時(shí),首先要將內(nèi)核編譯成針對(duì)該處理器的目標(biāo)代碼。而我們所用的嵌入式微處理器MCF5307 是ColdFire系列,它有一些不同于其它CPU的地方,一些內(nèi)核程序要改寫(xiě),涉及到編寫(xiě)Linux的引導(dǎo)代碼和修改與體系結(jié)構(gòu)相關(guān)部分的代碼,主要是內(nèi)存管理和中斷處理部分。將Flash作為系統(tǒng)的啟動(dòng)設(shè)備,引導(dǎo)代碼放在Flash上。系統(tǒng)加電后,由引導(dǎo)代碼進(jìn)行基本的硬件初始化,然后把內(nèi)核映象裝入內(nèi)存運(yùn)行。
對(duì)于應(yīng)用程序的開(kāi)發(fā),針對(duì)測(cè)控系統(tǒng)的具體應(yīng)用,利用Linux 提供API接口開(kāi)發(fā)應(yīng)用程序。測(cè)控系統(tǒng)要完成多個(gè)任務(wù),因?yàn)槠帘瘟颂摂M內(nèi)存機(jī)制,所有的任務(wù)共同享有物理內(nèi)存,存在于統(tǒng)一的線性空間中。任務(wù)中的地址為真正的物理地址,由于不需要進(jìn)行地址空間映射,在任務(wù)切換時(shí)的上下文切換時(shí)間大大減少,提高了響應(yīng)的速度,實(shí)時(shí)性增強(qiáng)。Linux采用基于優(yōu)先級(jí)的輪轉(zhuǎn)法調(diào)度策略,能夠?qū)崿F(xiàn)多個(gè)任務(wù)并行。各個(gè)任務(wù)的實(shí)時(shí)性要求不同,可通過(guò)劃分優(yōu)先級(jí),使實(shí)時(shí)性要求高的任務(wù)劃分為實(shí)時(shí)進(jìn)程,具有較高的優(yōu)先級(jí),優(yōu)先得到調(diào)度,保證一定的實(shí)時(shí)性的要求。任務(wù)間通過(guò)信號(hào)量、消息隊(duì)列等機(jī)制通信。
在嵌入式系統(tǒng)中軟件開(kāi)發(fā)的主要模塊有:數(shù)據(jù)采集模塊,數(shù)據(jù)處理模塊,數(shù)據(jù)顯示模塊,通信和數(shù)據(jù)發(fā)布模塊,故障診斷模塊。其中故障診斷模塊實(shí)現(xiàn)實(shí)時(shí)自診斷,在系統(tǒng)工作期間,對(duì)系統(tǒng)內(nèi)部進(jìn)行部分測(cè)試。即將診斷程序設(shè)置在嵌入式系統(tǒng)中中斷級(jí)別最低的中斷服務(wù)程序,在不影響系統(tǒng)工作的前提下,進(jìn)行實(shí)時(shí)診斷。如發(fā)現(xiàn)故障且復(fù)診后仍有錯(cuò),通過(guò)顯示界面顯示,并上傳給上位機(jī),保證系統(tǒng)的可靠性。
在嵌入式Linux的開(kāi)發(fā)中,采用主―從模式,通過(guò)串行口或以太網(wǎng)口,使目標(biāo)板和宿主機(jī)相連。使用的是GNU的系列工具,GNU具有免費(fèi)開(kāi)放的源代碼,也為我們開(kāi)發(fā)基于Linux的應(yīng)用程序提供了方便。它包括一系列的開(kāi)發(fā)調(diào)試工具。主要組件有:
gcc:編譯器,可做成交叉編譯的形式,即在宿主機(jī)上開(kāi)發(fā)編譯目標(biāo)機(jī)上可運(yùn)行的二進(jìn)制文件;
Binutils:一些輔助工具,包括objdump(可以反編譯二進(jìn)制文件)、as(匯編編譯器)、ld(連接器)等等;
Gdb:調(diào)試器,可使用多種交叉調(diào)試方式,如gdbserve(使用以太網(wǎng)絡(luò)調(diào)試)。
最后,將調(diào)試好的內(nèi)核和應(yīng)用程序燒錄到閃存中。裁剪后的Linux已成經(jīng)功移植到目標(biāo)平臺(tái)上,在開(kāi)發(fā)板上運(yùn)行良好。經(jīng)過(guò)測(cè)試,已滿足一般的實(shí)時(shí)性要求。
3 結(jié) 論
我們開(kāi)發(fā)的基于Linux 的嵌入式系統(tǒng)應(yīng)用于測(cè)控系統(tǒng),能滿足當(dāng)前工業(yè)控制領(lǐng)域?qū)y(cè)控系統(tǒng)提出的要求,保證測(cè)控任務(wù)完成的實(shí)時(shí)性、可靠性,可連到工業(yè)以太網(wǎng)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。其硬件,接口采用插板的形式,結(jié)構(gòu)簡(jiǎn)單,易于裝卸,方便系統(tǒng)集成和維護(hù)。軟件方面,用戶可針對(duì)具體應(yīng)用作相應(yīng)修改或刪除即可,因而提高了測(cè)控系統(tǒng)的開(kāi)發(fā)效率,在工業(yè)控制領(lǐng)域有很好的應(yīng)用前景。
參考文獻(xiàn):
[1] 王學(xué)龍.嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2001.
[2] 鄒思鐵.嵌入式Linux設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
[3] Scott Maxwell.Linux內(nèi)核源代碼分析[M].北京:機(jī)械工業(yè)出版社,2000.
[4] 趙敏哲.64位Linux操作系統(tǒng)與應(yīng)用實(shí)例[M].北京:機(jī)械工業(yè)出版社,2000.
[5] 馮永紅,朱善君.裁剪Linux技術(shù)分析[A].沈緒榜.2001嵌入式系統(tǒng)及單片機(jī)國(guó)際學(xué)術(shù)交流會(huì)論文集[C].北京:北京航空航天大學(xué)出版社,2001.225-229.
[6] 劉燕英.嵌入式Linux的實(shí)現(xiàn)及應(yīng)用[A].沈緒榜.2001嵌入式系統(tǒng)及單片機(jī)國(guó)際學(xué)術(shù)流會(huì)論文集[C].北京:航空航天大學(xué)出版社,2001.230-233.
[7] 邢國(guó)良,等.基于Linux的實(shí)時(shí)操作系統(tǒng)的分析與研究[J].小型微型計(jì)算機(jī)系統(tǒng),2001,22(8):1018-1021.
[8] 蔣書(shū)波,等.實(shí)時(shí)操作系統(tǒng)用于嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)[J].電測(cè)與儀表,2001,38(42):41-44.
linux相關(guān)文章:linux教程
評(píng)論