關(guān)鍵詞:VxWorks 嵌入式系統(tǒng) 實(shí)時(shí)性 數(shù)據(jù)通信
引言
隨著信息技術(shù)的不斷發(fā)展和更新,嵌入式操作系統(tǒng)以其速率高、穩(wěn)定、可配置內(nèi)核的優(yōu)勢(shì)正得到越來(lái)越廣泛的應(yīng)用,包括醫(yī)學(xué)、圖像處理、軍事、工業(yè)控制、電信等許多領(lǐng)域。嵌入式系統(tǒng)必須采用特殊有效的實(shí)時(shí)操作系統(tǒng),VxWorks正是一個(gè)具有高性能的實(shí)時(shí)操作系統(tǒng),成為嵌入式系統(tǒng)操作內(nèi)核的最佳選擇之一。隨著嵌入式系統(tǒng)在網(wǎng)絡(luò)當(dāng)中的應(yīng)用不斷加強(qiáng),具有多種數(shù)據(jù)通道的復(fù)合通信模式顯得列為必要。本文根據(jù)基于VxWorks的嵌入式系統(tǒng)對(duì)于數(shù)據(jù)通信的不同要求,提出一個(gè)嵌入式系統(tǒng)復(fù)合通信模型,研究幾種具有代表性的數(shù)據(jù)通信方式,并論述在VxWorks下的實(shí)現(xiàn)方法及其一些關(guān)鍵技術(shù)。
1 嵌入式系統(tǒng)復(fù)合通信模型的設(shè)計(jì)
嵌入式系統(tǒng)在控制領(lǐng)域應(yīng)用十分廣泛,例如在工業(yè)控制當(dāng)中常常利用嵌入式系統(tǒng)作為中央控制機(jī),完成信息采集、分系統(tǒng)監(jiān)管、系統(tǒng)決策等等重要功能。硬件往往離不開(kāi)軟件的支持。VxWorks操作系統(tǒng)是目前功能最全的、獨(dú)立于處理器的嵌入式實(shí)時(shí)操作系統(tǒng)之一。考慮如何基于VxWorks實(shí)現(xiàn)嵌入式系統(tǒng)的復(fù)合通信方式是有意義的。由于此時(shí)嵌放式系統(tǒng)已經(jīng)不再是孤立系統(tǒng),而是處于某種拓?fù)渚W(wǎng)絡(luò)結(jié)構(gòu)當(dāng)中,因此,有必采取復(fù)合通信模式以適應(yīng)系統(tǒng)擴(kuò)展、集中控制和遠(yuǎn)程信息傳輸?shù)男枰?刂茩C(jī)應(yīng)當(dāng)具備優(yōu)良的系統(tǒng)總線、可靠的控制網(wǎng)絡(luò)、高速傳輸通道接口以及遠(yuǎn)程數(shù)據(jù)管道。綜合以上考慮,圖1給出了一個(gè)控制機(jī)的復(fù)合通信模型。
控制機(jī)本身采用VME總線標(biāo)準(zhǔn),可以嵌入多塊單板機(jī),具有良好的系統(tǒng)擴(kuò)展性。為了適應(yīng)不同的通信要求,外圍有三種通信接口。其中光纖通信傳輸速率很高,適合作為大流量數(shù)據(jù)通道,例如信號(hào)處理機(jī)數(shù)據(jù)傳輸管道。串口通信設(shè)備簡(jiǎn)單、成本較低,傳輸速率適中且安全性高,可以作為遠(yuǎn)程數(shù)據(jù)通道。以太網(wǎng)則由于其極佳的增容性、穩(wěn)定性,適合于局域網(wǎng)絡(luò)控制體系。
2 復(fù)合通信模式特點(diǎn)分析
為了對(duì)以上復(fù)合通信模型加以說(shuō)明,下面對(duì)片幾種通信模式的特點(diǎn)進(jìn)行分析。
(1)總線標(biāo)準(zhǔn)
目前常用的總線標(biāo)準(zhǔn)有多種,基中VME總線支持多處理器系統(tǒng),最多可以容納21塊插件。地址總線32位,數(shù)據(jù)總線32位,數(shù)據(jù)傳輸速率可以達(dá)到80Mb/s。VME總線能處理7級(jí)中斷,具備高速的實(shí)時(shí)響應(yīng)能力。VME總線采用主-從結(jié)構(gòu),主功能模塊傳輸數(shù)據(jù)之間必須先使用中央仲裁器,也稱(chēng)為系統(tǒng)控制器,具有總線仲裁功能。VME數(shù)據(jù)傳輸總線是高速異步并行的,模塊間數(shù)據(jù)傳輸是通過(guò)連鎖的握手信號(hào)實(shí)現(xiàn)的。具有高可靠性,同時(shí)其模板結(jié)構(gòu)具有良好的抗震性,適應(yīng)較為惡劣的工作環(huán)境[1]。
(2)控制網(wǎng)絡(luò)
控制網(wǎng)絡(luò)一般采用局域網(wǎng)。由于TCP/IP協(xié)議是一個(gè)標(biāo)準(zhǔn)的企業(yè)網(wǎng)絡(luò)協(xié)議,是比較完善的、公認(rèn)的最有效的互聯(lián)協(xié)議,因此目前流行的操作系統(tǒng)都支持TCP/IP協(xié)議,TCP/IP協(xié)議還是個(gè)穩(wěn)定的、對(duì)稱(chēng)的、支持交叉平臺(tái)的Client/Server方式的結(jié)構(gòu),并為應(yīng)用程序提供了標(biāo)準(zhǔn)接口,對(duì)于集中控制的嵌入式系統(tǒng)采用基于TCP/IP的網(wǎng)絡(luò)通信無(wú)疑是方便而且有效的。
(3)高速數(shù)據(jù)接口
目前來(lái)看,光纖通道作為高速數(shù)據(jù)通信是最為有利的。它是一種利用光纖(苦口婆心銅纜)作為物理鏈路的高性能串行數(shù)據(jù)接口,支持SCSI、IP等上層數(shù)據(jù)傳輸協(xié)議,具有可靠性高、速度快和傳輸距離的特點(diǎn),可用來(lái)連接大型機(jī)、服務(wù)器和存儲(chǔ)設(shè)備以實(shí)現(xiàn)高速大容量的信息傳輸。對(duì)于分離的嵌入式硬件系統(tǒng)而言,采用光纖通道作為高速I(mǎi)/O數(shù)據(jù)接口無(wú)疑是一種很好的選擇。
(4)遠(yuǎn)程數(shù)據(jù)通道
由于控制機(jī)的遠(yuǎn)程數(shù)據(jù)傳輸需要較高的安全性,同時(shí)一般只需單路傳輸,如果使用光纖電纜顯示成本高而且不需要那么高傳輸?shù)膸挘虼丝梢钥紤]使用串行口通信。串行口在嵌入式系統(tǒng)當(dāng)中是一類(lèi)重要的數(shù)據(jù)通信接口。由于RS-422標(biāo)準(zhǔn)串行口通信采用了雙線傳輸,大大增加了抗共模干擾的能力,最大數(shù)據(jù)傳輸速度可以達(dá)到10Mb/s,這對(duì)于遠(yuǎn)程數(shù)據(jù)交換具有極大的優(yōu)勢(shì),因此可用于遠(yuǎn)程信息交換。
3 復(fù)合通信方式的實(shí)現(xiàn)與關(guān)鍵技術(shù)
由于本文的討論與單板機(jī)生產(chǎn)商所提供的板級(jí)支持包有關(guān),而不同類(lèi)型的單板機(jī)所提供的板級(jí)支持包(BSP、ESP)也會(huì)略有不同,為了不失一般性同時(shí)具有一定先進(jìn)性,本文采用英國(guó)Radstone公司生產(chǎn)的PPCx系列單板機(jī)作示例。PPCx系列單板機(jī)功能集成度高、擴(kuò)展性強(qiáng)、性能穩(wěn)定,可以添加多種外圍存儲(chǔ)設(shè)備、支持高分辨顯示,是一種理想的單板機(jī)系統(tǒng)。
3.1 基于VME總線的DMA通信方式
在VME總線上,每個(gè)單板機(jī)如果要訪問(wèn)其它單板機(jī)的RAM,必須通信VME總線地址映射。因此,每塊板上有兩個(gè)地址譯碼器,一個(gè)用于VME總線地址→本地地址譯碼,而另一個(gè)用于本地地址→VME總線地址譯碼,這樣就會(huì)存在多個(gè)不同的存儲(chǔ)器地址映射。如果想要訪問(wèn)某個(gè)單板機(jī)的RAM,需要知道該單板機(jī)的RAM本地址所映射成的VME總線地址,然后通過(guò)訪問(wèn)VME總線地址映射到自身的本地地址而訪問(wèn)到系統(tǒng)控制器,甚至可以將其看成自身的RAM地址。多處理器地址映射關(guān)系如圖2所示。
綜上所述,對(duì)于某一VME總線中的任務(wù)一塊板而言,只要獲得了它的本地地址到VME總線地址的映射關(guān)系,就可以從板外來(lái)訪問(wèn)該板的RAM。VxWorks標(biāo)準(zhǔn)函數(shù)庫(kù)sysLib當(dāng)中提供了函數(shù)sysLocaltoBusAddr(),可以直接獲得本地地址的VME總線地址。這樣,當(dāng)前主機(jī)只需調(diào)用該函數(shù)獲得自身RAM地址到VME地址映射,其它的主機(jī)就可以根據(jù)該映射得到的VME總線地址訪問(wèn)該主機(jī)。因此,當(dāng)需要對(duì)于外板的某些控制寄存器進(jìn)行位元操作的進(jìn)修,這種方法就顯得尤其重要:因?yàn)橥鶝](méi)有函數(shù)能夠僅僅對(duì)于外板RAM的某個(gè)字節(jié)進(jìn)行操作,更無(wú)法定位到位操作。
為了進(jìn)一步提高數(shù)據(jù)傳輸速率,可使用PPC4A上的VME控制芯片Tundra中集成的DMA控制器。它支持基于VME總線的DMA數(shù)據(jù)傳輸方式,而DMA是外存數(shù)據(jù)傳輸最有效的一種方式。具體步驟如下:
①安裝DMA驅(qū)動(dòng)程序,調(diào)用函數(shù)dmaDrv();
②建立DMA設(shè)備,調(diào)用函數(shù)dmaDevCreate();
③打開(kāi)DMA進(jìn)行讀寫(xiě),調(diào)用函數(shù)open()、write()、read()。
DMA設(shè)備句柄就是一個(gè)類(lèi)似于文件指針的數(shù)據(jù)類(lèi)型,所以可以像一個(gè)標(biāo)準(zhǔn)數(shù)據(jù)操作來(lái)對(duì)待。開(kāi)啟設(shè)備后即可調(diào)用文件讀寫(xiě)標(biāo)準(zhǔn)函數(shù)進(jìn)行讀寫(xiě)操作。通過(guò)較為嚴(yán)格的測(cè)試,DMA數(shù)據(jù)傳輸速率可以達(dá)到40Mb/s以上,并且不發(fā)生數(shù)據(jù)傳輸錯(cuò)誤。
為了保證主機(jī)對(duì)于其它主機(jī)DMA傳輸數(shù)據(jù)的實(shí)時(shí)響應(yīng),應(yīng)當(dāng)產(chǎn)生VME總線中斷信號(hào)通知該主機(jī)。當(dāng)某個(gè)主機(jī)發(fā)送數(shù)據(jù)完畢后,須調(diào)用VxWorks提供的函數(shù)sysBusIntGen ()t向VME總線產(chǎn)生一個(gè)級(jí)別為intLevel、中斷號(hào)為intNum的中斷信號(hào)。
接收端主機(jī)事先建立一個(gè)與該級(jí)別中斷信號(hào)對(duì)應(yīng)的客戶中斷服務(wù)程序,并將該客戶中斷服務(wù)程序鏈接到所要求級(jí)別的中斷號(hào)上,從而實(shí)現(xiàn)對(duì)其進(jìn)行實(shí)時(shí)響應(yīng)。當(dāng)主機(jī)接收到屬于自己的中斷信號(hào)后,會(huì)立刻自動(dòng)調(diào)用該中斷服務(wù)程序。這時(shí)可利用中斷服務(wù)程序釋放一個(gè)信號(hào)燈,通過(guò)該信號(hào)燈驅(qū)動(dòng)相應(yīng)的數(shù)據(jù)處理模塊,從而實(shí)現(xiàn)實(shí)時(shí)操作。如下面的全程:
/*客戶中斷服務(wù)程序*/
void intHdlr(SEM_ID semId)
void intHdlr(SEM_ID semId)
{
/*釋放信號(hào)燈*/
semGive(semId);
}
/*等待信號(hào)燈的處理模塊*/
void processsModle(void)
{
/*等待信號(hào)燈*/
semTake(semld);
/*處理模塊代碼*/
…
}
VME總線共有7個(gè)中斷級(jí)別,排除系統(tǒng)使用的中斷號(hào),客戶自定義中斷號(hào)可從18設(shè)置到32。這樣能夠?yàn)樽銐蚨嗟闹鳈C(jī)設(shè)置中斷服務(wù)程序,從而實(shí)現(xiàn)VxWorks操作系統(tǒng)下的多主機(jī)VME總線實(shí)時(shí)高速通信。
3.2 串行口通信
在VxWorks中,將I/O系統(tǒng)設(shè)計(jì)成為任何類(lèi)型的設(shè)備提供一個(gè)簡(jiǎn)單、統(tǒng)一、獨(dú)立于設(shè)備的接口,所以串行口通信軟件的設(shè)計(jì)和VME通信具有相似之處。在VxWorks中,任何對(duì)于串行口的操作仍然可以視為對(duì)一個(gè)文件的操作,而不必了解關(guān)于設(shè)備或程序驅(qū)動(dòng)實(shí)現(xiàn)的細(xì)節(jié)。在串行口通信軟件的設(shè)計(jì)不中,利用RRCx的增強(qiáng)軟件包ESP可對(duì)驅(qū)動(dòng)成功后的串行口設(shè)備進(jìn)行操作。系統(tǒng)首先調(diào)用ESP軟件提供的esccDrv()安裝串行驅(qū)動(dòng)程序,隨后調(diào)用esccDevCreate()將指定的串口設(shè)備添加到系統(tǒng)中,當(dāng)串口初始化完成后,與DMA操作方式類(lèi)似,在使用之前利用open()打開(kāi)相應(yīng)串口,依據(jù)串口打開(kāi)時(shí)的讀寫(xiě)標(biāo)志,調(diào)用函數(shù)write()、read()對(duì)串口進(jìn)行只讀操作、只寫(xiě)操作或同時(shí)進(jìn)行讀寫(xiě)操作。
對(duì)于串口通信,仍然要關(guān)心數(shù)據(jù)接收的實(shí)時(shí)性。可采用中斷方式,利用VxWorks提供的select函數(shù)的事件觸發(fā)機(jī)制,將讀串口的任務(wù)阻塞使其一直等待數(shù)據(jù),當(dāng)有數(shù)據(jù)來(lái)到的時(shí)候該任務(wù)會(huì)立刻自動(dòng)響應(yīng),提高系統(tǒng)的實(shí)時(shí)性。
3.3 基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信
網(wǎng)絡(luò)通信一般可通過(guò)套接口(socket)實(shí)現(xiàn)。VxWorks提供了標(biāo)準(zhǔn)的BSD socket調(diào)用,具有兩種類(lèi)型:Stream socket(全雙工流類(lèi)型)、Datagram sockets(數(shù)據(jù)攝類(lèi)型)。前者支持TCP協(xié)議,后者支持UDP協(xié)議。任何一個(gè)任務(wù)都可以打開(kāi)一或多個(gè)socket,其它任務(wù)的socket可與之連接。客戶端程序首先調(diào)用socket()個(gè)函數(shù)產(chǎn)生用于與各分系統(tǒng)連接的套接口,并為每個(gè)套接口返回一個(gè)ID號(hào),然后初始化一個(gè)套接口結(jié)構(gòu)體,為其賦上該ID號(hào)以及服務(wù)端的IP地址和端口號(hào),并將具作為函數(shù)connect()的參數(shù),調(diào)用connect()函數(shù)主動(dòng)去連接客戶端。服務(wù)端則需調(diào)用bind()函數(shù)將自身IP和端口號(hào)綁定,以保證客戶端正確識(shí)別。為了確保服務(wù)器能夠?qū)崟r(shí)接收客戶端的數(shù)據(jù),當(dāng)服務(wù)端與客戶端建立連接之后,必須嵌入循環(huán),利用read()語(yǔ)句不斷等待客戶數(shù)據(jù)。同時(shí)客戶端每次發(fā)送數(shù)據(jù)之后也應(yīng)等待服務(wù)端回復(fù),建立握手機(jī)制。一個(gè)完整的socket網(wǎng)絡(luò)應(yīng)該可以用圖3來(lái)描述。值得指出的是,read調(diào)用具有一個(gè)PEEK選項(xiàng),即向接收緩沖區(qū)探測(cè)是否有數(shù)據(jù)而并不真正取出數(shù)據(jù),根據(jù)它的返回值可以判斷出網(wǎng)絡(luò)的狀態(tài)。這個(gè)功能適用于網(wǎng)絡(luò)查錯(cuò)。
3.4 光纖通道
由于光纖通道(fibre channel)接口并非VxWorks自身具備的組件,因此,VxWorks內(nèi)核上實(shí)現(xiàn)光纖通信也需要加載相關(guān)的驅(qū)動(dòng)程序;同時(shí),主機(jī)也需安裝光纖通信適配器,然后通過(guò)光纖電纜連接。下面仍以PPCx系列單板機(jī)為例來(lái)說(shuō)明。
這里采用QLA2200作為光纖通道適栩器。QLA2200/66是Qlogic公司生產(chǎn)的、目前應(yīng)用最為廣泛的光纖通道適配器。它主要包括四個(gè)功能模塊:高速RISC處理器,包括千兆位收發(fā)模塊、通道控制、幀緩存等的FC接口,有三個(gè)通道PCI總線DMA控制器以及ISP2200A的外存儲(chǔ)器。RRCx的ESP為該適配器QLA2200提供了驅(qū)動(dòng)程序,支持基于交換機(jī)、仲裁環(huán)以及點(diǎn)對(duì)點(diǎn)等三種拓?fù)浣Y(jié)構(gòu)的SCSI、IP和低開(kāi)銷(xiāo)訪問(wèn)(LLA)協(xié)議,其固件協(xié)議層結(jié)構(gòu)如圖4所示。
當(dāng)VxWorks啟動(dòng)之后,需要調(diào)用QLA2200的初始化函數(shù)ql22Init(),該函數(shù)的功能是驅(qū)動(dòng)PPCx主板上QLA2200的PCI板卡,包括SCSI、IP固件協(xié)議初始化。此時(shí),可在光纖通道上建立基于SCSI或IP協(xié)議的數(shù)據(jù)通信模式;而LLA實(shí)際上一種不具備協(xié)議管理的點(diǎn)對(duì)點(diǎn)通信模式,可節(jié)約大量系統(tǒng)開(kāi)銷(xiāo),故稱(chēng)之為低開(kāi)銷(xiāo)方式。它可以建立一種類(lèi)似于服務(wù)器/客戶機(jī)的通信機(jī)制,即服務(wù)端可以實(shí)時(shí)響應(yīng)客戶端的數(shù)據(jù)請(qǐng)求,但它同樣缺乏握手安全機(jī)制。因此,如果客戶端連續(xù)發(fā)送兩次大批量數(shù)據(jù),將會(huì)由于服務(wù)器來(lái)不及接收導(dǎo)致該兩批數(shù)據(jù)首尾發(fā)生沖突,故需加以改進(jìn)。LLA的服務(wù)器/客戶機(jī)通信機(jī)制是通過(guò)調(diào)用函數(shù)ql22laHookAttach()在服務(wù)端設(shè)備一個(gè)掛鉤函數(shù)來(lái)實(shí)現(xiàn)的。每當(dāng)客戶端向服務(wù)端發(fā)送數(shù)據(jù),該掛鉤函數(shù)將會(huì)立刻自動(dòng)響應(yīng),因此,可以在掛鉤函數(shù)當(dāng)設(shè)置VxWorks消息隊(duì)列,將接收幀緩存區(qū)中的數(shù)據(jù)取出。如下面的程序:
BOOL ql22LlaClientInputHook()
{…
/*將緩存區(qū)數(shù)據(jù)發(fā)送到服務(wù)端本地消息隊(duì)列當(dāng)中去*/
msgQsend(ServerQueue,ClientData,Length,NO_WAIT,0);
}
采用消息隊(duì)列接收數(shù)據(jù)則是由于它具有消息自動(dòng)追加功能,可以保證數(shù)據(jù)在高速拷貝時(shí)不被覆蓋。當(dāng)傳輸完畢后,服務(wù)端就可以將消息隊(duì)列當(dāng)中的數(shù)據(jù)取出來(lái)進(jìn)一步處理。客戶端則應(yīng)當(dāng)在每次發(fā)送數(shù)據(jù)完畢之后等待服務(wù)端的回答,首到得到確認(rèn)之后才可以進(jìn)行下一步發(fā)送。因此,客戶端必須設(shè)備回復(fù)等待,這可以利用信號(hào)燈來(lái)實(shí)現(xiàn)。LLA具有很高的傳輸速率。根據(jù)測(cè)試,在實(shí)施了握手通信機(jī)制后,傳輸速率可達(dá)50Mb/s以上,而且實(shí)現(xiàn),系統(tǒng)開(kāi)銷(xiāo)很小,適應(yīng)于點(diǎn)對(duì)點(diǎn)的主機(jī)高速通信。
4 結(jié)論
本嵌入式系統(tǒng)復(fù)合通信模式具有多種通信接口,可適應(yīng)不同的數(shù)據(jù)通信需要。同時(shí),由于VxWorks高效的實(shí)時(shí)性以及強(qiáng)大的兼容性,使得復(fù)合通信的實(shí)現(xiàn)變得更加容易并且具有良好的實(shí)時(shí)性和安全性。通過(guò)實(shí)際運(yùn)行,系統(tǒng)內(nèi)部各個(gè)模塊運(yùn)行穩(wěn)定,軟件的模塊實(shí)時(shí)調(diào)度表示良好,經(jīng)長(zhǎng)時(shí)間的運(yùn)行未發(fā)現(xiàn)通信阻塞。該復(fù)合通信模式可適用于工業(yè)控制、醫(yī)療等多方面,具有廣泛的適應(yīng)性。
來(lái)源:[http://www.jdzj.com]機(jī)電之家·機(jī)電行業(yè)電子商務(wù)平臺(tái)!
]]>Mimer Information Technology announced the availability of its Mimer SQL Embedded database management system (DBMS) for Wind River’s VxWorks real-time operating system. Mimer SQL Embedded for VxWorks combines a full function enterprise class DBMS with a hard real-time data management extension with predictable and deterministic response times. This makes it possible to develop advanced hard real-time applications for process industry, automotive and consumer devices with access to the full SQL feature set.
Mimer Information Technology is a new member of Wind River’s partner program, and is now ready to launch the Mimer SQL Embedded product for Wind River’s VxWorks real-time operating system. Mimer SQL Embedded is a small footprint relational DBMS for embedded devices and appliances. Despite its small footprint, Mimer SQL Embedded is multi-user with full standard SQL support including features like stored procedures and triggers. Mimer SQL Embedded’s well-proven, efficient and self-tuning DBMS kernel gives a zero maintenance run-time environment, reduces the time-to-market for embedded solutions and enables software component reuse.
Mimer SQL Embedded for VxWorks is extended with Mimer SQL Real-Time that combines predictable hard real-time and non-real-time database access. Mimer SQL Real-Time allows data management in embedded real-time applications to be taken to a higher level while still maintaining real-time predictability and fine-grained control.
Mimer SQL Embedded highlights:
“We see Wind River’s VxWorks as an important platform for Mimer with many new business opportunities for us, since this is a platform widely used by the automotive, process-control and robotic industry with a growing need for enterprise class DBMS functionality with hard real-time data access”, says Stefan Eck, Marketing Director, Mimer Information Technology. “We’re also looking forward to establish a close relationship with Wind River and its partners”, concludes Stefan Eck.
Mimer SQL Embedded and Mimer SQL Real-Time are available for VxWorks 5 and 6.
“We welcome Mimer as a Wind River partner and are very pleased with that they now make their Mimer SQL database technology available for VxWorks”, says Warren Kurisu, senior director of product management, Wind River. “Mimer’s small, real-time attributes nicely complement those of VxWorks, and will meet the needs of many of our customers.
在講述BSP的移植之前,先討論一下Vxworks的啟動(dòng)過(guò)程:
在ARM系統(tǒng)中,系統(tǒng)上電后會(huì)自動(dòng)加載并運(yùn)行位于0地址的指令,通常在這個(gè)地方會(huì)放置一條跳轉(zhuǎn)指令,使它跳轉(zhuǎn)到_romInit()(初始化的入口)
romInit()進(jìn)行處理器模式的設(shè)置,關(guān)閉中斷,初始化內(nèi)存以及一些必要的硬件配置.
romInit()執(zhí)行完上述工作以后,跳轉(zhuǎn)到romStart(),它負(fù)責(zé)將ROM映像copy到RAM中,如果ROM映像中不含Vxworks內(nèi)核,那么啟動(dòng)代碼要負(fù)責(zé)將
Vxworks內(nèi)核加載到RAM中去.接下來(lái)要開(kāi)始運(yùn)行Vxworks內(nèi)核的入口程序sysInit(),它主要實(shí)現(xiàn)一些與romInit()類(lèi)似的功能,然后還是調(diào)用
Vxworks內(nèi)核的第一個(gè)例程usrInit(),usrInit()會(huì)根據(jù)BSP的設(shè)置,最終完成整個(gè)內(nèi)核的前期初始化工作.在usrInit最后,由kernelInit()激
活多任務(wù)環(huán)境,并創(chuàng)建一個(gè)任務(wù)來(lái)安裝設(shè)備驅(qū)動(dòng)程序.同時(shí)啟動(dòng)設(shè)備,初始化Vxworks系統(tǒng)庫(kù),調(diào)用應(yīng)用程序.
VxWorks_BSP移植_2
icepeak 發(fā)表于 2006-5-29 8:49:00
弄清楚VxWorks啟動(dòng)的順序后,我們來(lái)討論BSP的移植,VxWorks的BSP在先前的日志中已經(jīng)有說(shuō)明,大家可以查閱了解它和bootloader的區(qū)別和
聯(lián)系.
不同的Target的BSP都不同,同種CPU的不同板子也會(huì)不同,所以移植修改是不可避免的,我們可以參考$(WIND_BASE)\target\config下的BSP
文件,找一個(gè)比較接近的來(lái)修改!關(guān)于這個(gè)目錄的組織結(jié)構(gòu),網(wǎng)上有很多介紹,這里不贅述.
首先要重點(diǎn)修改的就是Makefilie文件和config.h文件,這兩個(gè)文件跟目標(biāo)板的硬件配置有很大的關(guān)系,主要是CPU類(lèi)型,內(nèi)存的大小和目標(biāo)板
的外圍設(shè)備的配置情況.關(guān)于這兩個(gè)文件的修改下次會(huì)詳細(xì)注釋!
1 嵌入式系統(tǒng)
嵌入式系統(tǒng)是以嵌入式計(jì)算機(jī)為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的,適用于對(duì)功能、可靠性、成本、體積、功耗等綜合性嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。和通用計(jì)算機(jī)不同,嵌入式系統(tǒng)是針對(duì)具體應(yīng)用的專(zhuān)用系統(tǒng),目的就是要把一切變得更簡(jiǎn)單、更方便、更普遍、更適用;它的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣、去除冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能。
嵌入式系統(tǒng)主要由嵌入式處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及特定的應(yīng)用程序等四部分組成,是集軟硬件于一體的可獨(dú)立工作的“器件”;用于實(shí)現(xiàn)對(duì)其它設(shè)備的控制、監(jiān)視或管理等功能。
嵌入式系統(tǒng)應(yīng)具有的特點(diǎn)是:要求高可靠性;在惡劣的環(huán)境或突然斷電的情況下,要求系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實(shí)時(shí)處理能力,這就要求嵌入式操作系統(tǒng)(EOS)具有實(shí)時(shí)處理能力;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲(chǔ)器中或閃存中,也就是說(shuō)軟件要求固態(tài)化存儲(chǔ),而不是存儲(chǔ)在磁盤(pán)等載體中。
2 設(shè)備驅(qū)動(dòng)程序
Vxworks5.4中驅(qū)動(dòng)程序主要分為三種:字符、塊以及網(wǎng)絡(luò)驅(qū)動(dòng)程序。本文所介紹的網(wǎng)卡驅(qū)動(dòng)程序則屬于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。
2.1 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
網(wǎng)絡(luò)的各功能部件圖1所示,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是處理硬件和上層協(xié)議之間的接口程序。網(wǎng)絡(luò)傳輸協(xié)議層分發(fā)數(shù)據(jù)在應(yīng)用程序接口和網(wǎng)絡(luò)接口之間。網(wǎng)絡(luò)化網(wǎng)絡(luò)協(xié)議(如IP協(xié)議)發(fā)送數(shù)據(jù)在網(wǎng)絡(luò)主機(jī)之間。連接/接口層使能主機(jī)隸屬于硬件到相同物理媒質(zhì)的通信。
在Vxworks5.4中,網(wǎng)卡驅(qū)動(dòng)程序又分為END(Enhanced Network Driver)和BSD兩種。它們分別處于如圖2所示結(jié)構(gòu)中。
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">2.1.1 BSD驅(qū)動(dòng)程序設(shè)計(jì)
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">在Vxworks5.4中,網(wǎng)絡(luò)驅(qū)動(dòng)程序都是基于BSD UNIX版本4.3基礎(chǔ)上的,這些驅(qū)動(dòng)程序都定義在一個(gè)全局例程中,那就是attach子程序,xxattach( )子程序中包含5個(gè)函數(shù)指針,它們都被映射到ifnet結(jié)構(gòu)中,這5個(gè)函數(shù)可見(jiàn)表1,它們?cè)贗P協(xié)議層任何地方被調(diào)用。
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">表1 網(wǎng)絡(luò)接口處理
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
驅(qū)動(dòng)程序指定函數(shù) |
函數(shù)指針 |
功能 |
xxInit( ) |
if_init |
初始化接口 |
xxOutput( ) |
if_output |
對(duì)要傳輸?shù)妮敵龇纸M進(jìn)行排隊(duì) |
xxIoctl( ) |
if_ioctl |
處理I/O控制命令 |
xxReset( ) |
if_reset |
復(fù)位接口設(shè)備 |
xxWatchdog( ) |
if_watchdog (optional) |
周期性接口例程 |
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">驅(qū)動(dòng)程序入口xxattach( )調(diào)用ether_attach( )來(lái)把上述5個(gè)函數(shù)映射到ifnet結(jié)構(gòu)中,ether_attach( )調(diào)用如下:
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">ether_attach(
(IFNET *) & pDrvCtrl->idr,
unit,
"xx",
(FUNCPTR) NULL,
(FUNCPTR) xxIoctl,
(FUNCPTR) ether_output( ), /* generic ether_output */
(FUNCPTR) xxReset
);
pDrvCtrl->idr.ac_if.if_start = (FUNCPTR)xxTxStartup;
上述參數(shù)中,需要一個(gè)接口數(shù)據(jù)記錄(INTERFACE Data Record (idr)),unit號(hào)和設(shè)備名,下面四個(gè)參數(shù)就是相關(guān)驅(qū)動(dòng)程序的函數(shù)指針。第一個(gè)函數(shù)指針指的是init( )例程,這個(gè)例程可要可不要,第二個(gè)函數(shù)指針指的是ioctl( )接口,它允許上層來(lái)控制設(shè)備狀態(tài);第三個(gè)函數(shù)指針指的是把數(shù)據(jù)包送到物理層;最后一個(gè)函數(shù)指針指的是如果TCP/IP堆棧決定需要復(fù)位的話,它就復(fù)位這個(gè)設(shè)備。
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">接著下面那一句代碼表示添加數(shù)據(jù)傳輸例程到IDR,ether_output( )例程被調(diào)用后,傳輸開(kāi)始例程就被TCP/IP協(xié)議堆棧調(diào)用。
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">在這個(gè)入口驅(qū)動(dòng)程序中還包括設(shè)備的初始化、發(fā)送和接收描述符的初始化等。
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">2.1.2 END驅(qū)動(dòng)程序設(shè)計(jì)
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">END驅(qū)動(dòng)程序是基于MUX模式,網(wǎng)絡(luò)驅(qū)動(dòng)程序被劃分為協(xié)議組件和硬件組件。MUX數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間的接口,它管理網(wǎng)絡(luò)協(xié)議接口和低層硬件接口之間的交互;將硬件從網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)中隔離出來(lái);刪除使用輸入鉤例程來(lái)過(guò)濾接收從協(xié)議來(lái)的數(shù)據(jù)包,和刪除了使用輸出鉤例程來(lái)過(guò)濾協(xié)議包的發(fā)送;并且鏈路層上的驅(qū)動(dòng)程序需要訪問(wèn)網(wǎng)絡(luò)層(IP或其他協(xié)議)時(shí),也會(huì)調(diào)用相關(guān)的MUX例程。值得注意的是,網(wǎng)絡(luò)層協(xié)議和數(shù)據(jù)鏈路層驅(qū)動(dòng)程序不能直接通訊,它們必須通過(guò)MUX。如圖3所示:
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">
2.3將驅(qū)動(dòng)程序加載到Vxworks系統(tǒng)中
要對(duì)所設(shè)計(jì)的驅(qū)動(dòng)程序進(jìn)行測(cè)試,首先就必須把驅(qū)動(dòng)程序加載到Vxworks IMAGE中,并且給設(shè)備分配一個(gè)IP,這樣才能有利于網(wǎng)間測(cè)試。
首先,修改configNet.h文件,添加如下代碼:
#ifdef INCLUDE_DM_9102_END
#define DM_9102_BUFF_LOAN_0 1
#define DM_9102_LOAD_FUNC sysDm9102EndLoad
#define DM_9102_LOAD_STR_0 ""
IMPORT END_OBJ * DM_9102_LOAD_FUNC (CHAR *, void *);
和END_TBL_ENTRY endDevTbl [] 中添加
#ifdef INCLUDE_DM_9102_END
{0, DM_9102_LOAD_FUNC, DM_9102_LOAD_STR_0, TRUE, NULL, FALSE},
#endif /* INCLUDE_DM_9102_END */
其次,編輯config.h文件,添加如下代碼:
#define INCLUDE_DM_9102_END /* DAVICOM 9102 FAST ETHERNET CONTROLLER */
最后,編輯sysLib.c文件,添加如下代碼:
/* include dm9102 End driver SUPPORT routines */
#ifdef INCLUDE_DM_9102_END
IMPORT STATUS sysDm9102PciInit (void);
#endif /* INCLUDE_DM_9102_END */
/* include dm9102End driver SUPPORT routines */
#ifdef INCLUDE_DM_9102_END
#include "sysDm9102End.c"
#endif /* INCLUDE_DM_9102_END */
#ifdef INCLUDE_DM_9102_END
sysDm9102PciInit ();
#endif /* INCLUDE_DM_9102_END */
通過(guò)上述過(guò)程相應(yīng)的添加程序,然后重新編譯Vxworks,這樣就將所設(shè)計(jì)的網(wǎng)卡驅(qū)動(dòng)程序添加到Vxworks內(nèi)核中了。
2.4 PCI設(shè)備檢測(cè)
如果所設(shè)計(jì)的網(wǎng)卡是基于PCI總線的,那么在程序開(kāi)始就需要對(duì)PCI設(shè)備進(jìn)行檢測(cè),在Vxworks5.4中有專(zhuān)門(mén)的PCI函數(shù)來(lái)檢測(cè)設(shè)備的總線號(hào)、設(shè)備號(hào)和功能號(hào)。首先利用pciFindDevice( )函數(shù)對(duì)給定VendorID和DeviceID的設(shè)備進(jìn)行檢測(cè),檢測(cè)完后同時(shí)給出了設(shè)備的總線號(hào)、設(shè)備號(hào)和功能號(hào);接下來(lái)就是獲得該設(shè)備的中斷號(hào)、基地址(包括IO和內(nèi)存)。Vxworks中pciConfigLib.h文件中定義PCI總線的常量。如中斷號(hào):PCI_CFG_BRG_INT_LINE,IO基地址:PCI_CFG_BASE_ADDRESS_0,內(nèi)存基地址:PCI_CFG_BASE_ADDRESS_1等等。所以利用函數(shù)pciConfigInByte和pciConfigInLong就可以很容易地獲得設(shè)備的中斷號(hào)和基地址。
2.5 調(diào)試方法
為了方便調(diào)試網(wǎng)卡驅(qū)動(dòng)程序,推薦利用串口對(duì)程序進(jìn)行下載并將Vxworks image拷貝到軟盤(pán)中以從軟盤(pán)來(lái)加載它。調(diào)試的時(shí)候首先應(yīng)該給網(wǎng)卡分配一個(gè)IP(利用usrNetIfConfig函數(shù)),然后利用ping來(lái)對(duì)網(wǎng)卡進(jìn)行測(cè)試。
3 結(jié)語(yǔ)
利用上述方法所設(shè)計(jì)的網(wǎng)卡后,不久可以利用它來(lái)進(jìn)行程序下載,而且能滿足網(wǎng)卡所有的功能,包括對(duì)TCP/IP和UDP/IP(組播、廣播和單播)進(jìn)行了測(cè)試。
? MPC8541E嵌入計(jì)算機(jī)板
? MPC8560嵌入計(jì)算機(jī)板
? PowerPC開(kāi)發(fā)板系列
- PowerPC405EP開(kāi)發(fā)板
- PowerPC8245開(kāi)發(fā)板
- PowerPC8247開(kāi)發(fā)板
- PowerPC8280開(kāi)發(fā)板
- PowerPC8349開(kāi)發(fā)板
? 定制的PowerPC嵌入計(jì)算機(jī)板卡 如下:
- PowerPC405EP嵌入計(jì)算機(jī)板
- PowerPC405GPr嵌入計(jì)算機(jī)板
- PowerPC440GX嵌入計(jì)算機(jī)板
- MPC8260嵌入計(jì)算機(jī)板
- MPC8349嵌入計(jì)算機(jī)板
- MPC8536嵌入計(jì)算機(jī)板
- MPC8641D嵌入計(jì)算機(jī)板
- MPC7448嵌入式計(jì)算機(jī)板
- 1394接口協(xié)議棧for VxWorks
- USB2.0接口協(xié)議棧for VxWorks
- PATA接口硬盤(pán)存儲(chǔ)協(xié)議棧for VxWorks
- SATA接口硬盤(pán)存儲(chǔ)協(xié)議棧for VxWorks
- 高性能網(wǎng)絡(luò)協(xié)議棧for VxWorks
- 聲卡設(shè)備驅(qū)動(dòng)for VxWorks
- PowerPC在線配置FPGA方案for VxWorks
- 集成數(shù)據(jù)I/O與FPGA的PowerPC嵌入式系統(tǒng)for VxWorks
? 應(yīng)用于汽車(chē)電子的PowerPC嵌入式系統(tǒng)技術(shù)開(kāi)發(fā)
- 汽車(chē)電子OSEK/VDX嵌入式系統(tǒng)產(chǎn)品
- MPC5500 MPC5534 MPC5561等MPC55xx系列嵌入式電控板
IEC60870-5-104規(guī)定控制站(即配電主站)作為客戶機(jī),而被控站(即配電子站)作為服務(wù)器。
基于網(wǎng)絡(luò)的IEC60870-5-104規(guī)約通信報(bào)文格式:I格式-可計(jì)數(shù)的信息傳輸功能;S格式-可計(jì)數(shù)的確認(rèn)功能;U格式-啟動(dòng),停止,測(cè)試功能。
通信流程圖如圖2所示。
圖2 IEC60870-5-104規(guī)約通信流程圖
3.4 BSP開(kāi)發(fā)
BSP是針對(duì)具體的硬件平臺(tái),用戶所編寫(xiě)的啟動(dòng)代碼和部分設(shè)備驅(qū)動(dòng)程序的集合。BSP所實(shí)現(xiàn)的功能包括初始化和驅(qū)動(dòng)部分設(shè)備。BSP需要支持處理器復(fù)位、初始化、驅(qū)動(dòng)串口和必要的時(shí)鐘處理等。
3.5 功能實(shí)現(xiàn)
從配電終端讀取數(shù)據(jù):配電終端裝置通過(guò)CAN2.0B規(guī)約將YC、YX量等數(shù)據(jù)傳送至配電子站,并將數(shù)據(jù)填入已開(kāi)辟的緩沖區(qū)。使用緩沖區(qū)操作使得系統(tǒng)對(duì)底層驅(qū)動(dòng)程序的調(diào)用機(jī)會(huì)大大減少,將大量的數(shù)據(jù)實(shí)時(shí)的保存下來(lái),以便于查詢和轉(zhuǎn)發(fā)。
轉(zhuǎn)發(fā)緩沖區(qū)數(shù)據(jù):配電子站需要將從配電終端裝置獲取的數(shù)據(jù)有選擇地轉(zhuǎn)發(fā)到配電主站上去,或者接受配電主站有選擇的查詢。遙測(cè)改變,配電子站具有上送功能。
發(fā)送數(shù)據(jù)到配電主站:配電子站通過(guò)以太網(wǎng)將從配電終端讀取的數(shù)據(jù)傳送到配電主站,遵循基于網(wǎng)絡(luò)的IEC60870-5-104遠(yuǎn)動(dòng)傳輸規(guī)約。
4 系統(tǒng)測(cè)試和實(shí)驗(yàn)
4.1 系統(tǒng)測(cè)試平臺(tái)
系統(tǒng)硬件測(cè)試平臺(tái)主要用于測(cè)試配電子站與配電終端之間的CAN通信以及配電子站與配電主站之間的以太網(wǎng)通信。測(cè)試中配電終端裝置采用國(guó)電南瑞的DAT-1000系列產(chǎn)品,主要與DAT-1L和DAT-1LA裝置進(jìn)行通信。而主站則采用在PC機(jī)上通過(guò)與模擬主站進(jìn)行通信來(lái)測(cè)試以太網(wǎng)通信。
4.2 測(cè)試與實(shí)驗(yàn)結(jié)果
經(jīng)過(guò)嚴(yán)格的測(cè)試和苛刻的實(shí)驗(yàn),基于嵌入式硬件平臺(tái)的配電子站能夠按照要求完成與配電主站和配電終端之間的通信。采用CAN總線通信方式與多個(gè)FTU進(jìn)行通信,通信抗干擾力強(qiáng),通信速度快,不丟失遙測(cè)量及SOE等。采用以太網(wǎng)通過(guò)基于網(wǎng)絡(luò)的IEC60870-5-104遠(yuǎn)動(dòng)傳輸規(guī)約與配電主站進(jìn)行通信,系統(tǒng)可靠性高,通信速度快,完全符合配電自動(dòng)化系統(tǒng)通信要求。
嵌入式系統(tǒng)主要由嵌入式處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及特定的應(yīng)用程序等四部分組成,是集軟硬件于一體的可獨(dú)立工作的“器件”;用于實(shí)現(xiàn)對(duì)其它設(shè)備的控制、監(jiān)視或管理等功能。
嵌入式系統(tǒng)應(yīng)具有的特點(diǎn)是:要求高可靠性;在惡劣的環(huán)境或突然斷電的情況下,要求系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實(shí)時(shí)處理能力,這就要求嵌入式操作系統(tǒng)(EOS)具有實(shí)時(shí)處理能力;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲(chǔ)器中或閃存中,也就是說(shuō)軟件要求固態(tài)化存儲(chǔ),而不是存儲(chǔ)在磁盤(pán)等載體中。
2.設(shè)備驅(qū)動(dòng)程序
Vxworks5.4中驅(qū)動(dòng)程序主要分為三種:字符、塊以及網(wǎng)絡(luò)驅(qū)動(dòng)程序。本文所介紹的網(wǎng)卡驅(qū)動(dòng)程序則屬于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。
·網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
網(wǎng)絡(luò)的各功能部件圖1所示,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是處理硬件和上層協(xié)議之間的接口程序。網(wǎng)絡(luò)傳輸協(xié)議層分發(fā)數(shù)據(jù)在應(yīng)用程序接口和網(wǎng)絡(luò)接口之間。網(wǎng)絡(luò)化網(wǎng)絡(luò)協(xié)議(如IP協(xié)議)發(fā)送數(shù)據(jù)在網(wǎng)絡(luò)主機(jī)之間。連接/接口層使能主機(jī)隸屬于硬件到相同物理媒質(zhì)的通信。
在Vxworks5.4中,網(wǎng)卡驅(qū)動(dòng)程序又分為END(Enhanced Network Driver)和BSD兩種。
·BSD驅(qū)動(dòng)程序設(shè)計(jì)
在Vxworks5.4中,網(wǎng)絡(luò)驅(qū)動(dòng)程序都是基于BSD UNIX版本4.3基礎(chǔ)上的,這些驅(qū)動(dòng)程序都定義在一個(gè)全局例程中,那就是attach子程序,xxattach( )子程序中包含5個(gè)函數(shù)指針,它們都被映射到ifnet結(jié)構(gòu)中,它們?cè)贗P協(xié)議層任何地方被調(diào)用。
需要一個(gè)接口數(shù)據(jù)記錄(Interface Data Record (idr)),unit號(hào)和設(shè)備名,下面四個(gè)參數(shù)就是相關(guān)驅(qū)動(dòng)程序的函數(shù)指針。第一個(gè)函數(shù)指針指的是init( )例程,這個(gè)例程可要可不要,第二個(gè)函數(shù)指針指的是ioctl( )接口,它允許上層來(lái)控制設(shè)備狀態(tài);第三個(gè)函數(shù)指針指的是把數(shù)據(jù)包送到物理層;最后一個(gè)函數(shù)指針指的是如果TCP/IP堆棧決定需要復(fù)位的話,它就復(fù)位這個(gè)設(shè)備。
接著下面那一句代碼表示添加數(shù)據(jù)傳輸例程到IDR,ether_output( )例程被調(diào)用后,傳輸開(kāi)始例程就被TCP/IP協(xié)議堆棧調(diào)用。
在這個(gè)入口驅(qū)動(dòng)程序中還包括設(shè)備的初始化、發(fā)送和接收描述符的初始化等。
·END驅(qū)動(dòng)程序設(shè)計(jì)
END驅(qū)動(dòng)程序是基于MUX模式,網(wǎng)絡(luò)驅(qū)動(dòng)程序被劃分為協(xié)議組件和硬件組件。MUX數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間的接口,它管理網(wǎng)絡(luò)協(xié)議接口和低層硬件接口之間的交互;將硬件從網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)中隔離出來(lái);刪除使用輸入鉤例程來(lái)過(guò)濾接收從協(xié)議來(lái)的數(shù)據(jù)包,和刪除了使用輸出鉤例程來(lái)過(guò)濾協(xié)議包的發(fā)送;并且鏈路層上的驅(qū)動(dòng)程序需要訪問(wèn)網(wǎng)絡(luò)層(IP或其他協(xié)議)時(shí),也會(huì)調(diào)用相關(guān)的MUX例程。值得注意的是,網(wǎng)絡(luò)層協(xié)議和數(shù)據(jù)鏈路層驅(qū)動(dòng)程序不能直接通訊,它們必須通過(guò) MUX。如圖3所示:
]]>關(guān)鍵字:實(shí)時(shí)操作系統(tǒng) 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議 代理
1. 引言
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)已經(jīng)成為目前網(wǎng)絡(luò)管理方面事實(shí)上的標(biāo)準(zhǔn)。同命名一樣,它的操作非常簡(jiǎn)單易行,所以引起了越來(lái)越多的商家的注意,在計(jì)算機(jī)、通信和自動(dòng)化等各個(gè)領(lǐng)域都發(fā)揮了很大的作用。同時(shí),VxWorks嵌入式操作系統(tǒng)又由于其出色的實(shí)時(shí)性和穩(wěn)定性受到業(yè)界的廣泛的好評(píng),所以如何實(shí)現(xiàn)在VxWorks系統(tǒng)上通過(guò)SNMP協(xié)議對(duì)設(shè)備進(jìn)行管理是我們面臨的一個(gè)很重要的課題。
2. SNMP及系統(tǒng)簡(jiǎn)介
VxWorks操作系統(tǒng)是美國(guó)WindRiver公司設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),具有以下特點(diǎn):
1.高效的代碼和良好的可裁剪性采用微內(nèi)核結(jié)構(gòu),內(nèi)核可裁減至幾十B 字節(jié),對(duì)于資源相對(duì)緊張的嵌入式系統(tǒng)具有非常好的適應(yīng)性。
2.豐富的接口資源和大量的第三方產(chǎn)品為VxWorks的廣泛應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)
3.良好的移植性,可以移植到不同的處理器平臺(tái),包括PPC、ARM和X86等不同的處理器。
4.良好的開(kāi)發(fā)環(huán)境,非常好的開(kāi)發(fā)環(huán)境Tornado并在不斷升級(jí)
WindNet SNMP代理將工業(yè)標(biāo)準(zhǔn)網(wǎng)絡(luò)管理引入實(shí)時(shí)嵌入系統(tǒng)中,實(shí)現(xiàn)了對(duì)嵌入式設(shè)備管理的接口。應(yīng)用上只需配置其初始化過(guò)程和應(yīng)用系統(tǒng)提供的部分接口就可以方便實(shí)現(xiàn)對(duì)嵌入式設(shè)備的管理,同時(shí)支持多種SNMP版本的支持,現(xiàn)在已經(jīng)可以支持SNMPv3最高版本。SNMP的工作過(guò)程可以如圖1所示:
3. 處理流程
3.1 初始化過(guò)程
Vxworks是通過(guò)調(diào)用usrSnmpInit( )函數(shù)來(lái)啟動(dòng)SNMP服務(wù)的,所以對(duì)于VxWorks微內(nèi)核,一定要包含usrSnmpInit( )函數(shù)。它然后創(chuàng)建任務(wù)名為tSnmpd的任務(wù),這個(gè)任務(wù)的函數(shù)入口點(diǎn)為snmpIoMain( )。在庫(kù)snmpIoLib.c中提供了該函數(shù)的部分源代碼,用戶可以加入自己的代碼,比如讀某些配置文件和私有的配置信息等。snmpIoMain( )然后調(diào)用snmpdInitFinish( )函數(shù)來(lái)完成整個(gè)代理的初始化過(guò)程。然后snmpInitFinish( )通過(guò)snmpIoTrapSend( )函數(shù)發(fā)送coldStart的trap,表示整個(gè)初始化過(guò)程完畢。這里需要注意的是所有其他的初始化和配置工作一定要在snmpInitFinish( )調(diào)用之前,然后系統(tǒng)回到snmpIoMain( )函數(shù)體,開(kāi)始和管理站之間的收發(fā)包過(guò)程。
3.2 數(shù)據(jù)包處理
數(shù)據(jù)包的處理過(guò)程是通過(guò)snmpIoBody( )的這個(gè)守護(hù)進(jìn)程開(kāi)始的,它的主要工作是監(jiān)視 UDP 161端口,如果管理站有請(qǐng)求發(fā)送過(guò)來(lái),它把請(qǐng)求發(fā)給snmpdPktProcess( )來(lái)處理,通過(guò)snmpIoCommunityValidate( )檢查共同體的名稱(chēng)是否正確。然后調(diào)用用戶自己的程序完成請(qǐng)求,對(duì)于SET操作,還要調(diào)用snmpIoWrite( )來(lái)完成整個(gè)操作。這里要注意的是用戶要提供自己的代碼完成請(qǐng)求,比如說(shuō)對(duì)某一個(gè)變量的讀取,一定要給出對(duì)應(yīng)的具體位置,這部分可以通過(guò)修改snmpdLib.c中的函數(shù)來(lái)完成。
對(duì)于trap的處理有單獨(dú)的一套流程,首先如果一件意外事件發(fā)生,比如冷啟動(dòng),調(diào)用snmpdTrapSend( )函數(shù)來(lái)處理。對(duì)于trap,可以通過(guò)用戶自定義的方式來(lái)實(shí)現(xiàn)系統(tǒng)需要的trap。一般來(lái)講,它通過(guò)snmpIoWrite( )函數(shù)把信息傳遞給管理站。
3.3 退出代理
如果用戶想中止代理,可以調(diào)用函數(shù)snmpdExit( )來(lái)完成,同時(shí)會(huì)釋放各種資源。
以上部分流程圖如圖2所示:
4. 擴(kuò)展MIB模塊
對(duì)默認(rèn)的SNMP配置,代理已經(jīng)包含了包括MIB-II和其他的基本MIB庫(kù),但對(duì)于有些環(huán)境不需要部分庫(kù),同時(shí)需要加入基于本設(shè)備和本廠家的私有MIB,所以很有必要對(duì)MIB進(jìn)行擴(kuò)展和裁減,也利于對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理。以下介紹整個(gè)過(guò)程。
1. 定義管理信息
這步主要用來(lái)定義SNMP需要管理的信息,其中部分信息已經(jīng)通過(guò)標(biāo)準(zhǔn)MIB實(shí)現(xiàn),實(shí)際只要加入就可以了。
2. 創(chuàng)建MIB定義
根據(jù)ASN.1標(biāo)準(zhǔn)語(yǔ)法創(chuàng)建MIB。
一般有以下形式:
DEFINITIONS ::= BEGIN
—— Title: EXAMPLE
IMPORTS
MODULE-IDENTITY,
OBJECT-TYPE
FROM SNMPv2-SMI
……
windDemo MODULE-IDENTITY
LAST-UPDATED "2004-9-26"
ORGANIZATION
CONTACT-INFO
Phone:……
Email:……
DESCRIPTION
"This is a example"
::= { demos 1 }
windObjects OBJECT IDENTIFIER ::= { windDemo 1 }
sysState OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"EXAMPLE"
::= { sysconfig 1 }
END
3. 檢查正確性,轉(zhuǎn)換成.h和.c文件
可以應(yīng)用mibcomp –check工具來(lái)檢驗(yàn)MIB文件的正確性,利于mibcomp –o生成相應(yīng)的.h和.c文件。
4. 編譯MIB文件
將MIB文件加入到已經(jīng)存MIB模塊中。通常有靜態(tài)和動(dòng)態(tài)兩種方式。
靜態(tài)類(lèi)似于通常的編譯文件的全過(guò)程。這里主要介紹動(dòng)態(tài)方式,因?yàn)檫@種方式可以實(shí)現(xiàn)在原始模塊照常工作的情況下加入或卸載新模塊。首先通過(guò)mibcomp –l命令將新的MIB文件編譯成模塊。然后用命令ld在shell下實(shí)現(xiàn)MIB的動(dòng)態(tài)加載。
5. 總結(jié)
VxWorks將SNMP應(yīng)用到整個(gè)系統(tǒng),實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理,利于對(duì)同不同的管理站進(jìn)行接口。SNMP不僅實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的管理還提供了監(jiān)視整個(gè)系統(tǒng)正常運(yùn)行的基本功能,同時(shí)還可以通過(guò)對(duì)CPU的檢查實(shí)現(xiàn)發(fā)現(xiàn)軟件方面的漏洞。總之,將SNMP應(yīng)用到微內(nèi)核,會(huì)在嵌入式這個(gè)自動(dòng)化領(lǐng)域發(fā)揮出越來(lái)越大的作用。
Makefile文件配置
# Makefile - make rules for board
#
#*/
CPU = PPC40x
TOOL = gnu
TGT_DIR=$(WIND_BASE)/target
include $(TGT_DIR)/h/make/defs.bsp
include $(TGT_DIR)/h/make/make.$(CPU)$(TOOL)
include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)
## Only redefine make definitions below this point, or your definitions will
## be overwritten by the makefile stubs above.
TARGET_DIR = xxx
VENDOR = IBM
BOARD = xxx
RELEASE = vxWorks vxWorks.st bootrom_uncmp.hex
USR_ENTRY = usrInit
# ROM_TEXT_ADRS, ROM_SIZE, RAM_HIGH_ADRS, 和RAM_LOW_ADRS 在config.h,Makefile和Makefile.*文件中 # 都要定義,且必須要保持一致,
ROM_TEXT_ADRS = fff80100 # ROM 起始地址
ROM_SIZE = 0007f000 # ROM 空間大小
RAM_LOW_ADRS = 00010000 # RAM 低地址 vxWorks */
RAM_HIGH_ADRS = 00C00000 # RAM 高地址存儲(chǔ) bootrom */
HEX_FLAGS = -a 100
#ADDED_CFLAGS = -gdwarf -O0 # for debug
MACH_EXTRA = appentry.o # 注意:這里加載用戶的程序模塊,程序調(diào)用在usrRoot()
BOOTCONFIG = bootconfig.c # bsp bootconfig.c for bootrom
## Only redefine make definitions above this point, or the expansion of
## makefile target dependencies may be incorrect.
include $(TGT_DIR)/h/make/rules.bsp
include $(TGT_DIR)/h/make/rules.$(WIND_HOST_TYPE)
Tornado for x86下BSP的生成,下載和Target Server的配置實(shí)例,Pentium主機(jī),3Com網(wǎng)卡,軟盤(pán)引導(dǎo),ftp下載VxWorks映像。
1.在C:\Tornado\target\config\pcPentium目錄下修改BSP文件config.h。
]]>#elif (CPU_VARIANT == PENTIUM)
#define DEFAULT_BOOT_LINE
"elt(0,0)HOST:c:\\Tornado\\target\\config\\pcPentium\\vxWorks
h=90.0.0.3 e=90.0.0.50 u=target pw=target tn=target"
#define INCLUDE_ELT //3Com網(wǎng)卡
#define INCLUDE_END //END驅(qū)動(dòng)2.打開(kāi)Tornado選擇新建一個(gè)bootable vxworks image,選擇建 A BSP,選擇
pcPentium,建完后編譯就可以在相應(yīng)的目錄下生成vxworks的映像文件。
3.制作bootrom;選擇Build Boot Rom,選擇pcPentium,再選擇bootrom_uncmp,
生成 bootrom_uncmp。拷貝 bootrom_uncmp到host\x86-win32\bin下,插入空白
盤(pán)到軟區(qū),在dos界面進(jìn)入目錄host\x86-win32\bin下,用命令"mkboot a:
bootrom_uncmp "生成引導(dǎo)盤(pán)
4. 在Start > Programs > Tornado2 > FTP Server,點(diǎn)開(kāi)Security下的
user/rights菜單,新建用戶User Name:target,Password:target,Home
Directory為VxWorks映像所在目錄如 C:\Tornado\target\config\pcPentium\。
注意這些配置要和config.h中的一致。
5.將bootrom的啟動(dòng)盤(pán)插入目標(biāo)機(jī)的軟驅(qū),啟動(dòng)目標(biāo)機(jī),系統(tǒng)從軟驅(qū)啟動(dòng),隨后登
陸FTP,從主機(jī)下載vxworks文件,目標(biāo)機(jī)提示7秒內(nèi)按任意鍵選擇Boot方式(手工
,自動(dòng)),手工方式可對(duì)FTP用戶,口令,IP等參數(shù)進(jìn)行修改。
通常是等待7秒后系統(tǒng)autoboot。
屏幕顯示:
Attached TCP/IP interface to elt0.
Attaching network interface lo0... done. //TCP/IP網(wǎng)絡(luò)連接成功
Loading... 602128 //通過(guò)ftp下載VxWorks映像
Starting at 0x01080000 //下載成功,從RAM_LOW_ADRS 0x01080000
開(kāi)始執(zhí)行VxWorks系統(tǒng)
Attached TCP/IP interface to elt unit 0
Attaching interface lo0...done //TCP/IP網(wǎng)絡(luò)連接成功
(注意這里網(wǎng)絡(luò)初始化成功和上邊的不同,上邊是Bootrom映像網(wǎng)絡(luò)初始化來(lái)下載VxWorks,這里VxWorks系統(tǒng)初始化網(wǎng)絡(luò)。)
VxWorks
Copyright 1984-1998 Wind River Systems, Inc.
CPU: xxxx --- Intel x82
VxWorks: 5.4
BSP version: 1.2/4
Creation date: Jan xx 2001
WDB: Ready.至此目標(biāo)機(jī)系統(tǒng)啟動(dòng)完成。
6.配置Target Server下載應(yīng)用程序.打開(kāi)Tornado,在Tools菜單下選擇Target Sever再選擇configure進(jìn)行配置(Tools
> Target Server > Configure > New)給出Target Server名字描述如net00.在
(Target Server Properties > Back End)選擇WdbRpc. Target Name/IP Address
框內(nèi)輸入Target的IP: 90.0.0.50.
Core File and Symbols選項(xiàng)(Target Server Properties > Core File and
Symbols): C:\Tornado\target\config\pcPentium\vxWorks等等。
配置的內(nèi)容根據(jù)系統(tǒng)的具體情況定。點(diǎn)擊Launch啟動(dòng)Target Sever,隨后在主界
面下選擇已啟動(dòng)的Target Sever就可以下載 *.o或*.out程序。
基于VxWorks實(shí)現(xiàn)OpenGL三維顯示vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真( \' P% j9 ?) v, B. R" S0 N
中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū): g! L* q( V8 z6 h
當(dāng)前,實(shí)時(shí)嵌入式系統(tǒng)的發(fā)展非常迅猛,在工業(yè)控制、軍事、航空航天、手持設(shè)備等各個(gè)方面都得到了廣泛的應(yīng)用.其中,為實(shí)時(shí)嵌入式系統(tǒng)提供友好的圖形用戶界面(GUI)成為了重要的發(fā)展方向.本論文根據(jù)實(shí)時(shí)嵌入式系統(tǒng)的特殊要求,針對(duì)VxWorks操作系統(tǒng)現(xiàn)有GUI部件——WindML在所支持的顯示硬件設(shè)備和圖形繪制方面的不足,對(duì)它做了功能上的擴(kuò)充,并將它更名為E-UGL,意為擴(kuò)展的通用圖形庫(kù).顯示設(shè)備驅(qū)動(dòng)程序是GUI的基礎(chǔ).課題首先設(shè)計(jì)了針對(duì)AGP顯示設(shè)備——Intel82815顯示引擎的核心數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)了對(duì)幀緩存(Frame Buffer)機(jī)制和圖形地址重映射表(GART)機(jī)制的支持,解決了在VxWorks下AGP顯示設(shè)備的初始化問(wèn)題;第二,驅(qū)動(dòng)實(shí)現(xiàn)了對(duì)多種顯示模式的支持,最高可以達(dá)到1280×1024顯示分辨率、16位顏色、75Hz刷新頻率,解決了嵌入式系統(tǒng)中顯示模式單一、落后的問(wèn)題;第三,用ELFA算法實(shí)現(xiàn)了直線段繪制函數(shù),用中點(diǎn)法實(shí)現(xiàn)了橢圓繪制函數(shù),使系統(tǒng)的圖形繪制性能有了一定程度的提高.用正負(fù)法實(shí)現(xiàn)了圓繪制函數(shù),提高了繪制的精度.第四,將mesa3d的三維函數(shù)庫(kù)移植到VxWorks中,使驅(qū)動(dòng)可以支持OpenGL應(yīng)用;第五,在驅(qū)動(dòng)中實(shí)現(xiàn)了雙緩存機(jī)制,提高了系統(tǒng)的三維圖形繪制速度;第六,在驅(qū)動(dòng)中實(shí)現(xiàn)了可編程鍵盤(pán),即可以對(duì)四線電阻式觸摸屏設(shè)備提供支持,使得驅(qū)動(dòng)能夠適應(yīng)無(wú)鼠標(biāo)和鍵盤(pán)條件下的嵌入式系統(tǒng).驅(qū)動(dòng)不僅支持高分辨率的顯示模式和圖形繪制,而且支持無(wú)鼠標(biāo)和鍵盤(pán)的應(yīng)用環(huán)境.另外,代碼是自主設(shè)計(jì)和實(shí)現(xiàn)的,避免了封閉模塊的黑盒效應(yīng).因此,在工業(yè)控制、軍事等領(lǐng)域的嵌入式系統(tǒng)中將得到廣泛的應(yīng)用. & U$ W# ~$ x7 `: x% X1 x
雖然硬件上解決此問(wèn)題已經(jīng)在國(guó)外實(shí)現(xiàn),但基于軟件解決基于VxWorks實(shí)現(xiàn)OpenGL三維顯示,仍然需要高手加盟研究關(guān)鍵技術(shù)突破點(diǎn).vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真5 W( w5 I, c* d5 w, N1 m
北航VXWORK實(shí)驗(yàn)的高博士組已經(jīng)宣布失敗,停止研究.北理工仿真室李老師仍然在邀請(qǐng)高手參與此塊,并將成果共享參與人員.謝謝.
9 Y v# K% m: \9 v% t 如果有興趣者,XMVINI@163.COM,謝謝.bbs.vrchina.net: \5 }! n1 y) W, \! b6 d
VINI虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl( u' A* @$ b: }6 J; m7 I
全文目錄
$ I2 N; G* {+ J5 O2 Sbbs.vrchina.net文摘
. [* x+ A' U/ k9 k0 l% y虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl英文文摘
! ]( D2 w* D) W u kvrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真論文說(shuō)明
# x/ C R8 }4 |! a6 D3 C8 \* I虛擬現(xiàn)實(shí)中國(guó)社區(qū)本人聲明
7 m& n! ^$ l: e- jvrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真第一章引言虛擬現(xiàn)實(shí)中國(guó)社區(qū)8 r0 Z, R" } Q1 g( _3 F8 t* I1 _
1.1論文的背景和研究的意義
' K9 ]! _* Z% N- B5 Z- @中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)1.2嵌入式實(shí)時(shí)操作系統(tǒng)概況
0 Y6 O1 Q N6 y) s. T6 u8 `$ J虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl1.3典型的嵌入式實(shí)時(shí)操作系統(tǒng)及其圖形用戶界面
, e, R/ Y% p' Q. A' J# q; z3 d( Sbbs.vrchina.net1.4現(xiàn)有系統(tǒng)分析虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl, f& ^* `0 S; L" ^
1.4論文的研究?jī)?nèi)容
0 h1 i* T7 Q( Z( x8 S6 jbbs.vrchina.net1.5論文的組織安排
8 c% ^$ W+ |4 i, s9 |bbs.vrchina.net第二章計(jì)算機(jī)圖形學(xué)、GUI和顯示驅(qū)動(dòng)虛擬現(xiàn)實(shí)中國(guó)社區(qū)0 c5 p* I+ d+ }6 b! {
2.1計(jì)算機(jī)圖形學(xué)的發(fā)展及其應(yīng)用vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真: J/ U* @7 [# {( z9 {- B6 ~
2.1.1計(jì)算機(jī)圖形學(xué)硬件的發(fā)展虛擬現(xiàn)實(shí)中國(guó)社區(qū)/ t0 F2 G" Y0 B! f( b4 o
2.1.2計(jì)算機(jī)圖形學(xué)軟件及算法的發(fā)展
8 h; P; s# K/ m0 h; T" B& P中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)2.1.3計(jì)算機(jī)圖形學(xué)的應(yīng)用虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl9 @, J! ^3 p/ |6 i, E7 d" w& W
2.2圖形用戶界面GUI簡(jiǎn)述中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)$ {$ |1 I' K: |: Y9 V9 w
2.2.1用戶界面的發(fā)展虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl& {! g2 f0 V! a7 `
2.2.2 GUI系統(tǒng)的結(jié)構(gòu)模型虛擬現(xiàn)實(shí)中國(guó)社區(qū)/ e3 ]# m- I. `/ e6 H
2.3嵌入式實(shí)時(shí)系統(tǒng)對(duì)GUI的特殊要求
& Q) l3 ~$ j. b Q( T [' N% \bbs.vrchina.net2.4嵌入式實(shí)時(shí)系統(tǒng)VxWorks的GUI系統(tǒng)--WindML虛擬現(xiàn)實(shí)中國(guó)社區(qū)8 ? ^1 W( f( `
2.4.1 WindML的體系結(jié)構(gòu)
6 F; f+ d( N$ R3 kbbs.vrchina.net2.4.2 WindML提供的顯示驅(qū)動(dòng)程序
. _; y: t/ p" R5 B9 [( F& `: u/ w虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl2.5小結(jié)
& y( ?2 V- {9 p! s4 p. L: bvrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真第三章顯示驅(qū)動(dòng)的體系結(jié)構(gòu)虛擬現(xiàn)實(shí)中國(guó)社區(qū)4 N. [) E% v. _, J, {
3.1功能和性能要求虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl% r2 D' o5 Z" L$ K# z8 s$ Y8 n' B
3.1.1功能要求
- [9 V0 M% r+ ?8 a: q+ l虛擬現(xiàn)實(shí)中國(guó)社區(qū)3.1.2性能要求
+ J: _; y3 H& L; A# U: F5 e6 Svrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真3.2解決方案bbs.vrchina.net3 M3 W H, ]5 |" h' l
3.3驅(qū)動(dòng)體系結(jié)構(gòu)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真" S$ U$ Q! B1 L% o4 N7 L
3.3.1從驅(qū)動(dòng)性能的角度劃分bbs.vrchina.net% W4 ]% V4 u4 Z6 \6 H3 G- ]
3.3.2從可移植性的角度劃分bbs.vrchina.net9 Y: g+ N' _; S. \" I# z* I: } K; A
3.3.3折中的體系結(jié)構(gòu)劃分
' B3 C1 K5 p3 Y9 Mbbs.vrchina.net3.4系統(tǒng)功能分解vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真5 s" ]$ }5 S0 W8 m; t* {
3.4.1驅(qū)動(dòng)程序入口函數(shù)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真, S6 Q# e+ ~+ ~' B/ \. R+ v( L# R
3.4.2核心數(shù)據(jù)結(jié)構(gòu)
' h) N# a* ]1 J- q; vvrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真3.4.3功能模塊之間的連接關(guān)系
! z& m6 b% O7 ?& Q- ^ f" A虛擬現(xiàn)實(shí)中國(guó)社區(qū)3.4.4顯示驅(qū)動(dòng)的接口函數(shù)
/ k, h0 p! c- y4 x$ B& z3.5小結(jié)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真' _; B2 \7 X: ^
第四章顯示驅(qū)動(dòng)的系統(tǒng)實(shí)現(xiàn)虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl8 j6 ~2 a$ S5 Y' X: @% U( B( c; T
4.1.PCI模塊的實(shí)現(xiàn)
6 j- j# t% F3 j! r虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl4.2 GTT功能模塊的實(shí)現(xiàn)中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)$ A7 K5 N. [ e( ?/ ]
4.3硬件相關(guān)功能模塊的實(shí)現(xiàn)虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl1 \1 c" h+ z8 O& e& v- ?% h
4.4二維繪圖功能模塊的實(shí)現(xiàn)
% \7 U' ]$ f8 R/ w' {7 Y中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)4.5 OpenGL功能模塊的實(shí)現(xiàn) P# v" c" X! X3 T5 p- B
4.6可編程鍵盤(pán)功能模塊的實(shí)現(xiàn)
, [( y3 C/ U! w" Fvrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真4.7小結(jié)3 y9 F) q1 c A4 B2 Q9 u6 H
第五章系統(tǒng)的技術(shù)實(shí)現(xiàn)
( k% C2 c5 j+ M% y6 a& s虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl5.1直線繪制函數(shù)的改進(jìn)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真5 |& |( S# Y+ F8 ]# ?/ _9 X# ~
5.1.1通用的Bresenham算法虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl u6 X$ Q& _* L8 d- V
5.1.2對(duì)稱(chēng)的Bresenham算法3 R: B$ a: i, y4 n
5.1.3 ELFA算法虛擬現(xiàn)實(shí)中國(guó)社區(qū): S3 {- g9 ^( `* f* j5 n
5.2圓繪制函數(shù)的優(yōu)化虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl/ t% n' E" v. N7 m! x9 c
5.3橢圓繪制函數(shù)的優(yōu)化
- _% [: `. P* Hbbs.vrchina.net5.4雙緩存技術(shù)的實(shí)現(xiàn)6 n. s& }% \) R: d2 S; x) a# X6 Y7 x
5.5系統(tǒng)實(shí)現(xiàn)的特點(diǎn)3 x, \3 ~4 B+ j! u2 q
5.6小結(jié)中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū), o ?5 T) b. o4 O; v ~3 h
第六章系統(tǒng)的實(shí)現(xiàn)效果vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真0 W/ W" N) j: m/ X) n( v
6.1性能測(cè)試虛擬現(xiàn)實(shí)中國(guó)社區(qū)) K# `8 p4 Z! V8 ?8 R6 ]
6.1.1直線繪制算法
8 u" p8 m, p" E" L, @6.1.2圓繪制算法bbs.vrchina.net/ ~) |5 }+ \3 D& x
6.1.3橢圓繪制算法bbs.vrchina.net+ C7 i5 ?; V# d- Q
6.2功能測(cè)試
% ?4 l9 P9 Z9 \. l! P中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)6.2.1 WindML窗口系統(tǒng)應(yīng)用
: {' Q4 g: W+ S5 f% ?* \/ Avrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真6.2.2 OpenGL應(yīng)用
" U. U3 `9 E0 Z5 E4 |4 q6.2.3觸摸屏應(yīng)用
7 H. v/ O" _/ r* u( c: _6 z& P2 K6 X虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl6.3小結(jié)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality) 三維圖形 CG GIS 游戲仿真6 w: N# V- a+ r ]
]]>因?yàn)闊岵灏慰梢栽谌魏螘r(shí)刻發(fā)生,所以USBD和其Client都必須被寫(xiě)成可以動(dòng)態(tài)識(shí)別USB設(shè)備被插入還是被拔出。當(dāng)主控制器連接到系統(tǒng)時(shí),USBD 自動(dòng)地鑒別與其相連的設(shè)備,并通知相關(guān)的client;同樣,拔出設(shè)備時(shí),也要通知相關(guān)設(shè)備。重要的是,USBD 的client,比如USB class driver,在client初始化時(shí),從不設(shè)想特定的設(shè)備已經(jīng)出現(xiàn);而在其他時(shí)候,這些驅(qū)動(dòng)隨時(shí)檢查設(shè)備是否已經(jīng)連接到系統(tǒng)上。
4.4 總線任務(wù)
對(duì)每一個(gè)連接到USBD 的主控制器,例如插入或拔出設(shè)備,USBD都會(huì)產(chǎn)生一個(gè)總線任務(wù),來(lái)監(jiān)控總線事件。一般情況下,這些任務(wù)是休眠的(不消耗CPU),只有當(dāng)USB hub報(bào)告它的一個(gè)端口有變化時(shí),它們才被喚醒。每一個(gè)USBD總線任務(wù)有VxWorks任務(wù)名:UsbdBus。
雖然HCD委托USBD來(lái)管理,但有可能HCD 親自監(jiān)視主控制器事件。例如WindRiver提供了UHCI和OHCI的HCD來(lái)創(chuàng)造這樣的任務(wù)。對(duì)于WindRiver的UHCI模塊(usbHcdUheiLib),后臺(tái)任務(wù)只是被周期地喚醒,目的是為了檢查超時(shí)IRP(用一個(gè)中斷來(lái)通知OHCI根hub發(fā)生改變)。
用以在USBD和USB之問(wèn)進(jìn)行通信的client模塊,除了調(diào)用usbdlnitialize()外,必須調(diào)用usbClientRegister()使其在USBD注冊(cè)。當(dāng)一個(gè)client注冊(cè)到USBD時(shí),USBD把每一個(gè)以后將要用到的client的數(shù)據(jù)結(jié)構(gòu)定位,并跟蹤那個(gè)client的請(qǐng)求。
對(duì)于每一個(gè)client,在client注冊(cè)過(guò)程中,USBD還創(chuàng)建了一個(gè)callback任務(wù)。在成功注冊(cè)client后,USBD返回一個(gè)句柄USBD_CLIENT_HANDLE。以下對(duì)USBD的調(diào)用,將會(huì)用到這個(gè)句柄。當(dāng)所有句柄都不需要時(shí),可以調(diào)用usbdClientUnregister()來(lái)釋放每一個(gè)client的數(shù)據(jù)結(jié)構(gòu)和callback任務(wù)。注意:此時(shí)所有client要求的任務(wù)都會(huì)被取消。
例如:注冊(cè)一個(gè)叫USBD_TEST的client,再注銷(xiāo)。
注冊(cè):usbdClientRegister("USBD_TEST',&usbdClientHandle);
注銷(xiāo):usbdClientUnregister(usbdClientHandle);
4.5 client回調(diào)(callback)任務(wù)
USB操作是嚴(yán)格遵守時(shí)序的。例如為使中斷傳輸和同步傳輸正確工作.需要依靠時(shí)鐘中斷。在一個(gè)有幾個(gè)不同client出現(xiàn)的主系統(tǒng)中.總是有可能出現(xiàn)一個(gè)client打斷其它c(diǎn)lient傳輸事件的發(fā)生。WindRiver USBD建議用client callback任務(wù)來(lái)解決這個(gè)問(wèn)題。許多USB事件可以導(dǎo)致一個(gè)USB client的callback任務(wù)。例如, 每當(dāng)USBD 完成USB IRP后,client的IRP callback函數(shù)被激活。同樣,當(dāng)USBD識(shí)別出一個(gè)動(dòng)態(tài)連接事件后,會(huì)激活一個(gè)或更多的動(dòng)態(tài)attach callback操作。但不是馬上激活這些回調(diào)操作, 而是安排合適的相應(yīng)的USBD client的回調(diào)任務(wù)來(lái)執(zhí)行callback。
一般的情況下,每一個(gè)client的callback任務(wù)處于“休眠”態(tài)(阻塞態(tài))。每一個(gè)client的callback,繼承了usbdClientRegister()產(chǎn)生的VxWorks任務(wù)優(yōu)先級(jí)。這確保了每一個(gè)callback按其client的任務(wù)優(yōu)先級(jí)來(lái)執(zhí)行,而且可以利用優(yōu)先級(jí)來(lái)寫(xiě)client,保證對(duì)時(shí)間要求嚴(yán)格的USB傳輸。由于每一個(gè)client有它自己的callback任務(wù),因此在callback期間,它們有很大的靈活性決定可以做什么。例如,允許在不破壞USBD或其它USBD client性能的條件下,使callback執(zhí)行代碼運(yùn)行至阻塞態(tài)。
Client callback task有VxWorks任務(wù)名:tUsbdCln。
4.6 USBD內(nèi)部Client
當(dāng)?shù)谝淮纬跏蓟疷SBD時(shí),由USBD產(chǎn)生并注冊(cè)一個(gè)內(nèi)部client,以跟蹤USB請(qǐng)求。
USBD 可以產(chǎn)生什么類(lèi)型的USB請(qǐng)求呢? 所有USBD與USB設(shè)備的傳輸,均利用調(diào)用USBD client的形式來(lái)完成。例如, 當(dāng)一個(gè)設(shè)備第一次連接到系統(tǒng)時(shí).USBD用一個(gè)控制管道(control pipe) 自動(dòng)地創(chuàng)建設(shè)備需要的所有的control pipe,即USBD client要用usbdPipeCreate()來(lái)創(chuàng)建一個(gè)與USB endpoint0通話的通道,然后所有USBD 內(nèi)部、外部client通過(guò)這個(gè)管道來(lái)發(fā)送諸如usbdDescriptorGet()或usbdFeatureGet()等的函數(shù),進(jìn)行操作。
所以,USBD 的一個(gè)機(jī)制就是USBD 循環(huán)利用它自己的entry point,而內(nèi)部chent跟蹤這些請(qǐng)求。
4.7 動(dòng)態(tài)連接的注冊(cè)
每當(dāng)一個(gè)特定類(lèi)型的設(shè)備插入或拔出時(shí),USBD client都通知上一層。利用調(diào)用usbdDynamicAttachRegister()操作,client可以指定一個(gè)callback操作,以便可以獲取這樣的通知。
USB設(shè)備類(lèi)型用class,subclass,protocol來(lái)區(qū)別。標(biāo)準(zhǔn)的USB 類(lèi)在usb.h 中定義為USB_CLASS_XXXX。Subclass和protocol根據(jù)class來(lái)定義, 因此這些常數(shù)根據(jù)特定的class在頭文件中定義。
有時(shí), 一個(gè)client當(dāng)利用usbdDynamicAttachRegister()進(jìn)行注冊(cè)時(shí),只對(duì)特定的class,subclass,protocol感興趣。例如,USB鍵盤(pán)類(lèi)驅(qū)動(dòng)usbkeyboardLib, 注冊(cè)了Human Device Interface (HID) 類(lèi),subclass 是USB_SUBCLASS_HID_ BOOT,protocol是USB_PROTOCOL_HID_BOOT _KEYBOARD。通過(guò)callback機(jī)制的響應(yīng),每當(dāng)一個(gè)設(shè)備完全符合這樣的標(biāo)準(zhǔn), 從設(shè)備上插入或拔出時(shí),SBD便通知給keyboard class driver。而在其它情況下,client關(guān)注的范圍更廣泛了。常量USBD_NOTIFY(定義在usbdLib.h)可以替代任意的class,subclass,protocol。例如,USB打印機(jī)USB驅(qū)動(dòng),usbPrinterLib, 其class等于USB_CLASS_PRINTER,subclass 等于USB_SUBCLASS_PRINTER (usbPrinter.h),protocol等于USBD_ NOTIFY_ ALL。典型的,當(dāng)一個(gè)client只調(diào)用一次usbdDynamicAttachRegister()時(shí),對(duì)一個(gè)client能擁有的并發(fā)通知請(qǐng)求數(shù)目沒(méi)有限制。
4.8 Node ID
USB設(shè)備一般用USBD_NODE_ID來(lái)區(qū)別。從其作用來(lái)看,USBD_ NODE_ ID 是USBD 用來(lái)跟蹤一個(gè)設(shè)備的句柄。它與USB設(shè)備真正的USB地址無(wú)關(guān)。這表明client并不真正關(guān)心想要了解設(shè)備是物理上與哪一個(gè)USB主控制器相連。應(yīng)用為每個(gè)設(shè)備抽象定義的Node ID, 使client可以不用考慮物理設(shè)備的連接細(xì)節(jié)以及USB地址分配, 并允許USBD 在其內(nèi)部對(duì)這些進(jìn)行詳細(xì)的管理。
當(dāng)一個(gè)client通知有一個(gè)設(shè)備連接或斷開(kāi)時(shí),USBD經(jīng)常通過(guò)USBD_NODE_ID來(lái)定位設(shè)備。同樣,當(dāng)一個(gè)client想通過(guò)USBD與一個(gè)特定的設(shè)備通信時(shí),它必須向USBD傳遞那個(gè)設(shè)備的USBD_NODE_ID。
4.9 總線編號(hào)(bus enumeration)操作
usbdLib模塊提供了usbdBusCountGet(),usbdRootNodeldGet(),usbdHubPortCountGet(),usbdNodldGet()操作。它們被一起稱(chēng)作總線編號(hào)操作。它們使USBD Client對(duì)連接到每一個(gè)主控制器上的設(shè)備進(jìn)行編號(hào)。
這些操作對(duì)于診斷程序和測(cè)試工具很有用,例如usbTool(WindRiver提供的一個(gè)測(cè)試工具)。但是,利用它們編號(hào)之后,調(diào)用者無(wú)法知道USB的拓?fù)浣Y(jié)構(gòu)是否變化。因此, 建議USB class driver的開(kāi)發(fā)者不要用這些操作。
4.10 數(shù)據(jù)傳輸
一旦client配置完成一個(gè)設(shè)備,就開(kāi)始利用USBD提供的管道和傳輸功能與設(shè)備進(jìn)行數(shù)據(jù)交換。傳輸種類(lèi)(分為控制、塊、中斷和同步傳輸)用一個(gè)USB_IRP數(shù)據(jù)結(jié)構(gòu)來(lái)描述。 USB_IRP 的具體描述請(qǐng)參見(jiàn)HCD_FUNC_IRP_SUBM1T。USB數(shù)據(jù)傳輸被定位于每一個(gè)設(shè)備的特定endpoint。在USBD client和特定的設(shè)備endpoint之間的通道被稱(chēng)作管道(pipe)。每一個(gè)管道有以下若干特性:
USBD_NODE_ID;
設(shè)備的endpoim 數(shù)目;
數(shù)據(jù)傳輸方向;
帶寬需求;
延時(shí)需求。
為了和設(shè)備交換數(shù)據(jù),client必須先創(chuàng)建管道。作為結(jié)果,USBD得到了一個(gè)USBD_PIPE_HANDLE,它被用于隨后對(duì)這個(gè)管道的所有client操作。
當(dāng)client企圖創(chuàng)建一個(gè)管道時(shí),USBD會(huì)檢查是否有足夠的可用帶寬。對(duì)于中斷和同步傳輸,帶寬限制是必需的。USBD不允許把90% 以上的可用帶寬分配給中斷和同步管道;而對(duì)于控制和塊傳輸,則沒(méi)有帶寬的限制。同時(shí),保證至少10% 的帶寬用于控制傳輸,對(duì)塊傳輸則不保證會(huì)提供任何可用帶寬。
數(shù)據(jù)傳輸?shù)木唧w過(guò)程:
(1)創(chuàng)建pipe :usbdPipeCreate(usbdClient Handle,nodeld,endpoint,configvalue,interface,USB_XFRTYPE_BULK,USB_ DIR_OUT,maxPacketSize,0,0,&outPipeHandle);
(2)定義callback:ourlrpCallback(pvoid P);
(3)初始化IRP的數(shù)據(jù)結(jié)構(gòu);
(4)發(fā)送IRP:usbdTransfer(usbdChentHandle,outPipeHandle,&irp)。
5 、小結(jié)
USB在VxWroks下的從下至上驅(qū)動(dòng)棧分為HC、UCD、USBD和Client Module四層,每一層都相對(duì)獨(dú)立,并為上一層提供了屏蔽該層次具體特征的接口。作者所說(shuō)的USB驅(qū)動(dòng),實(shí)際上主要在USBD這一層次上完成。具體分為Chent注冊(cè),注銷(xiāo),創(chuàng)建pipe ,配置,數(shù)據(jù)發(fā)送,以及各回調(diào)函數(shù)。當(dāng)正確地依次調(diào)用時(shí), 會(huì)根據(jù)回調(diào)函數(shù)的狀態(tài)和返回值,按正確的時(shí)序進(jìn)行完整的數(shù)據(jù)傳輸。
上述設(shè)計(jì)思想構(gòu)成了VxWorks下USB設(shè)備應(yīng)用的基礎(chǔ)。作者的研究詳細(xì)地分析了VxWorks的USB協(xié)議棧,證明了該方案的可行性,同時(shí)又給出了合理的實(shí)現(xiàn)方法。作為實(shí)踐成果,作者已在VPN網(wǎng)關(guān)證書(shū)讀取系統(tǒng)中,利用該思想編寫(xiě)的驅(qū)動(dòng),順利讀出存儲(chǔ)在USB設(shè)備中的設(shè)備證書(shū)和管理員證書(shū),且運(yùn)行情況良好。作者認(rèn)為,文中提到的模型完全可以勝任解決USB設(shè)備在VxWorks下的應(yīng)用所面臨的技術(shù)難題
]]>通用串行總線(USB)作為一種中高速的數(shù)據(jù)方式,已經(jīng)很普遍地應(yīng)用于外設(shè)與主機(jī)的通信中。VxWorks是當(dāng)今十分流行的實(shí)時(shí)操作系統(tǒng),在通信、國(guó)防、工業(yè)控制、醫(yī)療設(shè)備等嵌入式實(shí)時(shí)應(yīng)用領(lǐng)域。很多VxWorks系統(tǒng)中都有USB設(shè)備,可是關(guān)于USB的驅(qū)動(dòng)實(shí)現(xiàn)并沒(méi)有相關(guān)的資料可以參考,給實(shí)際工作帶來(lái)了難題。本文通過(guò)詳細(xì)地分析VxWorks下的USB驅(qū)動(dòng)棧,具體提出了其實(shí)際應(yīng)用的方法,為USB在應(yīng)用VxWorks的嵌入式系統(tǒng)的開(kāi)發(fā)掃清了技術(shù)障礙。
2、VxWorks簡(jiǎn)介
VxWorks是WindRiver公司開(kāi)發(fā)的具有工業(yè)領(lǐng)導(dǎo)地位的高性能實(shí)時(shí)操作系統(tǒng)(Real Tim Operation System,RTOS)內(nèi)核,具有先進(jìn)的網(wǎng)絡(luò)功能。VxWorks的開(kāi)放式結(jié)構(gòu)和對(duì)工業(yè)標(biāo)準(zhǔn)的支持,使得開(kāi)發(fā)人員易于設(shè)計(jì)高效的嵌入式系統(tǒng),并可以很小的工作量移植到其它不同的處理器上。
作為一種先進(jìn)的實(shí)時(shí)操作系統(tǒng),它具有以下特點(diǎn):
可裁剪微內(nèi)核結(jié)構(gòu)。
高效的任務(wù)管理:
① 多任務(wù),具有256個(gè)優(yōu)先級(jí)。
② 具有優(yōu)先級(jí)排隊(duì)和循環(huán)調(diào)度。
③ 快速的、確定性的上下文切換。
靈活的任務(wù)間通訊:
① 三種信號(hào)燈:二進(jìn)制、計(jì)數(shù)、有優(yōu)先級(jí)繼承特性的互斥信號(hào)燈。
② 消息隊(duì)列。
③ 套接字(Socket)。
④ 共享內(nèi)存。
⑤ 信號(hào)(Signals)
微秒級(jí)的中斷處理。
支持POSIX 1003.1b實(shí)時(shí)擴(kuò)展標(biāo)準(zhǔn)。
支持多種物理介質(zhì)及標(biāo)準(zhǔn)的、完整的TCPIP網(wǎng)絡(luò)協(xié)議。
靈活的引導(dǎo)方式。支持從ROM、flash、本地盤(pán)(軟盤(pán)或硬盤(pán))或網(wǎng)絡(luò)引導(dǎo)。
支持多處理器并行處理。
快速靈活的l/O系統(tǒng)。
支持MS-DOS和RT-11文件系統(tǒng)。
支持本地盤(pán),flash,CD-ROM 的使用。
完全符合ANSI C標(biāo)準(zhǔn)。
多個(gè)系統(tǒng)調(diào)用。
3、 USB驅(qū)動(dòng)程序的結(jié)構(gòu)概述
圖1提供了一個(gè)USB主驅(qū)動(dòng)棧結(jié)構(gòu)的簡(jiǎn)單概括。圖2顯示了USB主驅(qū)動(dòng)棧的各模塊之間的功能聯(lián)系。
圖1 USB主驅(qū)動(dòng)棧結(jié)構(gòu)簡(jiǎn)單模型
圖2 USB主驅(qū)動(dòng)棧各模塊之間的功能聯(lián)系
在棧的最底部是USB主控制器(USB HC, 即USB Host Controller), 這是主系統(tǒng)中控制每一個(gè)USB設(shè)備的硬件部分。
目前,市場(chǎng)上主要有兩大類(lèi)USB主控制器,一種是支持由ime1公司最先提出的通用主控制器接口(Universal Host Controller Interface,簡(jiǎn)稱(chēng)UHCI),另一種是支持由微軟、康柏和國(guó)家半導(dǎo)體公司聯(lián)合設(shè)計(jì)提出的開(kāi)放主控制器接口(Open Host Controller Interface,簡(jiǎn)稱(chēng)OHCI)。硬件廠商一般根據(jù)這兩個(gè)規(guī)范設(shè)計(jì)他們的USB主控制器。
對(duì)于每一類(lèi)型的主控制器都有一個(gè)與硬件獨(dú)立的USB主控制器驅(qū)動(dòng)(Host Controller Driver,簡(jiǎn)稱(chēng)HCD)。WindRiver提供了兩個(gè)驅(qū)動(dòng):usbHcdUhciLib (UHCI 主控制器庫(kù))和usbHedOheiLib (OHCI主控制器庫(kù))。USB主驅(qū)動(dòng)(USB host driver,簡(jiǎn)稱(chēng)USBD)和HCD之間的接口允許一個(gè)或超過(guò)一個(gè)的底層主控制器。而且,WindRiver的USBD能夠同時(shí)連接多個(gè)USB HCD。這樣的設(shè)計(jì)特點(diǎn)可以使開(kāi)發(fā)者建立復(fù)雜的USB系統(tǒng)。
USBD是在HCD之上的與硬件獨(dú)立的模塊。USBD管理每一個(gè)與主機(jī)相連的USB設(shè)備, 向更高層次提供了可與USB設(shè)備通信的路徑。它還負(fù)責(zé)自動(dòng)處理USB電力管理以及USB帶寬管理。而且,USBD還管理USB hub,Hub功能是一個(gè)驅(qū)動(dòng)能否對(duì)USB正確操作的評(píng)價(jià)之一。因此WindRiver的USBD設(shè)計(jì)者要使USBD透明地處理hub的功能。這意味著,USBD 還能處理USB hub和設(shè)備的動(dòng)態(tài)插拔。
USB Client模塊在USB主驅(qū)動(dòng)棧的頂端。USB類(lèi)驅(qū)動(dòng)(USB Class Driver)是Client模塊的典型例子。USB類(lèi)驅(qū)動(dòng)負(fù)責(zé)管理連接到USB上的不同類(lèi)型的設(shè)備; 它們依靠USBD來(lái)提供與每個(gè)設(shè)備的通信路徑。USB client模塊的其他例子就是那些利用USBD與USB設(shè)備通信的應(yīng)用程序。
4、 USBD驅(qū)動(dòng)詳解
這一部分將要描述USBD(USB Host Driver)的典型應(yīng)用。例如初始化,client注冊(cè),動(dòng)態(tài)連接注冊(cè),設(shè)備配置,數(shù)據(jù)傳輸,同時(shí)還探討了USBD內(nèi)部設(shè)計(jì)的關(guān)鍵特性。這部分是VxWorks下USB驅(qū)動(dòng)的核心。
4.1 初始化USBD:分為兩步
(1)必須至少調(diào)用一次函數(shù)usbdInitialize()。在一個(gè)給定的系統(tǒng)中,usbdlnifialize()初始化內(nèi)部USBD數(shù)據(jù)結(jié)構(gòu),并依次調(diào)用其它USB驅(qū)動(dòng)棧模塊的入口。usbdinitialize()可以在啟動(dòng)時(shí)調(diào)用一次,也可以對(duì)每一個(gè)設(shè)備各調(diào)用一次。USBD 自己記錄了調(diào)用usbdInitialize()(‘+’)和usbdShutDown()(‘-’)的次數(shù)。只有大于等于1時(shí)才是真正初始化了,而等于0是關(guān)閉了。
(2)用USBD 的lisbdHedAttaeh()函數(shù)來(lái)把至少一個(gè)HCD連接到USBD上。這一過(guò)程既可以在VxWorks啟動(dòng)時(shí),也可以在運(yùn)行時(shí)把HCD 連接到USBD 上去。后一種機(jī)制可以支持“熱插拔”,而不用象前一種那樣需要重新啟動(dòng)。
4.2 HCD的連接(attaching)與斷開(kāi)(detaching)
當(dāng)HCD連接到USBD 時(shí),調(diào)用者為usbdHedattaeh函數(shù)傳遞HCD執(zhí)行入口(表HCD_EXEC_FUNC)和HCD連接參數(shù)(HCD attach parameter)。USBD用HCD FNC ATYACH 服務(wù)請(qǐng)求依次激活HCD的執(zhí)行入口,傳遞同樣的HCD attach參數(shù)。
需要強(qiáng)調(diào)雖然可以改變用HCD定義的參數(shù),但是最好不應(yīng)該有所改變。對(duì)于WindRiver提供的UHCI和OHCI的HCD,HCI attach參數(shù)是一個(gè)指向結(jié)構(gòu)PCI_CFG_HEADER (定義在pciConstants.h) 的指針。
該結(jié)構(gòu)用UHCI和OHCI主控制器的PCI配置頭來(lái)初始化,而HCD用這個(gè)結(jié)構(gòu)中的信息來(lái)定位,管理特定的主控制器。典型的,調(diào)用者用usbPeiClassFind ()和usbPciConfigHeaderGet()來(lái)得到想要的主控制器的PCI配置頭- 這兩個(gè)函數(shù)定義在usbPciLib 中(stubUsbarchPciLib.h中)。如果有UHCI或OHCI要連接到USBD,就要調(diào)用這些函數(shù)來(lái)獲得每一個(gè)主控制器的PCI_CFG_HEADER。然后利用usbdHedAttaeh來(lái)激活已鑒別出的每一個(gè)主控制器。
注意:底層BSP可能不支持USB的HCD斷開(kāi),因?yàn)楫?dāng)中斷向量表重新使能時(shí),如果還應(yīng)用的是過(guò)期的向量表,會(huì)導(dǎo)致錯(cuò)誤。
4.3 啟動(dòng)順序
必須在所有USBD函數(shù)前執(zhí)行函數(shù)usbdInitialize()。存在以下兩種調(diào)用方式:
(1)傳統(tǒng)的“啟動(dòng)”初始化。執(zhí)行順序與其意義如下:
a.usbdInitialize();
b.usbdPciClassFind():定位一個(gè)USB主控制器;
c.usbdPeiConfigHeaderGet():讀USB主控制器配置頭;
d.usbdHedAttaeh():連接HCD,將其作為特定的主控制器:
e.調(diào)用USB class driver初始化入口點(diǎn);
f.USB class driver調(diào)用usbdlnitialize()。
]]>
1引言
隨著網(wǎng)絡(luò)技術(shù)的成熟,以太網(wǎng)已成為各種控制系統(tǒng)接口互連的主要媒介。在某些特殊的應(yīng)用場(chǎng)合,為了提高系統(tǒng)的可靠性和抗毀性,需采用雙冗余網(wǎng)絡(luò)技術(shù)。在雙冗余網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)都采用兩塊網(wǎng)卡(或單板雙卡),中間用兩個(gè)HUB或交換機(jī)互連。當(dāng)某個(gè)節(jié)點(diǎn)一塊網(wǎng)卡故障,或網(wǎng)線損壞,或其中一個(gè)HUB或交換機(jī)故障時(shí),網(wǎng)絡(luò)仍能正常運(yùn)作。
雙冗余網(wǎng)絡(luò)雖有兩塊網(wǎng)卡,兩條通道,但對(duì)于高層應(yīng)用系統(tǒng)來(lái)說(shuō),仍呈現(xiàn)單網(wǎng)卡的特征。具體來(lái)講,每個(gè)節(jié)點(diǎn)的兩塊網(wǎng)卡只能有一個(gè)物理地址,一個(gè)IP地址,否則網(wǎng)絡(luò)就不能進(jìn)行正常通信。
現(xiàn)在大多數(shù)操作系統(tǒng)(如Windows、Unix、Linux等)均支持多網(wǎng)卡,但均非冗余設(shè)計(jì),每塊網(wǎng)卡都有獨(dú)立的物理地址和IP地址,以獨(dú)立的形式讓?xiě)?yīng)用系統(tǒng)使用。根據(jù)目前海軍對(duì)高性能實(shí)時(shí)系統(tǒng)的要求,我們對(duì)VxWorks環(huán)境下的雙網(wǎng)卡的切換以及冗余備份的設(shè)計(jì)方法及要點(diǎn)進(jìn)行介紹。
2VxWorks介紹[1][2][3]
VxWorks操作系統(tǒng)是一種具有工業(yè)領(lǐng)導(dǎo)地位的高性能嵌入式實(shí)時(shí)操作系統(tǒng),是嵌入式開(kāi)發(fā)環(huán)境Tornado的關(guān)鍵組成部分,它為程序員提供了良好的可靠性和卓越的實(shí)時(shí)性,因此被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中。
就廣泛使用的Unix和Windows操作系統(tǒng)來(lái)說(shuō),它們都是很好的應(yīng)用開(kāi)發(fā)和交互式應(yīng)用的操作系統(tǒng)平臺(tái),然而他們并不適合于實(shí)時(shí)應(yīng)用。而從另一方面考慮,以前出現(xiàn)的實(shí)時(shí)操作系統(tǒng)都沒(méi)有為應(yīng)用開(kāi)發(fā)和應(yīng)用的非實(shí)時(shí)組件(譬如向GUI)提供很好的運(yùn)行環(huán)境。而Wind River的哲學(xué)是利用兩個(gè)相互協(xié)作的操作系統(tǒng)來(lái)互相補(bǔ)充對(duì)方的不足(譬如VxWorks和Windows),讓他們各盡所長(zhǎng)。VxWorks為應(yīng)用提供實(shí)時(shí)性,而主機(jī)被用來(lái)進(jìn)行應(yīng)用開(kāi)發(fā)和運(yùn)行非實(shí)時(shí)的應(yīng)用程序。
3冗余切換
在系統(tǒng)的運(yùn)行中設(shè)備由于硬件或軟件原因出現(xiàn)故障是時(shí)有發(fā)生的事。采用有效的防錯(cuò)容錯(cuò)機(jī)制對(duì)一個(gè)需要穩(wěn)定運(yùn)行的系統(tǒng)是必需的。冗余備份技術(shù)是對(duì)容易出錯(cuò)的硬件設(shè)備進(jìn)行冗余備份。當(dāng)其中一個(gè)設(shè)備由于某種原因不能正常工作時(shí),另一個(gè)設(shè)備馬上就可以代替這個(gè)設(shè)備完成相同的功能。本文只是針對(duì)網(wǎng)絡(luò)因素導(dǎo)致系統(tǒng)故障的情況分析對(duì)網(wǎng)絡(luò)適配器的一種可行的錯(cuò)誤保護(hù)機(jī)制。
通常如果在某一系統(tǒng)中安裝兩塊網(wǎng)卡,它們分別有不同的物理和IP地址。當(dāng)其中一塊網(wǎng)卡出現(xiàn)故障時(shí),另一塊網(wǎng)卡不能實(shí)時(shí)地代替它繼續(xù)工作,這是因?yàn)樗鼈兊奈锢淼刂凡煌运荒芙邮艿桨l(fā)向前一塊網(wǎng)卡的數(shù)據(jù)。但在對(duì)網(wǎng)絡(luò)通信可靠性要求高的系統(tǒng)中,需要對(duì)網(wǎng)卡進(jìn)行雙冗余備份,一塊網(wǎng)卡在正常工作時(shí)使用,另一塊網(wǎng)卡作為備份。備份用的網(wǎng)卡不發(fā)送或接收數(shù)據(jù),但已經(jīng)處于激活狀態(tài)。在正常通信的網(wǎng)卡出現(xiàn)故障時(shí),備份用的網(wǎng)卡能實(shí)時(shí)地、自動(dòng)地切換過(guò)來(lái)繼續(xù)工作。顯然,這就要求兩塊網(wǎng)卡只能使用同一個(gè)物理地址和同一個(gè)IP地址。從應(yīng)用程序的角度看,只會(huì)看見(jiàn)一塊網(wǎng)卡在工作。應(yīng)用程序不關(guān)心是哪塊網(wǎng)卡在工作,也不關(guān)心網(wǎng)卡之間是如何切換的。
在VxWorks系統(tǒng)中,相同類(lèi)型的網(wǎng)卡使用同一個(gè)驅(qū)動(dòng)程序,網(wǎng)卡之間由NDIS提供的句柄來(lái)區(qū)別。NDIS調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),都會(huì)把網(wǎng)卡的句柄傳入函數(shù)中。這就為在驅(qū)動(dòng)程序中實(shí)現(xiàn)冗余備份提供了基礎(chǔ)。雙網(wǎng)卡驅(qū)動(dòng)程序?qū)崿F(xiàn)后與高層協(xié)議驅(qū)動(dòng)程序綁定在一起,對(duì)應(yīng)用程序完全透明。因此要實(shí)現(xiàn)網(wǎng)卡的雙冗余備份,最理想的辦法是在NIC驅(qū)動(dòng)程序中實(shí)現(xiàn)。但是如果采取這樣的方式我們必須要有VxWorks下的所用網(wǎng)卡的驅(qū)動(dòng)程序,而對(duì)于一般的用戶而言,開(kāi)發(fā)這樣一個(gè)驅(qū)動(dòng)程序的難度是很大的。目前也有一些研究單位完成了這些工作,但是它們要求的價(jià)格過(guò)高,軟硬件共需要15000元左右,這對(duì)于一般小型用戶是比較高的。所以我們選擇在基本不影響冗余備份效果的基礎(chǔ)上,在高層的用戶程序中實(shí)現(xiàn)這一目標(biāo)。
在早期的VxWorks5.1.x中,系統(tǒng)是不支持多網(wǎng)卡的。通常,VxWorks在啟動(dòng)時(shí)僅僅對(duì)引導(dǎo)它啟動(dòng)的那塊網(wǎng)卡進(jìn)行初始化。如果需要在某一特定的目標(biāo)機(jī)上從一塊網(wǎng)卡換到另一塊網(wǎng)卡(例如從ene型換到ENP型的網(wǎng)卡),我們可以通過(guò)系統(tǒng)提供的函數(shù)以及來(lái)實(shí)現(xiàn)網(wǎng)卡間的切換。我們所需要做的是連接所需要的網(wǎng)卡并刪除前一個(gè)網(wǎng)卡的路由。我們可以調(diào)用特定網(wǎng)卡的連接函數(shù):enpattach(),enettach()等等。例如enpattach()函數(shù)為網(wǎng)卡連接中斷并建立enpsoftc,系統(tǒng)將為該網(wǎng)卡作相應(yīng)的初始化。
enpattach (0,0xffde0000,192,3);
/*參數(shù)依次為:網(wǎng)卡在系統(tǒng)中的單元號(hào),enp's的共享內(nèi)存地址,要連接的中斷向量,中斷級(jí)*/
需要說(shuō)明的是,在VxWorks 5.1下雖然這些連接函數(shù)都有一個(gè)unitNum參數(shù),似乎可以支持多個(gè)網(wǎng)卡。但其實(shí)并非這樣,在后面的敘述中我們可以看到它沒(méi)有IP MAX UNITS這個(gè)宏的定義,所以并不支持多網(wǎng)卡,unitNum的值一直是0,讀者們可以在源代碼中查看一下。
因?yàn)楫?dāng)VxWorks啟動(dòng)時(shí)它將一個(gè)缺省的網(wǎng)絡(luò)接口加載到網(wǎng)絡(luò)接口表中,所以在連接到需要的網(wǎng)卡后需要再調(diào)用ifRouteDelete()函數(shù)以刪除連接到某一指定網(wǎng)卡上的路由。
這樣就完成了VxWorks5.1下多網(wǎng)卡之間的的切換。
就VxWorks 5.4來(lái)說(shuō),它本身是支持多網(wǎng)卡的。以下我們描述SBS PC104系統(tǒng)如何在VxWorks下支持多個(gè)網(wǎng)絡(luò)適配器的軟件冗余切換(以ne2000型為例)。
首先我們需要通過(guò)網(wǎng)卡配置程序?qū)τ布h(huán)境中的所有網(wǎng)絡(luò)適配器進(jìn)行IO基址和IO中斷的配置。本文假設(shè)系統(tǒng)中只有兩個(gè)網(wǎng)絡(luò)適配器,其IO基址和IO中斷號(hào)如下所述。實(shí)際系統(tǒng)中可能會(huì)有多個(gè)網(wǎng)絡(luò)適配器,其配置方法可依法類(lèi)推,只要網(wǎng)卡的IO基址和IO中斷不會(huì)和系統(tǒng)中的其他設(shè)備沖突即可。
圖2 引入中級(jí)調(diào)度的進(jìn)程調(diào)度的調(diào)度隊(duì)列模型
4 VxWorks 實(shí)時(shí)內(nèi)核Wind 調(diào)度分析Wind 內(nèi)核缺省調(diào)度機(jī)制為基于優(yōu)先級(jí)的搶占式調(diào)度。采用這種機(jī)制時(shí),系統(tǒng)把處理機(jī)分配給優(yōu)先級(jí)最高的進(jìn)程,使之執(zhí)行。一旦出現(xiàn)了另一個(gè)優(yōu)先級(jí)更高的進(jìn)程時(shí),進(jìn)程調(diào)度程序剝奪當(dāng)前任務(wù)的執(zhí)行,將處理機(jī)分配給高優(yōu)先級(jí)任務(wù)。而在相同優(yōu)先級(jí)的多個(gè)任務(wù)之間,采用時(shí)間片輪
轉(zhuǎn)調(diào)度機(jī)制。采用這種機(jī)制時(shí),當(dāng)一個(gè)任務(wù)到達(dá)時(shí),它被排在輪轉(zhuǎn)隊(duì)列的后面,等待分配給自己的間片的到來(lái),如果在時(shí)間片內(nèi)沒(méi)有結(jié)束,則再等待屬于自己的時(shí)間片的到來(lái),直到任務(wù)完成。
4. 1 基于優(yōu)先級(jí)的搶占式調(diào)度
采用基于優(yōu)先級(jí)的搶占式調(diào)度,系統(tǒng)中每個(gè)任務(wù)都有一個(gè)介于最高0 到最低255 之間的優(yōu)先級(jí)。任一時(shí)刻,系統(tǒng)內(nèi)核一旦發(fā)現(xiàn)一個(gè)優(yōu)先級(jí)更高的任務(wù)轉(zhuǎn)變?yōu)榫途w態(tài),內(nèi)核就保存當(dāng)前任務(wù)的上下文并把當(dāng)前任務(wù)狀態(tài)轉(zhuǎn)換為阻塞態(tài),同時(shí)切換到這個(gè)高優(yōu)先級(jí)任務(wù)的上下文執(zhí)行。如圖3 ,低優(yōu)先級(jí)的task1 被中優(yōu)先級(jí)的task2 搶占,task2又被高優(yōu)先級(jí)的task3 搶占。
點(diǎn)擊看原圖
圖3 基于優(yōu)先級(jí)的搶占式調(diào)度
4. 2 輪轉(zhuǎn)調(diào)度算法
采用輪轉(zhuǎn)調(diào)度算法,系統(tǒng)讓處于就緒態(tài)的優(yōu)先級(jí)相同的一組任務(wù)依次輪流執(zhí)行預(yù)先確定長(zhǎng)度的時(shí)間片。這是一種處理機(jī)平均分配的方法。如果不使用輪轉(zhuǎn)調(diào)度算法,優(yōu)先級(jí)相同的一組任務(wù)中第一個(gè)獲得處理機(jī)的任務(wù)將不會(huì)被阻塞而獨(dú)占處理機(jī),如果沒(méi)有阻塞或其他情況發(fā)生,它不會(huì)放棄處理機(jī)的使用權(quán)。如圖4 , 相同優(yōu)先級(jí)的task1 、task2 和task3 平均分配預(yù)先確定的處理機(jī)時(shí)間片。
點(diǎn)擊看原圖
圖4 優(yōu)先級(jí)相同輪轉(zhuǎn)調(diào)度
4. 3 基于優(yōu)先級(jí)的搶占式調(diào)度與輪轉(zhuǎn)調(diào)度相結(jié)合有時(shí),基于優(yōu)先級(jí)的搶占式調(diào)度可與輪轉(zhuǎn)調(diào)度相結(jié)合。當(dāng)優(yōu)先級(jí)相同的一組任務(wù)依次輪流平均分配處理機(jī)時(shí),若有高優(yōu)先級(jí)的任務(wù)轉(zhuǎn)變?yōu)榫途w態(tài)則可搶占該組任務(wù)。直到再一次符合執(zhí)行條件時(shí),該組任務(wù)才可再次共享處理機(jī)。如圖5 ,相同優(yōu)先級(jí)的task1 、task2 和task3 輪流占有處理機(jī)時(shí),高于該組優(yōu)先級(jí)的task4 搶占處理機(jī),等task4執(zhí)行結(jié)束,該組任務(wù)再次共享處理機(jī)。
]]>