www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]構建基于RTLinux的嵌入式系統(tǒng)研究與開發(fā)

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

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

        RTLinux的實現(xiàn)機理 

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

        結(jié)束語 

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

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險積極籌備個人養(yǎng)老金的產(chǎn)品設計和系統(tǒng)開發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產(chǎn)品,推動商業(yè)養(yǎng)老保險、個人養(yǎng)老金、專屬商業(yè)養(yǎng)老保險等產(chǎn)品供給。 搭養(yǎng)老政策東風 ...

關鍵字: 溫度 BSP 東風 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎單元,承載著生存與活動的最基本功能。而對于理想空間的解構意義卻在物理性容器之外,體現(xiàn)出人們對于空間和生活深層關系的思考,同時也塑造著人與空間的新型連接...

關鍵字: 溫度 BSP 智能化 進程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績預告。今年前三季度,公司預計實現(xiàn)營業(yè)收入7.54億元至8.33億元,同比增長60.24%至77.03%;歸母凈利潤預計為1.73億...

關鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟和信息化局發(fā)布2022年度第一批北京市市級企業(yè)技術中心創(chuàng)建名單的通知,諾誠健華正式獲得"北京市企業(yè)技術中心"認定。 北京市企業(yè)技...

關鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...

關鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團成立60周年的紀念日。趁著首都銀行集團成立60周年與首都銀行(中國)在華深耕經(jīng)營12年的“大日子”,圍繞作為外資金融機構對在華戰(zhàn)略的構想和業(yè)...

關鍵字: 數(shù)字化 BSP 供應鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團公司上海通運國際物流有限公司(Nipp...

關鍵字: 溫控 精密儀器 半導體制造 BSP

廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國進出口商品交易會("廣交會")于"云端"開幕。本屆廣交會上高新技術企業(yè)云集,展出的智能產(chǎn)品超過140,...

關鍵字: 中國智造 BSP 手機 CAN

Lua RTOS 是一個實時操作系統(tǒng),設計在嵌入式系統(tǒng)上運行,對 FLASH 和 RAM 內(nèi)存的要求最低。目前 Lua RTOS 可用于 ESP32, ESP8266 和 PIC32MZ 平臺,并可以輕松移植到其他32位...

關鍵字: Lua RTOS 操作系統(tǒng) 嵌入式系統(tǒng)

通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UATR,是一種串行、異步、全雙工的收發(fā)器。全雙工的UART支持同時雙向通信,是嵌入式系統(tǒng)必不可少的d...

關鍵字: 異步收發(fā) 傳輸器 嵌入式系統(tǒng)

嵌入式軟件

15715 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉