日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]1.引言嵌入式Linux作為一個開放源代碼的操作系統(tǒng),以價格低廉、功能強大又易于移植的特性正在被廣泛應用,µClinux是專門針對沒有 MMU(Memory Manage Unit)的處理器

摘要:增強µClinux的實時性能是工業(yè)控制等實時性要求高的領域的必然要求,也是µClinux操作系統(tǒng)研究的關鍵技術之一。本文將RTAI移植至µClinux系統(tǒng)中,既滿足了嵌入式應用的需求,同時又保證了系統(tǒng)的硬實時性。最后,給出了在RTAI+µClinux環(huán)境下開發(fā)實時系統(tǒng)應用程序的設計方法。

關鍵詞:µClinux;實時性;RTAI;實時內核

1.引言

嵌入式Linux作為一個開放源代碼的操作系統(tǒng),以價格低廉、功能強大又易于移植的特性正在被廣泛應用,µClinux是專門針對沒有MMU(Memory Manage Unit)的處理器而設計的嵌入式Linux,非常適合中低端嵌入式系統(tǒng)的需求。µClinux雖然符合POSIX1003.1B關于實時擴展部分的標準,但其最初的設計目標為通用分時操作系統(tǒng),如果把µClinux用在工業(yè)控制、進程控制等微控制領域內,必須要增強µClinux的實時性能。

目前,對嵌入式Linux的實時化改造方案主要有3種:一種是直接修改內核插入搶占點[3],另外一種是資源內核方法[4],最后一種是雙內核架構的解決方案。但3種方法中前兩種都只能用于軟實時應用,只有雙內核[2]架構的方案可以保障硬實時應用需求。目前,Linux平臺下開發(fā)的具有硬實時功能的系統(tǒng)主要有:RTLinux和RTAI[1](Real Time Application Interface)?;赗TAI增強Linux的實時性方面研究得比較多,但是,基于RTAI增強µClinux實時性方面還未見到成型的產(chǎn)品。因此,本文借鑒RTAI對Linux的實時改進機理,對µClinux的實時性改造進行了分析與研究。

2. µClinux的內存管理

標準Linux使用虛擬存儲器技術,應用在帶有MMU的處理器上,虛擬地址被送到MMU,把虛擬地址映射為物理地址。而µClinux同標準Linux的最大區(qū)別就在于內存管理,只有了解它們內存管理的差異后,才能更好地利用RTAI對µClinux進行實時化改造。

µClinux雖然為嵌入式系統(tǒng)做了許多小型化的工作[5],但µClinux與標準Linux的架構完全一致。µClinux雖然無法使用處理器的虛擬內存管理技術,但µClinux仍然采用存儲器的分頁管理,系統(tǒng)在啟動時把實際存儲器進行分頁,在加載應用程序時分頁加載。一個進程在執(zhí)行前,系統(tǒng)必須為進程分配足夠的連續(xù)地址空間,然后全部載入主存儲器的連續(xù)空間中。µClinux采用實存儲器管理策略,通過地址總線對物理內存進行直接訪問。所有程序中訪問的地址都是實際的物理地址,操作系統(tǒng)對內存空間沒有保護,所有的進程都在一個運行空間中運行(包括內核進程)。

在µClinux系統(tǒng)中,缺少了 MMU的內存映射,µClinux必須在可執(zhí)行文件加載階段對可執(zhí)行文件reloc處理,使得程序執(zhí)行時能夠直接使用物理內存;其次,µClinux沒有自動生長的堆棧,也沒有brk()函數(shù),用戶空間的程序必須使用mmap()命令來分配內存;同時,在實現(xiàn)多個進程時需要實現(xiàn)數(shù)據(jù)保護,µClinux雖然支持fork()函數(shù),但實質是所有的多進程管理都通過vfork()函數(shù)來實現(xiàn)。vfork()是µClinux與標準Linux應用程序的開發(fā)中最重要的不同之處,只有對vfork()與fork()兩個函數(shù)的差異和程序處理機制有詳細的了解后,才能順利地完成從Linux到µClinux的程序移植。

3. 基于RTAI的Linux硬實時支持方案

3.1 RTAI簡介

RTAI for Linux[6]是雙內核架構的Linux實時化方案的典型代表,它由意大利的Milan大學主持,是近年來非?;钴S的開源項目。系統(tǒng)的實現(xiàn)基礎是在Linux上定義了一組實時硬件抽象層RTHAL(Real Time Hardware Abstraction Layer),通過RTHAL進行硬件管理,把基本內核和實時內核結合在一起,其中一個內核的改變,不會影響另一個內核的執(zhí)行,RTHAL將RTAI需要在Linux中修改的部分定義成一組程序界面,RTAI只使用這組界面和Linux溝通,其系統(tǒng)結構如圖1所示。

3.2 RTAI的RTHAL

RTAI從內核中提取一個 RTHAL,RTAI首先是一個中斷分發(fā)器,當RTAI模塊被加載后,CPU中斷仍由Linux管理,RTAI只接管外部設備的中斷并分發(fā)(有可能仍分發(fā)給Linux)。這種接管是通過RTHAL來實現(xiàn)的,RTHAL包含一些重要的函數(shù)和數(shù)據(jù)結構,RTAI模塊可能修改的內容都收集在此結構體中.

當RTAI裝載時,只需要重新設置RTHAL中的各項內容。內核需要修改執(zhí)行RTHAL以代替原來的內容,如

do_IRQ(irq,&dummy);

被修改為:

rthal.c_do_IRQ(irq,&dummy);

Linux初始化RTHAL為指向原始的函數(shù)和數(shù)據(jù)結構,RTHAL僅僅進行重定向。當RTAI被激活,RTHAL保存并且改變這些函數(shù)的值為RTAI自己的內容。以上段代碼為例,當RTAI還沒有加載時,rthal.c_do_IRQ的值就是Linux的do_IRQ,當RTAI被加載時,RTAI執(zhí)行以下代碼,將rthal.c_do_IRQ替換成RTAI自己的分發(fā)器:

rthal.c_do_IRQ=dispatch_irq;

3.3 RTAI的中斷處理機制

RTAI的最核心部分就是其中斷處理機制。RTAI構建了一個小實時內核接管硬件及中斷,支持EDF,RM兩種經(jīng)典實時調度算法,Linux作為此實時內核的最低優(yōu)先級任務被執(zhí)行。因而實時任務執(zhí)行時,Linux及其應用程序將被搶占。RTAI引入了軟中斷模擬技術,在發(fā)生硬件中斷時,實時內核只是把它放到中斷記錄表中,在沒有實時應用運行時才向Linux派發(fā)這些被保留的中斷。同時實時內核還監(jiān)控Linux的開/關中斷原語,以避免這些操作把實際的中斷關閉而影響實時內核的響應時間。主要包括以下幾個方面:

①函數(shù)替換

首先是Linux的開/關中斷等函數(shù)被RTAI提供的函數(shù)所替代,這樣Linux不能真正的關閉中斷,而只是一個軟件的機制。當外設中斷到來時,RTAI的替換函數(shù)必須檢查硬件中斷標志是否關閉和調用是否來自RTAI上下文。在此兩種情況之下,不能直接調用Linux的中斷處理函數(shù),中斷分發(fā)器只用于當CPU處于Linux上下文并且Linux開中斷時,才調用Linux的中斷處理例程(ISR)。

②全局變量

RTAI為每個中斷源定義了一個全局的數(shù)據(jù)結構:[!--empirenews.page--]

struct linux_irq{struct list_head list;

int irq;

int masked;

int pending;}

其中l(wèi)ist_head用于從Linux的中斷掛起隊列中插入或刪除。irq被初始化為此結構體所對應的中斷號。masked是一個標志位,可能具有以下3種值:1表示在中斷延遲函數(shù)中設置;2表示由Linux中斷mask函數(shù)設置;3表示由Linux中斷unmask函數(shù)設置。

③中斷傳遞

中斷傳遞可能被RTAI中斷分發(fā)器或Linux的開中斷函數(shù)所調用。當Linux打開中斷時,檢查掛起中斷鏈表是否為空,若不為空,則循環(huán)進行處理,直到所有中斷都被處理為止。其算法如下:

while(irqlist 不空){

從irqlist隊列中取出一個中斷;

if(該中斷正在被屏蔽) continue;

else{關閉Linux中斷;執(zhí)行中斷處理例程;開中斷;}}

3.4 RTAI的任務調度

①細粒度定時器的實現(xiàn)

標準Linux的定時器提供10ms的調度粒度,不足以達到實時響應速度的要求。RTAI通過提高系統(tǒng)時鐘精度改寫了時鐘處理程序,使之支持更高分辨率時鐘的周期模式,引入了兩種定時器模式:periodic(周期性)和one shot(一次性)。對于周期性實時任務應用periodic模式,只需要在初始化時對定時器進行設置,保證了處理效率;對于非周期實時任務應用one shot模式。在任何時刻,時鐘的下一次中斷間隔由所有定時器中到期最早的一個來決定。一旦定時器到期,內核便能夠立刻響應,內核的響應開銷只由中斷服務的時間所決定,使得實時應用的響應時間可以達到納秒級的水平,完全可以滿足一般工業(yè)應用實時控制的要求。

②調度機制

在實時任務之間、實時任務與Linux應用之間提供豐富的通訊機制(如FIFO管道、MBUFF共享內存等)進行通信;Linux應用可以通過這些通訊機制與實時應用交互,同時也可以通過實時內核中的實時應用代理(LXRT)運行實時任務。

任何實時任務的優(yōu)先級都要高于Linux,只有當沒有實時任務運行時,Linux才被調度,從而保證了RTAI的實時性。任務的調度周期在任務初始化時由程序員指定,也可在某個時刻調用API修改。 rt_task_struct包含多個雙向指針,所有的任務(包括Linux)都包括在各個鏈表中。如ready任務鏈表,其中Linux為鏈表頭,當發(fā)生調度時,RTAI在ready鏈表中搜尋優(yōu)先級最大的任務并切換執(zhí)行,當沒有實時任務在ready態(tài)時,則切換至Linux系統(tǒng)。

4. RTAI在µClinux上的移植

4.1 RTHAL的移植

借鑒RTHAL的思想,對µClinux核心進行改動,將其與中斷控制器隔離,核心中的所有中斷操作指令都被替換成相應的宏。對于RTAI的移植而言,最重要的部分就是RTHAL的移植,RTAI絕大部分與處理器相關的代碼都在這里,這里以作者所使用的S3C4510B(ARM7的核)和µClinux環(huán)境為例進行說明。由于RTAI已經(jīng)有ARM處理器上的版本,因此可以參照 ARM7處理器的RTHAL來移植到S3C4510B上。由于µClinux為針對沒有MMU處理器的操作系統(tǒng),因此RTAI需要去除與MMU相關的代碼。對于S3C4510B和µClinux,其RTHAL主要包括如下數(shù)據(jù)結構:

{指向IDT的指針;

打開/關閉中斷函數(shù)(cli,sti&flags);

控制中斷mask/unmask函數(shù);

中斷狀態(tài)的數(shù)據(jù)描述符(status,hander,nestedlevel,…);}

4.2定時器的移植

如前面分析,對于一個實時操作系統(tǒng),必須有精確的計時。在i386體系結構中,有時間標簽計數(shù)器TSC(Time Stamp Count),在S3C4510B處理器上沒有這個寄存器,可以采用計時器2(Timer1)來模擬TSC的功能。每來一個時鐘脈沖,Timer1的 TCNT1寄存器減1,減到零后產(chǎn)生時鐘中斷,再從TDATA1中讀TCNT1的值,往復運行。具體的做法是使用一個內核的全局變量,每次時鐘中斷來以后,在Timer1的寄存器中讀出值,計算其增量,為了使系統(tǒng)更精確,必須將Timer1中斷設置為最高優(yōu)先級,這樣就可以模擬64位的TSC寄存器,從而得到當前的準確計時。

5.基于RTAI與µClinux的應用程序的開發(fā)

編寫應用程序時,將實時系統(tǒng)的應用程序分為實時任務和非實時任務。實時任務是實時模塊,作為µClinux核心可加載模塊運行在核心態(tài)。它的設計應盡可能簡單,僅包含那些有強實時要求的處理模塊,如實時數(shù)據(jù)采集、外部設備控制等。非實時任務是普通的µClinux進程,在用戶態(tài)執(zhí)行,完成大部分的數(shù)據(jù)處理、圖形顯示和通訊等任務。所有的實時任務均按照對實時性要求的高低來進行優(yōu)先級排隊,系統(tǒng)根據(jù)優(yōu)先級的高低來順序啟動各個實時任務。而位于用戶態(tài)的界面,當作一個背景程序來執(zhí)行。核心態(tài)的任務優(yōu)先級總是高于用戶態(tài)的界面任務,且不能被其搶占。實時任務和非實時任務之間可通過FIFO隊列和共享內存等方法通信?;赗TAI的µClinux應用程序結構圖如圖2所示。

實時系統(tǒng)的啟動和結束可以用一個Shell程序來執(zhí)行,它的功能是實現(xiàn)各任務模塊的加載和卸載,以及用戶界面的運行。Shell程序是介于使用者和操作系統(tǒng)的內核程序間的一個界面,使用戶更為方便的使用操作系統(tǒng)。由于各個模塊之間具有相互依賴性,所以在加載和卸載各個模塊時按照一定的順序。首先要將RTAI提供的實時模塊加載,包括rtai、rtai_sched、 rtai_fifos和rtai_shm等模塊;然后裝入系統(tǒng)的各個實時模塊。卸載模塊的時候按照相反的順序依次卸載。實時系統(tǒng)的程序流程圖如圖3所示。

6.結束語

作者已將改造后的µClinux系統(tǒng)應用在了江蘇省普通高校自然科學研究計劃資助項目“機房環(huán)境設備安全監(jiān)控軟件平臺的研制”等項目中,均取得了良好的效果,解決了µClinux在實時性方面的缺陷,滿足了設計要求。

本文作者創(chuàng)新點是:實現(xiàn)了RTAI在µClinux上的移植,形成了RTAI和µClinux相結合的雙內核嵌入式系統(tǒng)運行方案,既滿足了嵌入式應用的需求,又保證了系統(tǒng)的硬實時性。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉