當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]構(gòu)建基于RTLinux的嵌入式系統(tǒng)研究與開(kāi)發(fā)

摘 要:Linux作為嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中應(yīng)用越來(lái)越普及。Linux若是作為一個(gè)實(shí)時(shí)操作系統(tǒng),它無(wú)法滿足實(shí)時(shí)系統(tǒng)嚴(yán)格的實(shí)時(shí)性要求。RTLinux是在Linux內(nèi)核的下層實(shí)現(xiàn)所得的一個(gè)簡(jiǎn)單的硬實(shí)時(shí)內(nèi)核,但是RTLinux也存在一個(gè)很大的缺陷,那就是實(shí)時(shí)任務(wù)無(wú)法使用Linux提供的服務(wù),特別是它無(wú)法使用Linux中的TCP/IP的網(wǎng)絡(luò)功能,在此介紹的IwIP是一個(gè)可以運(yùn)行在RTLinux并能被實(shí)時(shí)任務(wù)使用的嵌入式的輕量級(jí)TCP/IP協(xié)議棧。IwIP還可以使實(shí)時(shí)任務(wù)與遠(yuǎn)程實(shí)時(shí)任務(wù)或Linux用戶進(jìn)程通訊。根據(jù)這些特性,我們通過(guò)將Linux,IwIP和RTLinux3者合理的結(jié)合在一起,從而構(gòu)成一個(gè)全新的實(shí)時(shí)系統(tǒng)框架。 
關(guān)鍵詞:嵌入式系統(tǒng);RTLinux;IwIP;設(shè)備驅(qū)動(dòng)程序 

        引 言
 
        Linux或經(jīng)過(guò)簡(jiǎn)單改進(jìn)的Linux都是不能運(yùn)行實(shí)時(shí)任務(wù),這是因?yàn)長(zhǎng)inux的“公平”時(shí)間分配的調(diào)度算法要保證分配給每一個(gè)用戶程序占用CPU時(shí)間,然而實(shí)時(shí)任務(wù)對(duì)執(zhí)行時(shí)間要求很嚴(yán)格,如每隔200ns從傳感器取樣的實(shí)時(shí)任務(wù)。Linux系統(tǒng)的虛擬內(nèi)存的內(nèi)存管理使得任何用戶進(jìn)程的頁(yè)面在任何時(shí)刻都能被交換到硬盤或外存儲(chǔ)器中,這樣在Linux中將需要的頁(yè)面返回到RAM中也需要花費(fèi)一段不確定的時(shí)間。另外,對(duì)任務(wù)執(zhí)行的時(shí)間和任務(wù)完成時(shí)間都是沒(méi)有精確的可預(yù)知性的。Linux操作系統(tǒng)的“天生”缺陷使得Linux無(wú)法滿足實(shí)時(shí)嵌入式系統(tǒng)的實(shí)時(shí)系統(tǒng)要求。在本文中我們主要討論實(shí)時(shí)操作系統(tǒng)RTLinux和Linux有機(jī)集成在一起,構(gòu)成了一個(gè)全新的實(shí)時(shí)系統(tǒng)。 

        RTLinux的實(shí)現(xiàn)機(jī)理 

        RTLinux是美國(guó)新墨西哥州大學(xué)計(jì)算機(jī)科學(xué)系VictorYodaiken和Micae Brannanov開(kāi)發(fā)的。它在Linux內(nèi)核的下層實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的實(shí)時(shí)內(nèi)核,而Linux本身作為這個(gè)實(shí)時(shí)內(nèi)核的優(yōu)先級(jí)最低的任務(wù),所有的實(shí)時(shí)任務(wù)的優(yōu)先級(jí)都高于Linux系統(tǒng)本身的以及Linux系統(tǒng)下的一般任務(wù)。RTLinux的體系結(jié)構(gòu)如圖1所示。


    RTLinux的設(shè)計(jì)思想是:應(yīng)用硬件的實(shí)時(shí)約束將實(shí)時(shí)程序分割成短小簡(jiǎn)單的部分,較大部分承擔(dān)較復(fù)雜的任務(wù)。根據(jù)這一原則,將應(yīng)用程序分為硬實(shí)時(shí)和程序2個(gè)部分。硬件實(shí)時(shí)部分被作為實(shí)時(shí)任務(wù)來(lái)執(zhí)行,并從外部設(shè)備拷貝數(shù)據(jù)到一個(gè)叫做實(shí)時(shí)有名管道(RTFIFO)的特殊I/O端口;程序主要部分作為標(biāo)準(zhǔn)Linux進(jìn)程來(lái)執(zhí)行。它將從RTFIFO中讀取數(shù)據(jù),然后顯示并存儲(chǔ)到文件中,實(shí)時(shí)部分將被寫(xiě)入內(nèi)核。設(shè)計(jì)實(shí)時(shí)有名管道是為了使實(shí)時(shí)任務(wù)在讀和寫(xiě)數(shù)據(jù)時(shí)不被阻塞。圖2所示的是實(shí)時(shí)有名管道結(jié)構(gòu)圖。


    RTLinux通過(guò)對(duì)標(biāo)準(zhǔn)Linux內(nèi)核進(jìn)行改造,將Linux內(nèi)核工作環(huán)境作了一些變化。如圖2所示,在Linux進(jìn)程和硬件中斷之間,本來(lái)由Linux內(nèi)核完全控制,現(xiàn)在在Linux內(nèi)核和硬件中斷的地方加上了一個(gè)RTLinux內(nèi)核的控制。Linux的控制信號(hào)都要先交給RTLinux內(nèi)核進(jìn)行處理。在RTLinux內(nèi)核中實(shí)現(xiàn)了一個(gè)虛擬中斷機(jī)制,Linux本身永遠(yuǎn)不能屏蔽中斷,它發(fā)出的中斷屏蔽信號(hào)和打開(kāi)中斷信號(hào)都修改成向RTLinux發(fā)送一個(gè)信號(hào)。如在Linux里面使用“SI”和“CLI”宏指令,讓RTLinux里面的某些標(biāo)記做了修改。也就是說(shuō)將所有的中斷分成Linux中斷和實(shí)時(shí)中斷兩類。如果RTLinux內(nèi)核接收到的中斷信號(hào)是普通Linux中斷,那就設(shè)置一個(gè)標(biāo)志位;如果是實(shí)時(shí)中斷,就繼續(xù)向硬件發(fā)出中斷。在RTLinux中執(zhí)行STI將中斷打開(kāi)之后,那些設(shè)置了標(biāo)志位表示的Linux中斷就繼續(xù)執(zhí)行,因此,CLI并不能禁止RTLinux內(nèi)核的運(yùn)行,卻可以用來(lái)中斷Linux。Linux不能中斷自己,而RTLinux可以。 

    這里體現(xiàn)了RTLinux設(shè)計(jì)過(guò)程中的原則:在實(shí)時(shí)模塊中的工作量盡量少,如果能在Linux中完成而不影響實(shí)時(shí)性能的話,就盡量在Linux中完成,因此,RTLinux內(nèi)核可以盡量做得簡(jiǎn)單。在RTLinux內(nèi)核中,不應(yīng)該等待資源,也不需要使用共享旋轉(zhuǎn)鎖。實(shí)時(shí)任務(wù)和Linux進(jìn)程之間的通信也是非阻塞的,從來(lái)不用等待進(jìn)隊(duì)列和出隊(duì)列的數(shù)據(jù)。RTLinux將系統(tǒng)和設(shè)備的初始化交給了Linux 完成,對(duì)動(dòng)態(tài)資源的申請(qǐng)和分配也交給了Linux。 

    RTLinux使用靜態(tài)分配的內(nèi)存來(lái)完成硬件實(shí)時(shí)任務(wù),因?yàn)樵跊](méi)有內(nèi)存資源的時(shí)候,被阻塞的線程是不可能具有實(shí)時(shí)能力的。 

        輕量級(jí)TCP/IP協(xié)議棧IwIP向RTLinux的移植 

        IwIP概述 
        lwIP是瑞典計(jì)算機(jī)科學(xué)研究所(SICS)的計(jì)算機(jī)與網(wǎng)絡(luò)結(jié)構(gòu)實(shí)驗(yàn)室(CNA)的AdamDunkel設(shè)計(jì)的一個(gè)小型的獨(dú)立的TCP/IP協(xié)議棧。lwIPTCP/IP協(xié)議棧設(shè)計(jì)的思想是:在保持完整的TCP/IP協(xié)議棧的前提下最大限度的降低其所需的資源,以適應(yīng)只有十幾KbytesRAM和40Kbytes左右的ROM的嵌入式系統(tǒng)。IwIP協(xié)議棧包含了IP,IPv6,ICMP,UDP和TCP等協(xié)議。 

    IwIP協(xié)議棧不是像TCP/IP網(wǎng)絡(luò)協(xié)議那樣分不同層次,每一層分別負(fù)責(zé)不同的通訊功能。IwIP設(shè)計(jì)的初衷是應(yīng)用于嵌入式系統(tǒng),嵌入式系統(tǒng)通常有較強(qiáng)的實(shí)時(shí)性和內(nèi)存容量有限等特點(diǎn),因此IwIP在網(wǎng)絡(luò)協(xié)議棧中不是完全遵守網(wǎng)絡(luò)協(xié)議棧的分層體系結(jié)構(gòu)進(jìn)行設(shè)計(jì)的。例如應(yīng)用層為了提高實(shí)時(shí)性,它并沒(méi)有遵守“上層調(diào)用下層提供的服務(wù),下層向上層提供服務(wù)”這個(gè)協(xié)議分層設(shè)計(jì)的原則,而是應(yīng)用層和其下層共享系統(tǒng)內(nèi)部的緩沖區(qū),從而節(jié)省應(yīng)用程序與下層協(xié)議之間的數(shù)據(jù)復(fù)制所需的系統(tǒng)開(kāi)支。 

    IwIP除了上面提到的TCP/IP協(xié)議棧外,它還包含了一些應(yīng)用支撐模塊。這些支撐模塊是操作系統(tǒng)抽象層模塊(sys_archmodule)、內(nèi)存管理模塊、網(wǎng)絡(luò)功能接口模塊和校驗(yàn)和計(jì)算模塊。這些模塊中,除了操作系統(tǒng)抽象層外,其他模塊都是相互獨(dú)立的。IwIP棧向RTLinux上的移植的關(guān)鍵點(diǎn)就是將它新增的對(duì)操作系統(tǒng)函數(shù)調(diào)用和數(shù)據(jù)結(jié)構(gòu)添加或集成到操作系統(tǒng)抽象層模塊中。這樣,操作系統(tǒng)抽象層向其他調(diào)用它的模塊提供統(tǒng)一的API接口,使得系統(tǒng)的移植與具體的硬件系統(tǒng)無(wú)關(guān),降低了系統(tǒng)移植的復(fù)雜性。操作系統(tǒng)抽象層提供的外部應(yīng)用接口中包括了諸如線程管理、定時(shí)器管理以及中斷管理等系統(tǒng)資源管理接口。由于該部分內(nèi)容在很多書(shū)籍和資料中都已經(jīng)做了很詳盡的論述,在此不再做詳細(xì)闡述了。 

        RTLinux中的網(wǎng)絡(luò)驅(qū)動(dòng)程序的設(shè)計(jì) 
        網(wǎng)絡(luò)驅(qū)動(dòng)程序的功能主要是賦予本機(jī)網(wǎng)絡(luò)IP地址、掩碼、網(wǎng)關(guān)地址和收發(fā)網(wǎng)絡(luò)數(shù)據(jù)包等。IwIP包含有網(wǎng)絡(luò)接口驅(qū)動(dòng)程序,但是這些驅(qū)動(dòng)程序是針對(duì)標(biāo)準(zhǔn)Linux系統(tǒng)的,而非RTLinux的,因此我們有要將這些網(wǎng)絡(luò)接口驅(qū)動(dòng)程序進(jìn)行適當(dāng)?shù)母脑煲赃m用于RTLinux系統(tǒng)。在RTLinux系統(tǒng)中,我們是利用前面提到的RTFIFO對(duì)網(wǎng)絡(luò)接口驅(qū)動(dòng)程序進(jìn)行功能擴(kuò)展和性能改進(jìn)。這樣,Linux系統(tǒng)和RTLinux系統(tǒng)就像2個(gè)獨(dú)立的系統(tǒng)。 

    RTLinux中進(jìn)程之間、內(nèi)核與進(jìn)程之間都是通過(guò)信號(hào)(signal)進(jìn)行相互通信的。信號(hào)是基于POS2IX標(biāo)準(zhǔn),RTLinux的設(shè)備驅(qū)動(dòng)程序也是基于POSIX標(biāo)準(zhǔn),它可以調(diào)用標(biāo)準(zhǔn)的文件操作函數(shù)如open,read,write,close等。但是基于POSIXb標(biāo)準(zhǔn)的信號(hào)存在一個(gè)問(wèn)題,那就是每次進(jìn)程只能接收一個(gè)信號(hào),后續(xù)的信號(hào)無(wú)法被接收,網(wǎng)絡(luò)驅(qū)動(dòng)程序的這種“串行”處理網(wǎng)絡(luò)數(shù)據(jù)包的方式和網(wǎng)絡(luò)上數(shù)據(jù)包傳輸?shù)耐话l(fā)性的特點(diǎn)對(duì)嵌入式系統(tǒng)是一個(gè)很大的障礙和威脅。因?yàn)榍度胧较到y(tǒng)的內(nèi)存是極其有限的資源,上述那種處理方式很容易造成系統(tǒng)緩沖區(qū)滿負(fù)荷從而導(dǎo)致系統(tǒng)內(nèi)存溢出,更壞的后果可能是導(dǎo)致整個(gè)系統(tǒng)的崩潰。在研究了上述問(wèn)題后,筆者借鑒了標(biāo)準(zhǔn)Linux系統(tǒng)中實(shí)時(shí)信號(hào)(Linux內(nèi)核沒(méi)有利用實(shí)時(shí)信號(hào))的特點(diǎn),提出了將數(shù)據(jù)包接收處理線程注冊(cè)到網(wǎng)絡(luò)驅(qū)動(dòng)程序中,當(dāng)有數(shù)據(jù)包到達(dá)時(shí),網(wǎng)絡(luò)驅(qū)動(dòng)程序即刻通知該線程去接收抵達(dá)的數(shù)據(jù)包。同時(shí),在添加一個(gè)全程變量,用來(lái)跟蹤記錄當(dāng)前被掛起的信號(hào)數(shù)目。這樣既可以提高系統(tǒng)的處理接收數(shù)據(jù)包的實(shí)時(shí)性能,同時(shí)又解決了POSIX標(biāo)準(zhǔn)中信號(hào)接收的問(wèn)題。這個(gè)處理機(jī)制的代碼實(shí)現(xiàn)也是很簡(jiǎn)單的,其部分主要代碼如下所示。

 do{
read(fd,(void3)&receive,1546);
}while(dec_pendent_signals());
上面那段代碼中的dec_pendent_signals函數(shù)的功能流程大致如下:
intDec_pendent_signals()
{……
 stop_interrupt(…);關(guān)中斷
 if(pendent_signals==1)retval=0;
 pendentsignals;接收并處理被掛起的信號(hào)對(duì)列里的一個(gè)信號(hào)allow_inerrupt(…);
 開(kāi)中斷
 ……} 

        中斷處理程序 
        網(wǎng)絡(luò)接口中斷處理程序也同樣存在前面提到的問(wèn)題,即當(dāng)驅(qū)動(dòng)程序正在處理一個(gè)數(shù)據(jù)包接收中斷時(shí),后續(xù)數(shù)據(jù)包到達(dá)時(shí)網(wǎng)卡產(chǎn)生的硬件中斷都無(wú)法被驅(qū)動(dòng)程序接收到。筆者在此提出了一個(gè)較為合理的解決方案。在網(wǎng)卡驅(qū)動(dòng)程序初始化時(shí),驅(qū)動(dòng)程序給網(wǎng)卡分配一個(gè)指向系統(tǒng)內(nèi)存的指針,這個(gè)指針是個(gè)單循環(huán)指針鏈表。此設(shè)計(jì)的好處在于當(dāng)有數(shù)據(jù)包到達(dá)時(shí),網(wǎng)卡可以將數(shù)據(jù)包緩存在這片系統(tǒng)內(nèi)存中,并將相應(yīng)的標(biāo)志位置位。當(dāng)該數(shù)據(jù)包被上層應(yīng)用成功接收后,該標(biāo)志位也復(fù)位。下面這段代碼是用直觀的程序語(yǔ)言進(jìn)行描述的。
 
while(next_UPD->UpPkStatus&UPLOADED){
    receive_packet();} 

    代碼中的UPLOADED就是上面提到的標(biāo)志位。我們可以用更直觀的圖例描述這個(gè)解決方案,如圖3所示(圖3中的UPD表示接收包描述符,即Upload Packet Descriptors)。


    從圖3我們可以看出:系統(tǒng)能否最大限度的降低丟包率,在很大程度上取決于接收數(shù)據(jù)緩沖區(qū)的容量。一方面,嵌入式系統(tǒng)的內(nèi)存是很寶貴也很有限的資源,另一方面,系統(tǒng)能否正常工作以及性能穩(wěn)定在很大程度上又決定于內(nèi)存資源的合理布局與分配。就網(wǎng)絡(luò)接口而言,考慮到網(wǎng)絡(luò)中多播和組播數(shù)據(jù)包的存在,網(wǎng)絡(luò)接口需要把他們都接收下來(lái),然后判斷該數(shù)據(jù)包是否是發(fā)給自己的。由于網(wǎng)絡(luò)中這樣的多播和組播數(shù)據(jù)包在所有傳輸?shù)臄?shù)據(jù)包中占有很大部分比例,因此,倘若網(wǎng)絡(luò)接口沒(méi)有及時(shí)處理收到的數(shù)據(jù)包,該數(shù)據(jù)包就可能被后續(xù)到達(dá)的數(shù)據(jù)所覆蓋。因此,如何從兩者中找到一個(gè)折衷的方案是在實(shí)踐過(guò)程中,針對(duì)具體的系統(tǒng)做不同的設(shè)計(jì)。 

        結(jié)束語(yǔ) 

        計(jì)算機(jī)與通信技術(shù)日新月異,尤其在因特網(wǎng)方面,將RTLinux應(yīng)用在針對(duì)實(shí)時(shí)嵌入式系統(tǒng)的研究與開(kāi)發(fā)也越來(lái)越受到人們的關(guān)注。本文中我們比較詳細(xì)的介紹了將IwIP移植到RTLinx的過(guò)程,并就RTLinux下的網(wǎng)絡(luò)驅(qū)動(dòng)程序設(shè)計(jì)作了比較深入的研究與實(shí)踐。實(shí)時(shí)嵌入式系統(tǒng)是當(dāng)前的研究與實(shí)踐的一個(gè)熱點(diǎn),有許多問(wèn)題亟需解決,本文只是冰山上的一角,希望能拋磚引玉。
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉