基于Xenomai的實(shí)時(shí)Linux分析與研究
在用戶(hù)層,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用可以迅速得到struct_ipipe_tscinfo結(jié)構(gòu)體中的數(shù)據(jù)。而且為了避免受到緩存的影響,Xenomai將此結(jié)構(gòu)體變量存放在Linux的向量頁(yè)中。本文引用地址:http://m.butianyuan.cn/article/152624.htm
內(nèi)核通過(guò)函數(shù)_ipipe_mach_get_tscinfo來(lái)填充struct_ipipe_tscinfo結(jié)構(gòu)體變量中的各項(xiàng)內(nèi)容:
其中,info一>typte說(shuō)明在S3C2410平臺(tái)上TSC是基于Decrementer硬件計(jì)數(shù)方式的;info一>u.dec.counter用來(lái)將Decrementer計(jì)數(shù)器的物理地址設(shè)定為0x51000038;info一>u.dec.mask掩碼用來(lái)注明使用Dec―rementet。計(jì)數(shù)器中的特定位;info一>u.dec.tsc指向存放64位TSC值的區(qū)域。
在Xenomai用戶(hù)層的實(shí)時(shí)程序運(yùn)行時(shí),程序都會(huì)通過(guò)系統(tǒng)調(diào)用得到內(nèi)核填充好的struct_ipipe_tscinfo結(jié)構(gòu)體變量。具體實(shí)現(xiàn)可參考編譯用戶(hù)層實(shí)時(shí)程序時(shí)用到的,由Xenomai所提的頭文件/usr/xenomai/include/asm/syscall.h。
2.3 Xenomai多API構(gòu)架
除了提供Linux硬實(shí)時(shí),Xenomai的另一個(gè)目的是使基于Linux的實(shí)時(shí)操作系統(tǒng)能提供與傳統(tǒng)的工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng)(包括VxWorks、pSOS+、VRTX或者uITRON)功能相同的API。這樣,可以讓這些操作系統(tǒng)下的應(yīng)用程序能夠很容易地移植到GNU/Linux環(huán)境中,同時(shí)保持很好的實(shí)時(shí)性。
Xenomai的核心技術(shù)表現(xiàn)為使用一個(gè)實(shí)時(shí)微內(nèi)核(real―time nucleus)來(lái)構(gòu)建這些實(shí)時(shí)API,也稱(chēng)作“skin”。在實(shí)時(shí)核復(fù)用的基礎(chǔ)上,一個(gè)skin可以很好地模擬一種實(shí)時(shí)操作系統(tǒng)的API。它的結(jié)構(gòu)圖可以參考圖2。
圖2中,Native是Xenomai自帶的API,各類(lèi)API都有著同等的地位,都獨(dú)立地基于同一個(gè)實(shí)時(shí)微內(nèi)核。這樣做可以讓內(nèi)核的優(yōu)點(diǎn)被外層所有的API很好地繼承下來(lái)。更重要的是,實(shí)時(shí)微內(nèi)核提供的服務(wù)被外層各種API以不同的方式表現(xiàn)出來(lái),由此可以增強(qiáng)整個(gè)系統(tǒng)的強(qiáng)壯性。
編制實(shí)時(shí)程序時(shí),在很多實(shí)時(shí)操作系統(tǒng)上只能在內(nèi)核層實(shí)現(xiàn);而編制實(shí)時(shí)內(nèi)核模塊時(shí),會(huì)受到內(nèi)核的限制,比如有些實(shí)時(shí)內(nèi)核不支持浮點(diǎn)運(yùn)算,模塊出錯(cuò)時(shí)容易使整個(gè)系統(tǒng)掛起,而且內(nèi)核模塊的調(diào)試比較困難。Xenomai能夠支持較好的用戶(hù)層實(shí)時(shí),這為編制實(shí)時(shí)性要求不是非常高的實(shí)時(shí)程序提供了一個(gè)有效途徑。下面這個(gè)用戶(hù)層實(shí)時(shí)例程使用的是Xenomai提供的Native API:
從程序中可以看出,Xenomai的用戶(hù)層實(shí)時(shí)程序的周期可以輕易地設(shè)定到μs級(jí),所以它完全可以適用于一般實(shí)時(shí)性要求的工程應(yīng)用。
3 總 結(jié)
本文首先簡(jiǎn)單介紹了實(shí)時(shí)操作系統(tǒng),分析了Linux 2.6內(nèi)核實(shí)時(shí)性能的不足;然后著重介紹了一個(gè)Linux實(shí)時(shí)化的解決方案――Xenomai,分析了Xenomai的Adeos構(gòu)架基礎(chǔ),簡(jiǎn)要說(shuō)明了Xenomai用戶(hù)層實(shí)時(shí)的實(shí)現(xiàn),以及Xenomai支持多種實(shí)時(shí)操作系統(tǒng)的API的新特點(diǎn)。本文給出的Xenomai的用戶(hù)層實(shí)時(shí)例程已經(jīng)成功地在多個(gè)平臺(tái)上運(yùn)行過(guò),表明Xenomai用戶(hù)程序在多種硬件平臺(tái)上有很好的移植性。
評(píng)論