張 靜, 宋 珂, 章 桐
(同濟大學中德學院,上海201804)
所謂實時系統(tǒng)(real-time system)是指其在計算和動作方面具有性能期限、對于外界的刺激都能由計算機給出及時響應的系統(tǒng)[1].全球許多科技公司和研究機構都對Linux的實時性進行了研究和改進.在眾多改進方案中,實時應用接口(Real-TimeApplication Interface,RTAI)和實時 Linux(Real-time-Linux,RT-Linux)以其出色的性能,成為了目前主流Linux實時性改進方案.RTAI與RT-Linux相比,其結構更加靈活,代碼修改量更小,研發(fā)周期更短[2].
RTAI項目是由意大利米蘭理工學院航天工程系發(fā)起開發(fā)的遵循GPL的開源項目,RTAI在ARM平臺上的移植,是從 3.2版本開始的,是基于Adeos實現(xiàn)的,它的硬件抽象層HAL使用Adeos提供的服務.也就是說,RTAI實現(xiàn)了Adeos中的一個域,通過Adeos實現(xiàn)RTAI域的初始化、中斷的申請、中斷服務程序的注冊等[3].
RTAI在Adoes系統(tǒng)中的域優(yōu)先級高于Linux域(也就是根域),每當中斷到來之后,Adeos先調度RTAI對該中斷進行處理、執(zhí)行中斷相關的實時任務,只有當RTAI沒有實時任務和中斷需要處理的時候,Adeos才會調度Linux運行,這就保證了RTAI的中斷響應速度和實時任務不受Linux的影響,從而提供了實時系統(tǒng)的可確定性[4].
我采用的是 Ubuntu 8.04.4 的 Wubi安裝,8.04.4是Ubuntu系統(tǒng)的穩(wěn)定版本,這樣成功性較高.首先查看一下默認的內核版本,在終端內輸入指令zj@zj-desktop:~$uname–r顯示默認的內核版本是 2.6.24.26 - generic.那么接下來就要選擇一款RTAI的版本,我選擇了RTAI-3.7,進入RTAI-3.7 的/rtai-3.7/base/arch/i386/patches,可以查看此版本RTAI支持的內核版本.如圖1所示.
圖1 支持的內核版本
由此我們選擇了 Linux -2.6.20.21.登錄已安裝完成的Ubuntu系統(tǒng),在終端輸入
進入/usr/src目錄,解壓文件此時會在/usr/src目錄下出現(xiàn)兩個文件夾linux-2.6.20.21 和 rtai-3.7
接下來給內核打上相應的RTAI補丁,首先確保安裝patch工具
配置Linux內核,內核兩種編譯模式:編譯成內核與編譯成模塊.可以把相應部分編譯到內核中,也可以把該部分編譯成模塊,動態(tài)調用.如果編譯到內核中,在內核啟動時就可以自動支持相應部分的功能,這樣的優(yōu)點是方便、速度快,機器一啟動,這部分功能同時啟動;缺點是會使內核變得龐大起來,不管你是否需要這部分功能,它都會存在(這是Windows的做法).
如果編譯成模塊,就會生成對應的.o文件,在使用的時候可以動態(tài)加載,優(yōu)點是不會使內核過分龐大,缺點是你得自己來調用這些模塊.建議經常使用的部分直接編譯到內核中,比如輸入設備、網卡等.
在ubuntu下推薦使用圖形化的配置菜單,可以先執(zhí)行命令make mrproper,它將清除目錄下所有配置文件和先前生成核心時產生的中間文件[5].
如圖2←no
(2).Enable loadable module support→(允許可裝載的模塊支持)→ Module versioning support(模塊支持的版本)=no不同的內核在使用同一模塊時區(qū)別于塔原有的模塊,此處不選.
Enable loadable module support→Module unloading(模塊卸載)這個選項可以卸載不再使用的模塊,如果不選將不能卸載任何模塊.
(3).Processor type and features→(處理器的類型和特性)→Symmetric multi-processing support(對稱多處理器支持)=no如果有多個CPU或者使用的是多核CPU就選上.此時"Enhanced Real Time Clock Support"選項必須開啟,"Advanced Power Management"選項必須關閉
圖2 內核配置界面
Processor type and features→Interrupt pipeline=yes
Processor type and features→Subarchitecture Type(子構架類型)=PC-compatible標準的PC或兼容機.
Processor type and features→Processor family(處理器系列)=core 2/newer xeon根據(jù)實際CPU選擇,我的電腦是酷睿雙核.
Processor type and features→Generic x86 support(通用x86支持)=no CPU能在上述”Processor family”中找到就可不選
Processor type and features→Multi-core scheduler support(針對多核CPU進行調度策略優(yōu)化)=yes
Processor type and features→Preemption Model(內核搶占模式)→Preemptible Kernel(Low-Latency Desktop)(適合運行實時程序的主動內核搶占)→yes
(4).Power management options(ACPI,APM)→Power Management support(電源管理選項)=no電源管理有APM和ACPI兩種標準且不能同時使用,即使關閉該選項,X86上運行的Linux也會在空閑時發(fā)出HLT指令將CPU進入睡眠狀態(tài).
Power management options(ACPI,APM)→CPU Frequency scaling(CPU變頻控制)→CPUF requency scaling Power management options=no CPU變頻控制允許在運行中改變CPU主頻,達到省電和降溫的目的,但是這個驅動不會自動改變CPU的時鐘速度,選擇no.
注意主菜單最后有兩項:
Load an Alternate Configuration File
Save an Alternate Configuration File
先選第一項的意思是,你也可以使用當前系統(tǒng)正在使用的配置文件來配置將要編譯的內核,然后選第二項保存,最后退出配置界面.操作方法如下:
假如當前系統(tǒng)正在使用的內核版本號為Linux-<current version>,其正在使用中的內核配置為/usr/src/linux-h(huán)eaders-<current version>-generic/.config將其拷到/usr/src/linux- <new version>目錄下.
然后選擇Load An Alternate Configuration File讀取配置文件,然后再此基礎上進行修改最后保存退出.
圖3 生成的鏡像文件和頭文件
當編譯結束后,會在/usr/src目錄下生成兩個文件,分別是鏡像文件和頭文件,如下圖-3所示,然后需要安裝這兩個文件.進入目錄,安裝鏡像文件和頭文件
安裝后將得到了三個非常重要的文件,分別是System.map,config 和 vmlinuz,這三個文件應該已經被拷貝到/boot/路徑下.重啟系統(tǒng),進入新配置的內核環(huán)境
root@zj-desktop:/usr/src#reboot
如圖-4編譯RTAI
圖4 RTAI配置界面
圖5 RTAI運行結果
root@zj- desktop:/usr/src/rtai-3.7#make
安裝RTAI
root@zj- desktop:/usr/src/rtai-3.7#make install測試Linux-RTAI
運行結果如圖5所示
(1)RTAI實現(xiàn)了Adeos內的一個域,這個域的優(yōu)先級高于Linux內核所在的根域,可以保證所有的RTAI中斷和實時任務都不會受Linux本身的影響,從而確??焖俚闹袛囗憫蛯崟r任務的按時完成.
(2)一個基于Linux和RTAI的實時操作系統(tǒng).經過理論分析和實驗結果證明:相關改進是正確、有效的,擴展后的RTAI能夠依照所設定的調度算法對實時任務進行正確調度,RTAI的實時性能也得到了提升.
(3)實踐證明 Ubuntu8.04.4 比較穩(wěn)定,而 9.10版本在reboot之后,會提示“you need load the kern first”,結果添加啟動項之后仍然不成功,這是因為本身9.10內核的Wubi安裝的一個Bug.
[1] 阮鴻芳,鐘家騏.Linux與硬實時擴展系統(tǒng)——RTAI的分析與研究[J].嵌入式操作系統(tǒng)應用,2007,23.
[2] 劉鑫,陸文娟,范海濤.基于RTAI嵌入式Linux硬實時性能研究與實現(xiàn)[J].嵌入式操作系統(tǒng)應用,2006.
[3] 范海濤,王樹民.基于RTAI的uClinux硬實時性能的實現(xiàn)[J].電力自動化設備,2006,26(3).
[4] 甘玲,劉柄宏.基于ADEOS的RTAI/Linux的研究及其實時性測試[J].微計算機信息,2009,27(2).
[5] 張巍,李俊,潘金貴.基于RTAI的實時Linux系統(tǒng)構筑及其嵌入式程序移植[J].計算機科學,2007,34(11).