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