構建基于RTLinux的嵌入式系統研究與開(kāi)發(fā)

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

RTLinux的實(shí)現機理  

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



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



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

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

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

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

IwIP概述  

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

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

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

RTLinux中的網(wǎng)絡(luò )驅動(dòng)程序的設計  

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

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

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

中斷處理程序  

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

while(next_UPD->UpPkStatus&UPLOADED){  

receive_packet();}  

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



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

結束語(yǔ)  

計算機與通信技術(shù)日新月異,尤其在因特網(wǎng)方面,將RTLinux應用在針對實(shí)時(shí)嵌入式系統的研究與開(kāi)發(fā)也越來(lái)越受到人們的關(guān)注。本文中我們比較詳細的介紹了將IwIP移植到RTLinx的過(guò)程,并就RTLinux下的網(wǎng)絡(luò )驅動(dòng)程序設計作了比較深入的研究與實(shí)踐。實(shí)時(shí)嵌入式系統是當前的研究與實(shí)踐的一個(gè)熱點(diǎn),有許多問(wèn)題亟需解決,本文只是冰山上的一角,希望能拋磚引玉。
本文地址:http://selenalain.com/thread-28138-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页