利用ColdFire uClinux實(shí)現(xiàn)數(shù)據(jù)采集和傳輸
1 防危核技術(shù)
本文引用地址:http://m.butianyuan.cn/article/21271.htm防危核關(guān)心的是如何保護(hù)設(shè)備不被非法訪問,以避免因?qū)υO(shè)備的誤操作引起的重大生命財(cái)產(chǎn)損
為了不影響系統(tǒng)的性能,防危核應(yīng)盡可能小,為此系統(tǒng)所有的防危核策略均由防危核為實(shí)施是不現(xiàn)實(shí)的。采用將防危策略放在防危核外部的防危策略庫中的方法,縮小防危核的大小主,防危核在防危處理時(shí)訪問防危策略庫,以獲取相應(yīng)防危策略。
(2)完備性
完備性要求,不通過防危核主體就不能對(duì)客體進(jìn)行任何訪問操作。它表明對(duì)設(shè)備的任何訪問請(qǐng)求都必須通過防危核的驗(yàn)證。如果系統(tǒng)中存在其它組件可以繞開防危核訪問設(shè)備,顯然安全將無法得到保障。所以采用了防危核技術(shù)的系統(tǒng)必須要保證防危核對(duì)設(shè)備的專一控制。
(3)通用性
通用性指防危核模塊的基本結(jié)構(gòu)不依賴于任何特定的操作系統(tǒng)和設(shè)備,只需要操作系統(tǒng)和設(shè)備滿足防危核的接口要求,并修改策略庫,就可以將防危核軟件應(yīng)用到任何操作系統(tǒng)和設(shè)備中。 2 開發(fā)平臺(tái)rt-linux os構(gòu)架與特征
通常,安全關(guān)鍵系統(tǒng)對(duì)實(shí)時(shí)性有嚴(yán)格要求,我們選擇rt-linux操作系統(tǒng)為安全實(shí)驗(yàn)?zāi)P偷拈_發(fā)平臺(tái)。
rt-linux是美國nmt大學(xué)對(duì)標(biāo)準(zhǔn)linux的一個(gè)實(shí)時(shí)擴(kuò)展版本,其結(jié)構(gòu)如圖2所示。它實(shí)際上是給原linux內(nèi)核打了實(shí)時(shí)補(bǔ)丁,打了補(bǔ)丁的linux內(nèi)核由兩部分組成:rt-linux和linux。在rt-linux內(nèi)核實(shí)時(shí)應(yīng)用(任務(wù))則是一種可加載的內(nèi)核模塊,具有高的優(yōu)先級(jí)。另外,所有的中斷都先由rt-linux來處理,之后才由標(biāo)準(zhǔn)的內(nèi)核來處理。非實(shí)時(shí)任務(wù)通過rt-linux提供的fifo(一種透明的管道)與實(shí)時(shí)任務(wù)通信。
rt-linux可以提供應(yīng)用程序的硬實(shí)時(shí)保證。所謂“硬實(shí)時(shí)”是區(qū)別“軟實(shí)時(shí)”而言的。硬實(shí)時(shí)對(duì)滿足時(shí)限的要求比軟實(shí)時(shí)嚴(yán)格,通常硬實(shí)時(shí)的系統(tǒng)響應(yīng)時(shí)間在ms或μs級(jí),而軟實(shí)時(shí)對(duì)其響應(yīng)時(shí)間的要求沒有那么嚴(yán)格。硬實(shí)時(shí)工作通常指超過時(shí)限要求就會(huì)造成嚴(yán)重?fù)p害的工作,而軟實(shí)時(shí)即使超過時(shí)限也不會(huì)帶來嚴(yán)重后果。以核能電廠和看vcd為例,用在核能電廠的實(shí)時(shí)操作系統(tǒng),如果超出時(shí)限可能會(huì)導(dǎo)致嚴(yán)重的損害,然而vcd播放器超出時(shí)限只不過讓使用者感覺不舒服而已。所以前者是硬實(shí)時(shí),后者是軟實(shí)時(shí)。
這樣一種linux實(shí)時(shí)化方案,對(duì)原linux改動(dòng)最小,又能充分利用標(biāo)準(zhǔn)linux的全部特性,從而能滿足實(shí)時(shí)系統(tǒng)防危核控制模型研究的諸多要求,因此,nmt rt-linux是本安全模型研究的最佳實(shí)驗(yàn)平臺(tái)。
3 linux平臺(tái)的其它使用資源通常,基于rt-linux的應(yīng)用程序由兩部分組成:一部分運(yùn)行在real-time下,另一部分運(yùn)行在標(biāo)準(zhǔn)的linux下。運(yùn)行在real-time下的任務(wù)是實(shí)時(shí)任務(wù),它作為linux的內(nèi)核模塊(module)被加載到linux內(nèi)核中,也就是它運(yùn)行于linux內(nèi)核態(tài),因此需要使用linux內(nèi)核態(tài)資源。本控制模型系統(tǒng)中的防危核正是作為實(shí)時(shí)任務(wù)運(yùn)行于linux內(nèi)核態(tài),而十字路口交通燈控制設(shè)備運(yùn)行于標(biāo)準(zhǔn)linux下??刂圃O(shè)備任務(wù)采用linux的tcl/tk圖形編程語言編程,以友好、形象、直觀的界面模擬防危核對(duì)十字路口交通燈的控制。下面將分別介紹上述資源。
3.1 內(nèi)核模塊加載機(jī)制 linux提供的可加載內(nèi)核模塊(module)是linux內(nèi)核支持的動(dòng)態(tài)可加載模塊,它們是核心的一部分;但是并沒有編譯到核心里面去,只是一個(gè)目標(biāo)文件,可根據(jù)需要在系統(tǒng)啟動(dòng)后動(dòng)態(tài)地加載或卸載,linux中大多數(shù)設(shè)備驅(qū)動(dòng)程序或文件系統(tǒng)都做成這樣的模塊。超級(jí)用戶可以通過insmod和rmmod命令分別載入和卸載模塊。核心也可在需要時(shí),請(qǐng)求守護(hù)進(jìn)程(kerneld)載入和卸載模塊。這種方式可以減小核心代碼的規(guī)模,使核心配置更為靈活,并且用戶不必每次修改后都重新編譯核心代碼和啟動(dòng)系統(tǒng)。
一旦linux模塊載入核心后,就成為核心代碼的一部分。它與其它核心代碼的地位是相同的。當(dāng)模塊載入系統(tǒng)核心時(shí),系統(tǒng)修改核心中的符號(hào)表,將新裁入模塊提供的資源和符號(hào)加載核心符號(hào)表中,新載入的模塊可以訪問已載入的模塊提供的資源為自己服務(wù)。 3.2 tcl/tk圖形編程語言
本系統(tǒng)中的圖形用戶界面采用tcl/tk圖形編程語言,使界面友好、形象、直觀。tcl是tool control language(工具控制語言)的縮寫。tk是tcl“圖形工具箱”的擴(kuò)展,它提供各種標(biāo)準(zhǔn)的gul接口,以利于迅速進(jìn)行高級(jí)應(yīng)用程序開發(fā)。
tcl/tk是一種解釋執(zhí)行的腳本語言,應(yīng)用中通常將嵌入到c程序中?!靶∏?、易學(xué)、高效、跨平臺(tái)執(zhí)行”是tcl語言特點(diǎn)的集中體現(xiàn)。實(shí)際上,tcl不僅僅在開發(fā)小的應(yīng)用程序上有其快速、可維護(hù)性強(qiáng)等優(yōu)勢,在大型應(yīng)用系統(tǒng)方面,如操作系統(tǒng)及網(wǎng)絡(luò)管理、測試系統(tǒng)、自控、仿真、可視化應(yīng)用及計(jì)算機(jī)輔助設(shè)計(jì)等方面都有豐富的應(yīng)用成果。
4 防危核實(shí)驗(yàn)原型的設(shè)計(jì)與實(shí)現(xiàn)
圖3為以交通燈控制為模型的防危核系統(tǒng)體系結(jié)構(gòu)。
由圖3可以看出,整個(gè)系統(tǒng)由四個(gè)部分組成:防危核、模擬設(shè)備、設(shè)備控制器、命令文件。防危核作為rt-linux的實(shí)時(shí)任務(wù),與模擬設(shè)備、設(shè)備控制器間的通信采用rt-linux提供的實(shí)時(shí)fifo;而模擬設(shè)備和設(shè)備控制器間的通信使用linux提供的非實(shí)時(shí)命名管道。下面仔細(xì)分析各模擬所提供的功能。2⑤⑥⑦sδδλδωω·αγ∈βθθθ→→→→ττ 防危核模塊的設(shè)計(jì)和實(shí)現(xiàn)
系統(tǒng)在運(yùn)行時(shí)先通過命令insmod將防危核動(dòng)態(tài)加載到linux內(nèi)核中,于是它便一直運(yùn)行內(nèi)核態(tài)。當(dāng)不需要時(shí)再用命令rmmod手動(dòng)卸載。這種方式下會(huì)對(duì)操作系統(tǒng)內(nèi)核的基本功能產(chǎn)生任何影響,同時(shí)又可以保證demo系統(tǒng)的實(shí)時(shí)性。
防危核分為主模塊和命令檢測模塊。主模塊負(fù)責(zé)接收設(shè)備控制器傳來的設(shè)備命令和模擬設(shè)備發(fā)送的設(shè)備狀態(tài),然后根據(jù)命令參數(shù)的不同情況進(jìn)行相應(yīng)的處理。如果用戶要求命令不需要通過防危核驗(yàn)證,則直接將命令發(fā)送到模擬設(shè)備;如果用戶要求命令通過防危核驗(yàn)證,則主模塊將調(diào)用命令檢測模塊進(jìn)行命令的合法性檢測,命令檢測模塊以函數(shù)形式存在并且按照交通燈的防危策略而設(shè)計(jì)。函數(shù)名為int safetydetect(devstate currentstate,sourcecmdnewcom),函數(shù)返回值為命令判斷結(jié)果。如果驗(yàn)證設(shè)備命令合法,則主模塊將設(shè)備命令及返回值一起發(fā)送到模擬設(shè)備,模擬設(shè)備據(jù)此改變?cè)O(shè)備狀態(tài);如果驗(yàn)證設(shè)備操作命令非法,則主模塊向設(shè)備控制器返回命令檢測模塊的返回值,設(shè)備當(dāng)前的狀態(tài)不改變。 為使防危核盡可能小并具有通用性和擴(kuò)展性,將含有防危策略的命令檢測模塊以函數(shù)的形式存在于防危策略庫中,當(dāng)防危核需要防危處理時(shí),便到訪問策略庫中調(diào)用此相關(guān)函數(shù)。若設(shè)備改變,則只需向策略庫中添加或修改相應(yīng)設(shè)備的防危策略。另外,防危核作為內(nèi)核模塊,采用內(nèi)核模塊的編寫方式編寫,模塊中只能使用系統(tǒng)調(diào)用函數(shù)。下面定義以交通燈為模型的防危系統(tǒng)的防危策略。
返回值=0;
/*表明經(jīng)防危核驗(yàn)證為正確命令*/
返回值=1;
/*命令經(jīng)防危核直接傳送到模擬設(shè)備而未經(jīng)過安全檢測模塊驗(yàn)證,模擬設(shè)備狀態(tài)根據(jù)此值改變*/
返回值=2;
/*當(dāng)前設(shè)備狀態(tài)驗(yàn)證失敗,失敗原因不明。
措施:模擬設(shè)備保持當(dāng)前狀態(tài)不變*/
返回值=3;
/*同一個(gè)方向有多個(gè)信號(hào)燈同時(shí)開啟。
措施:所有交通燈都關(guān)閉,然后在收到新的命令前設(shè)備執(zhí)行缺省命令序列,此處由模擬設(shè)備接到“3”時(shí)直接處理*/
返回值=4;
/*四個(gè)方向同時(shí)為黃燈或綠燈。
措施:系統(tǒng)恢復(fù)到初始狀態(tài)。在收到新的命令前設(shè)備執(zhí)行缺省狀態(tài)*/
反回值=5;
/*命令驗(yàn)證失敗,失敗原因不明,
措施:模擬設(shè)備保持當(dāng)前狀態(tài)不變*/
返回值=6;
/*信號(hào)燈保持當(dāng)前狀態(tài)的時(shí)間短于最短時(shí)間(<2s),
措施:模擬設(shè)備自動(dòng)延遲(sleep(time))顯示此命令*/
返回值=7;
/*使同一個(gè)方向有多個(gè)信號(hào)燈同時(shí)開啟的信號(hào)燈命令錯(cuò)誤。
措施:不執(zhí)行此命令,保持當(dāng)前信號(hào)燈狀態(tài)*/
返回值=8;
/*命令的執(zhí)行將會(huì)使信號(hào)燈變化的順序不正確。
措施:不執(zhí)行此命令,保持當(dāng)前信號(hào)燈狀態(tài)*/
返回值=9;
/*四個(gè)方面同時(shí)為黃燈或綠燈的命令。
措施:不執(zhí)行此命令,保持不前信號(hào)燈狀態(tài)*/
4.2 模擬設(shè)備模塊
防危核系統(tǒng)中以十字路口交通燈模擬外部設(shè)備。當(dāng)經(jīng)防危驗(yàn)證設(shè)備命令合法時(shí),此模擬接受防危核傳入的真實(shí)設(shè)備命令int realcmd(),并向防危核返回設(shè)備當(dāng)前最新狀態(tài)。用圖形方式形象、直觀地顯示設(shè)備本身的實(shí)時(shí)狀態(tài)(交通燈顏色的變化)、模擬設(shè)備當(dāng)前接收的命令和命令驗(yàn)證結(jié)果(合法或非法命令,對(duì)非法命令顯示出錯(cuò)原因)。
該進(jìn)程中設(shè)有三個(gè)線程,其中第一個(gè)線程專門用于讀管道fifo6(實(shí)時(shí)管道)獲取防危核發(fā)送的控制命令,第二個(gè)線程讀管道m(xù)yfifo(非實(shí)時(shí)管道)獲取命令控制器發(fā)送的設(shè)備控制命令,第三個(gè)線程用tcl/tk腳本語言實(shí)現(xiàn)模擬設(shè)備形象、美觀的圖形顯示功能。當(dāng)模擬設(shè)備啟動(dòng)后,自動(dòng)進(jìn)行初始化并調(diào)用缺省的交通燈控制命令序列完成基本操作,直以有來自設(shè)備控制和防危核的設(shè)備控制命令為止。若交通燈的顯示時(shí)間超過一定時(shí)間,則強(qiáng)制設(shè)備執(zhí)行缺省的設(shè)備狀態(tài)。
4.3 設(shè)備控制器模塊
模擬設(shè)備控制器作為一個(gè)進(jìn)程獨(dú)立運(yùn)行,控制器先從命令文件中獲取命令參數(shù),然后根據(jù)命令的防危等級(jí)分別向模擬設(shè)備和防危核發(fā)送設(shè)備操作命令(包括正常的和不正常的操作命令)。命令中設(shè)置了時(shí)間控制參數(shù),控制器按此時(shí)間間隔值發(fā)送設(shè)備命令。
4.4 設(shè)備命令文件
設(shè)備命令文件中存放了各種對(duì)交通燈的操作命令,包括正常和不正確命令。命令執(zhí)行有三種防危等級(jí)可供選擇:第一種,不通過防危核的命令,操作命令直接由設(shè)備控制器發(fā)送到模擬設(shè)備;第二種,通過防危核并驗(yàn)證其正確性的命令,此時(shí)防危核將調(diào)用防危策略庫的相應(yīng)防危策略驗(yàn)證命令,然后將驗(yàn)證結(jié)果發(fā)送到模擬設(shè)備;第三種,通過防危核但不驗(yàn)證設(shè)備操作的命令,命令被防危核直接送到模擬設(shè)備。設(shè)計(jì)三種等級(jí)命令的目的在于,比較是否使用防危核或是否進(jìn)行命令驗(yàn)證在系統(tǒng)性能和防危性上的差異。
設(shè)備的命令格式為:char sourcecmd="cmd east-light,cmd north-light,cmd west-light,cmd south-light,int time,bool verifiedl,bool verfied2"。操作命令要對(duì)十字路口的12盞交通燈進(jìn)行操作控制。參數(shù)time指本命令相對(duì)于前一條命令延遲多長時(shí)間發(fā)送。參數(shù)verified1=0表示不經(jīng)過防危核驗(yàn)證直接傳送到設(shè)備的命令;verified1=1表示要經(jīng)過防危核驗(yàn)證。verified2=0表示該命令直接發(fā)送到模擬設(shè)備不經(jīng)過防危核的任何處理;verified2=1表示該命令要通過防危核。
struct cmd
{
char first-light-color;
char second-light-color;
char third-light-color;
}
first-light-color,second-light-color,third-light-color表示每個(gè)方向三盞燈的顏色插入相應(yīng)的顏色的圖片。整個(gè)圖形界面形象、美觀。
5 實(shí)驗(yàn)系統(tǒng)的測試評(píng)價(jià)
根據(jù)防危核設(shè)計(jì)要求,從防危核的大小、對(duì)系統(tǒng)實(shí)時(shí)性的影響以及完備性三方面對(duì)本實(shí)驗(yàn)系統(tǒng)進(jìn)行測試。
①防危核大?。悍牢:怂幾g后的目標(biāo)文件為5kb,相對(duì)于rt-linux內(nèi)核源碼是非常小的。
②時(shí)間開銷:將防危核對(duì)控制命令驗(yàn)證所需時(shí)間進(jìn)行了200次測試,得出其平均時(shí)間僅10μs左右,說明防危核對(duì)系統(tǒng)實(shí)時(shí)性影響非常小。
③完備性:將防危核對(duì)第二種控制命令各種情況的防危處理結(jié)果表明,防危核的驗(yàn)證結(jié)果完全正確。說明滿足防危核完備性要求。
以上對(duì)防危核的測試結(jié)果表明,本控制模型完全滿足防危核設(shè)計(jì)要求,防危核機(jī)制完全可以在實(shí)時(shí)操作系統(tǒng)中使用。 結(jié)語
根據(jù)防危核等相關(guān)理論并結(jié)合rt-linux操作系統(tǒng)本身的特色,本文先從理論上分析了在rt-linux中實(shí)現(xiàn)防危核的可行性,然后通過實(shí)際例子實(shí)現(xiàn)了基于rt-linux的防危核,為防危核探索了一種新的實(shí)現(xiàn)途徑。最后,通過對(duì)實(shí)驗(yàn)系統(tǒng)的測試進(jìn)一步證明防危保障機(jī)制在實(shí)時(shí)操作系統(tǒng)中完全可行.
評(píng)論