摘? 要:計算機(jī)集成電路技術(shù)的快速發(fā)展,使機(jī)電控制系統(tǒng)的集成復(fù)雜度越來越高,集成精度也越來越高。由于現(xiàn)代機(jī)電控制系統(tǒng)要處理眾多的數(shù)據(jù)信息,因此嵌入式機(jī)電控制系統(tǒng)憑借其較為精簡的系統(tǒng)形式,以及實用性與專業(yè)性較強(qiáng)的系統(tǒng)特征,成為機(jī)械電子產(chǎn)業(yè)最常用的控制系統(tǒng)。本文主要探討基于實時Linux的嵌入式機(jī)電控制系統(tǒng)啟動過程時間分析及優(yōu)化技術(shù),通過分析Linux內(nèi)核的嵌入式機(jī)電控制系統(tǒng)架構(gòu),給出嵌入式機(jī)電控制系統(tǒng)啟動過程的優(yōu)化方案。
關(guān)鍵詞:嵌入式系統(tǒng);機(jī)電控制;快速啟動;Linux
中圖分類號:TP271;TM921.5 ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2019)23-0066-03
Research on Embedded Electromechanical Control System
Technology Based on Real-time Linux
WANG Libo
(Henan Institute of Technology,Xinxiang? 453003,China)
Abstract:With the rapid development of computer integrated circuit technology,the integration complexity of electromechanical control systems is getting higher and higher,and the integration accuracy is getting higher and higher. Since modern electromechanical control systems have to process a large amount of data information,embedded electromechanical control systems have become the most commonly used control systems in the mechatronics industry due to their relatively simplified system forms,system features with strong practicability and professionalism. This paper mainly discusses the time analysis and optimization technology of the embedded electromechanical control system based on real-time Linux. Through analyzing the embedded electromechanical control system architecture of the Linux kernel,the optimization scheme of the embedded electromechanical control system startup process is given.
Keywords:embedded system;electromechanical control;fast startup;Linux
0? 引? 言
嵌入式機(jī)電控制系統(tǒng)核心為計算機(jī)控制系統(tǒng),運用以Linux為內(nèi)核的控制系統(tǒng),展開精確快速的機(jī)電控制工作。Linux的嵌入式機(jī)電控制系統(tǒng)主要由軟件架構(gòu)、系統(tǒng)內(nèi)核、文件系統(tǒng)等部分構(gòu)成,Linux系統(tǒng)的優(yōu)化也要從系統(tǒng)內(nèi)核與文件系統(tǒng)展開。
1? 嵌入式機(jī)電控制系統(tǒng)的軟件架構(gòu)與啟動過程
1.1? 嵌入式機(jī)電控制系統(tǒng)的軟件架構(gòu)
嵌入式機(jī)電控制系統(tǒng)軟件由應(yīng)用程序、鏈接庫、系統(tǒng)接口層、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議、設(shè)備驅(qū)動層、硬件等多部分組
成,其中硬件以上的所有部分屬于嵌入式操作系統(tǒng)內(nèi)核,是操作系統(tǒng)的最重要部分,具體軟件結(jié)構(gòu)如圖1所示。Linux嵌入式機(jī)電控制系統(tǒng)通過統(tǒng)一形式完成機(jī)電控制與管理工作,對嵌入式機(jī)電硬件展開管理,并提供相應(yīng)的調(diào)用契約接口來服務(wù)系統(tǒng)軟件,最終達(dá)到拓展控制系統(tǒng)功能的目的。
1.2? 嵌入式機(jī)電控制系統(tǒng)的啟動過程
嵌入式機(jī)電控制系統(tǒng)啟動過程的具體步驟如圖2所示。
嵌入式機(jī)電控制系統(tǒng)在開始啟動的時候,首先執(zhí)行引導(dǎo)加載程序,引導(dǎo)加載程序與DSP系統(tǒng)中的硬件存在緊密關(guān)聯(lián),承擔(dān)著初始化中央處理器,以及初始化內(nèi)存與串口的工作。然后執(zhí)行加載內(nèi)核鏡像工作,隨后控制系統(tǒng)會開始加載啟動程序代碼,展開系統(tǒng)內(nèi)核的初始化。之后開始代碼運行環(huán)境的設(shè)定工作,隨后執(zhí)行操作系統(tǒng)內(nèi)核函數(shù)。系統(tǒng)內(nèi)核在初始化完成后,開始加載設(shè)備驅(qū)動模塊。最后安裝根文件系統(tǒng),然后啟動應(yīng)用程序。
1.3? 嵌入式機(jī)電控制系統(tǒng)內(nèi)核剖析
1.3.1? 嵌入式實時Linux內(nèi)核架構(gòu)
Linux的嵌入式操作系統(tǒng)為RTLinux,在Linux內(nèi)核系統(tǒng)中常會出現(xiàn)程序調(diào)用的情況。而Linux系統(tǒng)在保護(hù)供一個進(jìn)程使用臨界資源的過程中,不得不屏蔽相應(yīng)的系統(tǒng)操作。因此,在臨界區(qū)域程序的優(yōu)先級較低,而低優(yōu)先級的程序會搶占高優(yōu)先級程序的使用請求,但標(biāo)準(zhǔn)Linux運用在固定時間進(jìn)行內(nèi)核分配的方案,能夠?qū)Ω鱾€運行進(jìn)程展開控制。各個優(yōu)先級進(jìn)程需要按照相應(yīng)的時間片進(jìn)行使用,這會產(chǎn)生進(jìn)程時間的不可控情況。RTLinux在Linux中加入虛擬層,虛擬層也建立出一個系統(tǒng)內(nèi)核。該內(nèi)核能夠?qū)Ω鱾€進(jìn)行的時間片長度進(jìn)行預(yù)測,并且能夠搶先運行優(yōu)先級較高的進(jìn)程,以滿足各種進(jìn)程的硬實時性要求。其中實時任務(wù)為RTLinux內(nèi)核中優(yōu)先級最高的任務(wù),實時任務(wù)進(jìn)程在處理運行完畢后,才能運行其他非實時進(jìn)程。
1.3.2? 嵌入式實時Linux內(nèi)核主要子系統(tǒng)
Linux系統(tǒng)中能夠同時運行多個系統(tǒng),各種內(nèi)存、CPU的進(jìn)程請求都會反饋到系統(tǒng)內(nèi)核中。Linux內(nèi)核的子系統(tǒng)包括:系統(tǒng)調(diào)用接口、進(jìn)程管理、網(wǎng)絡(luò)堆棧、內(nèi)存管理、虛擬文件系統(tǒng)、設(shè)備驅(qū)動等。
系統(tǒng)調(diào)用接口在系統(tǒng)中起到中介的傳遞作用,應(yīng)用程序會將相應(yīng)的函數(shù)請求,通過系統(tǒng)調(diào)用接口發(fā)送給內(nèi)核,而調(diào)用接口會將需要的函數(shù)從內(nèi)核中調(diào)取出來,并將最終的函數(shù)結(jié)果反饋給應(yīng)用程序。進(jìn)程管理在系統(tǒng)中起到管理進(jìn)程的作用,各個進(jìn)程有著較為緊密的聯(lián)系,而進(jìn)程管理會對進(jìn)程的CPU調(diào)度器進(jìn)行控制。因此即使存在多種線程同時搶占CPU的情況,O(1)調(diào)度算法也可以在特定時間內(nèi)展開線程控制。Linux內(nèi)存管理將4KB緩沖區(qū)作為基數(shù),從4KB緩沖區(qū)展開結(jié)構(gòu)分配、內(nèi)存頁跟蹤活動。內(nèi)存管理會根據(jù)內(nèi)存頁的富余狀況,進(jìn)行內(nèi)存的動態(tài)調(diào)整與應(yīng)用。
虛擬文件系統(tǒng)主要在文件系統(tǒng)中設(shè)置通用的虛擬接口,同時在系統(tǒng)調(diào)用接口、文件系統(tǒng)中間建立交換層。虛擬文件系統(tǒng)往下是緩存的緩沖區(qū),主要存儲通用函數(shù)集。緩存區(qū)會對大量的數(shù)據(jù)進(jìn)行儲存與讀取,以便應(yīng)用程序隨時訪問物理設(shè)備。設(shè)備驅(qū)動程序在緩沖區(qū)下面,為各種物理設(shè)備提供接口。
1.3.3? 實時Linux嵌入式內(nèi)核的啟動過程時間分析
啟動加載器在進(jìn)行內(nèi)核引導(dǎo)后,就會解除對Linux內(nèi)核的控制權(quán)。Linux內(nèi)核中存在著不同的鏡像文件類型,因此Linux內(nèi)核的啟動方式也存在著相應(yīng)差異。Linux內(nèi)核鏡像文件包含以下幾種:標(biāo)準(zhǔn)ELF文件格式的虛擬內(nèi)存Linux鏡像文件、gzip算法壓縮后的鏡像文件。在壓縮后的內(nèi)核鏡像中,內(nèi)核鏡像之前存在一個例程集合,能夠?qū)Σ糠钟布M(jìn)行設(shè)置。在內(nèi)核鏡像中存在的內(nèi)核解壓縮后,會將解壓縮文件存入內(nèi)存中。而沒有壓縮過的內(nèi)核鏡像,在載入內(nèi)存中展開運行時,例程集合會對內(nèi)核展開調(diào)用以啟動內(nèi)核,具體如圖3所示。
首先要進(jìn)行與CPU體系結(jié)構(gòu)相關(guān)的初始化,Linux內(nèi)核會對CPU類型進(jìn)行分析,然后從處理器中完成初始化函數(shù)的調(diào)用工作。之后展開內(nèi)存結(jié)構(gòu)的初始化,創(chuàng)建相應(yīng)的內(nèi)存頁表,對各種物理內(nèi)存展開一一映射。
其次是建立Linux內(nèi)核的核心環(huán)境,主要包括以下幾方面內(nèi)容:Linux內(nèi)核程序調(diào)度器、時間、定時時鐘、控制臺,核心高速緩沖存儲器、內(nèi)存等的初始化。創(chuàng)設(shè)內(nèi)部高速緩沖存儲器、通用高速緩沖存儲器,創(chuàng)設(shè)文件、目錄、虛擬內(nèi)存高速緩沖存儲器,讀寫緩沖區(qū)、內(nèi)存頁哈希表初始化,創(chuàng)設(shè)程序信號隊列緩沖存儲器,創(chuàng)設(shè)內(nèi)存文件存儲器尋址數(shù)據(jù)表等,然后啟動第一運行進(jìn)程。
最后展開外設(shè)驅(qū)動程序的加載和初始化建設(shè),其中包含根文件系統(tǒng)的安裝、內(nèi)核加載等工作,主要包括以下幾方面內(nèi)容:總線初、網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)的初始化,創(chuàng)設(shè)核心線程以完成內(nèi)存緩沖的清除工作,創(chuàng)設(shè)核心線程以完成內(nèi)存緩沖的信息更新工作,啟動核心內(nèi)存頁調(diào)整線程,將各種字符、計算機(jī)系統(tǒng)接口設(shè)備、網(wǎng)絡(luò)設(shè)備進(jìn)行初始化,然后安裝根文件系統(tǒng)。
1.4? 嵌入式機(jī)電控制系統(tǒng)快速啟動方案分析
嵌入式機(jī)電控制系統(tǒng)中存在的靜態(tài)驅(qū)動程序越多,RTLinux內(nèi)核的啟動過程所需時間就越長。因此控制系統(tǒng)需要去除多余的驅(qū)動程序,并且要對各種驅(qū)動程序展開靜態(tài)、模塊化的驅(qū)動處理,以提升啟動速度。嵌入式Linux文件系統(tǒng)中包含CRAMFS、JFFS/JFFS2、YAFFS/YAFFS2等多種文件系統(tǒng)。其中CRAMFS文件系統(tǒng)不能進(jìn)行程序編寫,因此在Linux系統(tǒng)斷電后可能會出現(xiàn)數(shù)據(jù)丟失的情況。
JFFS、JFFS2文件系統(tǒng)則能夠在斷電后對數(shù)據(jù)進(jìn)行保存,也能夠降低系統(tǒng)損耗、展開數(shù)據(jù)壓縮等工作。JFFS2文件系統(tǒng)在嵌入式系統(tǒng)中有著廣泛的應(yīng)用,但也存在著以下幾方面的不足:(1)JFFS2文件系統(tǒng)在完成flash設(shè)備的全局掃描后,才能展開掛載工作。JFFS2文件系統(tǒng)的掛載時長,與flash設(shè)備閃存中所具有的節(jié)點數(shù)呈正比例關(guān)系,通常掛載時長在40秒左右。(2)JFFS2文件系統(tǒng)在磨損平衡的測算中,通常采用磨損平衡概率測算法計算,造成磨損平衡的不確定。(3)JFFS2文件系統(tǒng)占用的系統(tǒng)內(nèi)存大小,與flash內(nèi)存的節(jié)點數(shù)呈正比例關(guān)系。JFFS2文件系統(tǒng)將flash存儲設(shè)備控制在128M內(nèi),這不符合Linux嵌入式機(jī)電控制系統(tǒng)的要求。
YAFFS2文件系統(tǒng)適用于閃存存儲器,YAFFS2文件系統(tǒng)能夠?qū)δp平衡進(jìn)行控制,還能夠在系統(tǒng)斷電后進(jìn)行數(shù)據(jù)保存。與CRAMFS、JFFS2相比,它具有更加快速的掛載速度,也能夠容納更大容量的閃存。但由于根文件系統(tǒng)方案較為單一,因此YAFFS2文件系統(tǒng)不能完全解決斷電數(shù)據(jù)問題。所以CRAMFS文件系統(tǒng)、YAFFS2文件系統(tǒng)的交互使用,能夠解決斷電可靠性難題,而且其具備的數(shù)據(jù)儲存、快速掛載優(yōu)點,符合嵌入式機(jī)電控制系統(tǒng)的啟動條件。
2? 嵌入式機(jī)電控制系統(tǒng)快速啟動優(yōu)化及實現(xiàn)
2.1? 嵌入式系統(tǒng)軟件開發(fā)環(huán)境
Linux的嵌入式系統(tǒng)資源、內(nèi)存空間較小,也沒有顯示器輸出設(shè)備,因此嵌入式系統(tǒng)的開發(fā)不能運用PC軟件來完成。當(dāng)前嵌入式系統(tǒng)采用宿主機(jī)—目標(biāo)機(jī)模式進(jìn)行開發(fā)與編譯。宿主機(jī)、目標(biāo)機(jī)使用纜線進(jìn)行連接,該纜線用串行線或者Ethernet連接,宿主機(jī)、目標(biāo)機(jī)間的數(shù)據(jù)傳送也通過串行線或者Ethernet連接進(jìn)行。在目標(biāo)板的開發(fā)方面,運用串行線或者互聯(lián)網(wǎng)展開Linux內(nèi)核、系統(tǒng)鏡像、目標(biāo)程序等內(nèi)容的下載。但嵌入式系統(tǒng)的串行線連接,時常會出現(xiàn)連接速度慢的問題;而Ethernet的網(wǎng)絡(luò)接口連接,則能夠為嵌入式系統(tǒng)提供足夠的帶寬支持。目標(biāo)板、宿主機(jī)可以對多個網(wǎng)絡(luò)展開互聯(lián),但這種網(wǎng)絡(luò)互聯(lián)并不能對Linux內(nèi)核調(diào)試帶來幫助。
JTAG接口能夠解決嵌入式Linux內(nèi)核的調(diào)試問題,JTAG接口與調(diào)試器進(jìn)行連接,就能夠完成中央處理器的調(diào)試與控制工作。開發(fā)者可以通過JTAG接口,將各種啟動程序的初始化軟件在存儲芯片中進(jìn)行編寫。通電后嵌入式系統(tǒng)就能夠啟動程序,以此完成串行線或者Ethernet網(wǎng)絡(luò)連接的任務(wù)。
2.2? 嵌入式Linux內(nèi)核的優(yōu)化與實現(xiàn)
2.2.1? 內(nèi)核裁剪與配置
Linux內(nèi)核的嵌入式機(jī)電控制系統(tǒng)屬于模塊組裝,因此Linux內(nèi)核可以根據(jù)硬件環(huán)境、具體需要,對內(nèi)核中無用的模塊進(jìn)行裁減。Linux內(nèi)核的裁剪與配置包括以下幾個步驟:(1)make config是Linux內(nèi)核的命令接口,若.config文件存在于內(nèi)核根目錄中,則.config文件能夠完成內(nèi)核配置的設(shè)置過程。(2)make oldconfig和make config相同,都是Linux內(nèi)核的命令接口,但make oldconfig在內(nèi)核中只修改沒有配置的內(nèi)核文件,配置完畢的文件則不會重復(fù)修改。(3)make menuconfig是最常用的內(nèi)核配置方式,在系統(tǒng)終端殼層中以菜單的方式進(jìn)行表現(xiàn),將.config文件的默認(rèn)值在菜單中進(jìn)行顯示。(4)make xconfig與make menuconfig相似,也是根據(jù)內(nèi)核根目錄中的.config文件,進(jìn)行內(nèi)核的配置工作。
2.2.2? 內(nèi)核的編譯
內(nèi)核的編譯主要是完成內(nèi)核源碼、內(nèi)核鏡像、內(nèi)核模塊的建立活動。內(nèi)核源碼的建立是由makefile文件,通過make命令構(gòu)建內(nèi)核源碼的文件依存體系。而.depend文件隱藏在內(nèi)核源碼樹的子目錄中,.depend文件中存在著該內(nèi)核文件、頭文件間的文件依存體系。在Linux內(nèi)核編譯的過程中,make命令會對.depend文件進(jìn)行不停的修改。make命令在進(jìn)行內(nèi)核重新編譯的時候,會遵循makefile規(guī)則對修改的內(nèi)核文件進(jìn)行編譯。內(nèi)核源碼的文件依存體系可做如下表示:make ARCH=mips CROSS_ COMPILE=mips-linux- clean dep。
Makefile在編譯的過程中,會對各種編譯文件變量進(jìn)行內(nèi)核架構(gòu)的判斷。若內(nèi)核編譯中沒有指定架構(gòu)形式,則默認(rèn)makefile的內(nèi)核編譯采用宿主機(jī)相同的架構(gòu)模式。在完成交叉編譯工具的編譯定義后,展開建立內(nèi)核文件、頭文件的依存聯(lián)系,內(nèi)核鏡像的編譯如下所示:make ARCH=mips CROSS_ COMPILE=mips-linux- zImage。
2.3? 嵌入式Linux文件系統(tǒng)的優(yōu)化與實現(xiàn)
Linux系統(tǒng)中的設(shè)備文件都儲存在/dev根文件系統(tǒng)中,Linux嵌入式系統(tǒng)中存在必要的設(shè)備文件。在設(shè)備文件設(shè)置完畢后,將展開根文件系統(tǒng)應(yīng)用程序的設(shè)置工作。其中BusyBox能夠運用單個應(yīng)用程序,完成Linux命令集的功能操作。在運用靜態(tài)鏈接進(jìn)行BusyBox的配置與編譯后,將BusyBox的二進(jìn)制文件在/bin目錄中進(jìn)行安裝。BusyBox文件根據(jù)相應(yīng)的符號鏈接名稱,完成各種要求的命令工作。嵌入式系統(tǒng)在根文件系統(tǒng)初始化過程中,屬于單用戶工作模式,因此開發(fā)者可以運用init程序展開系統(tǒng)的啟動操作。BusyBox套件中init程序為目標(biāo)板中首個應(yīng)用程序,在系統(tǒng)啟動/sbin/init的時候,BusyBox套件中的init進(jìn)程或立即啟動。
3? 結(jié)? 論
Linux嵌入式機(jī)電控制通過計算機(jī)技術(shù)與軟件應(yīng)用的使用,在數(shù)據(jù)運算處理、可靠與實時性等方面,均有顯著的提高。嵌入式控制系統(tǒng)是機(jī)電控制未來的發(fā)展方向,本文在針對系統(tǒng)啟動過程進(jìn)行探討后,提出嵌入式機(jī)電控制系統(tǒng)的快速啟動方案??焖賳臃桨覆粌H具有較高的可靠性、穩(wěn)定性,而且能在一定程度上縮短啟動時間。
參考文獻(xiàn):
[1] 宋國軍,張侃諭,林學(xué)龍.嵌入式系統(tǒng)中U-Boot基本特點及其移植方法 [J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004(10):78-81.
[2] 霍妍,孟凡榮.基于Linux嵌入式系統(tǒng)的研究與實現(xiàn) [J].計算機(jī)系統(tǒng)應(yīng)用,2004(8):4-6.
[3] 陳光達(dá),段寶巖,保宏,等.嵌入式系統(tǒng)在機(jī)電控制中的應(yīng)用 [J].電子機(jī)械工程,2004(3):55-58.
[4] 何小慶.選擇ARM CPU的操作系統(tǒng)μC/OS-Ⅱ,μC Linux,還是Linux [J].電子產(chǎn)品世界,2004(3):38-40.
[5] 林仕鼎,任愛華,王雷,等.Linux內(nèi)核在新型硬件平臺上的實現(xiàn) [J].北京航空航天大學(xué)學(xué)報,2003(3):197-201.
作者簡介:王利博(1985.06-),女,漢族,河南新鄉(xiāng)人,教師,碩士,研究方向:計算機(jī)控制。