通常,基于RT-Linux的應(yīng)用程序由兩部分組成:一部分運(yùn)行在Real-Time下,另一部分運(yùn)行在標(biāo)準(zhǔn)的Linux下。運(yùn)行在Real-Time下的任務(wù)是實(shí)時(shí)任務(wù),它作為L(zhǎng)inux的內(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圖形編程語(yǔ)言編程,以友好、形象、直觀的界面模擬防危核對(duì)十字路口交通燈的控制。下面將分別介紹上述資源。
3.1 內(nèi)核模塊加載機(jī)制
Linux提供的可加載內(nèi)核模塊(Module)是Linux內(nèi)核支持的動(dòng)態(tài)可加載模塊,它們是核心的一部分;但是并沒(méi)有編譯到核心里面去,只是一個(gè)目標(biāo)文件,可根據(jù)需要在系統(tǒng)啟動(dòng)后動(dòng)態(tài)地加載或卸載,Linux中大多數(shù)設(shè)備驅(qū)動(dòng)程序或文件系統(tǒng)都做成這樣的模塊。超級(jí)用戶可以通過(guò)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èn)已載入的模塊提供的資源為自己服務(wù)。
3.2 TCL/TK圖形編程語(yǔ)言
本系統(tǒng)中的圖形用戶界面采用TCL/TK圖形編程語(yǔ)言,使界面友好、形象、直觀。TCL是Tool Control Language(工具控制語(yǔ)言)的縮寫。TK是TCL“圖形工具箱”的擴(kuò)展,它提供各種標(biāo)準(zhǔn)的GUL接口,以利于迅速進(jìn)行高級(jí)應(yīng)用程序開(kāi)發(fā)。
TCL/TK是一種解釋執(zhí)行的腳本語(yǔ)言,應(yīng)用中通常將嵌入到C程序中。“小巧、易學(xué)、高效、跨平臺(tái)執(zhí)行”是TCL語(yǔ)言特點(diǎn)的集中體現(xiàn)。實(shí)際上,TCL不僅僅在開(kāi)發(fā)小的應(yīng)用程序上有其快速、可維護(hù)性強(qiáng)等優(yōu)勢(shì),在大型應(yīng)用系統(tǒng)方面,如操作系統(tǒng)及網(wǎng)絡(luò)管理、測(cè)試系統(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í)先通過(guò)命令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í)性。
防危核分為主模塊和命令檢測(cè)模塊。主模塊負(fù)責(zé)接收設(shè)備控制器傳來(lái)的設(shè)備命令和模擬設(shè)備發(fā)送的設(shè)備狀態(tài),然后根據(jù)命令參數(shù)的不同情況進(jìn)行相應(yīng)的處理。
如果用戶要求命令不需要通過(guò)防危核驗(yàn)證,則直接將命令發(fā)送到模擬設(shè)備;如果用戶要求命令通過(guò)防危核驗(yàn)證,則主模塊將調(diào)用命令檢測(cè)模塊進(jìn)行命令的合法性檢測(cè),命令檢測(cè)模塊以函數(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è)備控制器返回命令檢測(cè)模塊的返回值,設(shè)備當(dāng)前的狀態(tài)不改變。
為使防危核盡可能小并具有通用性和擴(kuò)展性,將含有防危策略的命令檢測(cè)模塊以函數(shù)的形式存在于防危策略庫(kù)中,當(dāng)防危核需要防危處理時(shí),便到訪問(wèn)策略庫(kù)中調(diào)用此相關(guān)函數(shù)。若設(shè)備改變,則只需向策略庫(kù)中添加或修改相應(yīng)設(shè)備的防危策略。另外,防危核作為內(nèi)核模塊,采用內(nèi)核模塊的編寫方式編寫,模塊中只能使用系統(tǒng)調(diào)用函數(shù)。
電子發(fā)燒友App






































評(píng)論