新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > VxWorks下的同類USB設(shè)備管理方法

VxWorks下的同類USB設(shè)備管理方法

作者: 時間:2013-10-08 來源:網(wǎng)絡(luò) 收藏
  引言

  VxWoAs是美國Wind River System(WRS)公司開發(fā)的嵌入式實時操作系統(tǒng)。中的I/O子系統(tǒng)為應(yīng)用程序提供了簡單、統(tǒng)一、與設(shè)備無關(guān)的訪問接口。I/O系統(tǒng)內(nèi)部采用設(shè)備列表、驅(qū)動程序列表和文件描述符表來實現(xiàn)對不同設(shè)備的管理與訪問,從而為開發(fā)通用外部設(shè)備驅(qū)動程序提供了便利。然而在一些專用系統(tǒng)上,為了縮短設(shè)備的響應(yīng)時間,提高設(shè)備的讀取速度,有必要將設(shè)備與I/O系統(tǒng)獨立起來。由于屬于微內(nèi)核,所有的程序均運行在同一線性地址空間,這也為設(shè)備與I/O系統(tǒng)的獨立提供了條件?;?a class="contentlabel" href="http://www.butianyuan.cn/news/listbylabel/label/VxWorks">VxWorks的I/O子系統(tǒng)的思想,本文提出了一種在VxWorks下對多個設(shè)備進行管理的設(shè)計方案。該方案可使得對設(shè)備的訪問獨立于I/O子系統(tǒng)。

  1 VxW0rks的I/O子系統(tǒng)

  VxWorks I/O系統(tǒng)內(nèi)部對設(shè)備的管理主要通過三張表來實現(xiàn),即驅(qū)動程序列表、設(shè)備列表和文件描述符表。其中驅(qū)動程序列表用來管理已注冊的設(shè)備驅(qū)動程序,它的大小是固定的,有NUM DRIVERS項,每一項對應(yīng)驅(qū)動程序的入口點,當(dāng)應(yīng)用程序調(diào)用標準I/O接口函數(shù)時,I/O子系統(tǒng)便可通過驅(qū)動程序列表檢索到設(shè)備的驅(qū)動程序,從而實現(xiàn)對指定設(shè)備的訪問、發(fā)送、接收等操作。系統(tǒng)可利用iosDrvInstall()注冊設(shè)備驅(qū)動程序,并將設(shè)備的人口函數(shù)加入到驅(qū)動程序列表。同時返回一個drvnum驅(qū)動程序號,并將其作為設(shè)備描述符的一部分,從而以此把設(shè)備與其驅(qū)動程序聯(lián)系起來。I/O子系統(tǒng)采用鏈表對所有設(shè)備進行管理,該鏈表稱之為設(shè)備列表。調(diào)用iosDevAdd ()可向系統(tǒng)添加設(shè)備,添加設(shè)備時,應(yīng)指明設(shè)備名稱及驅(qū)動程序索引號,該索引號就是iosDrvInstall ()返回的索引號。在VxWorks中,一個設(shè)備可以被多次打開,但對于每一次打開,系統(tǒng)將利用一個文件描述符來區(qū)分,本系統(tǒng)將會維持一張文件描述符表,該表的每一項記錄了與設(shè)備對應(yīng)的驅(qū)動程序號和設(shè)備ID,這樣,就會文件描述符與驅(qū)動程序、以及設(shè)備之間建立一種聯(lián)系。這樣,在利用標準I/O函數(shù)進行讀寫時,就可以根據(jù)文件描述符從文件描述符表中找到對應(yīng)的驅(qū)動程序的人口與設(shè)備ID。VxWorks中的這三張表的關(guān)系如圖1所示。


  2 USB方案設(shè)計

  設(shè)計獨立于I/O系統(tǒng)的USB設(shè)備驅(qū)動程序的設(shè)計思想主要基于兩點,第一是用戶自己管理設(shè)備。第二是通過驅(qū)動程序直接向應(yīng)用程序提供可用于讀寫設(shè)備的接口函數(shù)。由于設(shè)備獨立于I/O系統(tǒng),用戶需要自己設(shè)計一種設(shè)備管理方法,以便對多個接入的USB設(shè)備進行合理的管理。然而由于不存在設(shè)備驅(qū)動程序列表,故在設(shè)計時還需要有一種方法來解決設(shè)備的訪問問題。

  2.1 USB設(shè)備描述符

  設(shè)備描述符實際上是一個數(shù)據(jù)結(jié)構(gòu),可在系統(tǒng)中作為一個邏輯結(jié)構(gòu)體。它是一個具體設(shè)備的抽象??膳c一個物理設(shè)備相對應(yīng),是參與設(shè)備管理、訪問的主要結(jié)構(gòu)體。鑒于I/O子系統(tǒng)對設(shè)備的管理,在對多個USB設(shè)備進行管理時,對于設(shè)備的存儲,可采用雙向鏈表來進行管理,稱之為設(shè)備列表。鏈表對USB設(shè)備的管理主要通過設(shè)備頭(USB_BEV_HDR)來實現(xiàn)。USB設(shè)備頭是一個與具體設(shè)備無關(guān)的數(shù)據(jù)結(jié)構(gòu),它由一個鏈表節(jié)點和設(shè)備名稱組成。節(jié)點中包含指向有前一個和下一個USB設(shè)備的設(shè)備頭的鏈表節(jié)點。實際上,每一個USB設(shè)備都會有更多的數(shù)據(jù)存儲在更大的數(shù)據(jù)結(jié)構(gòu)中。這個結(jié)構(gòu)就是設(shè)備描述符,而USB設(shè)備頭只是做為USB設(shè)備描述符的起始部分。設(shè)備頭的數(shù)據(jù)結(jié)構(gòu)(USB_DEV_HDR)如下:


  其中,USB_DL_NODE是一個鏈表節(jié)點,它由兩個鏈表節(jié)點指針域組成。分別指向前一個和下一個設(shè)備的鏈表節(jié)點。其數(shù)據(jù)結(jié)構(gòu)如下:


  這樣,就可以把USB設(shè)備的描述符劃分為兩部分,其中一部分與具體設(shè)備無關(guān),稱為設(shè)備頭:另外一部分是與具體設(shè)備相關(guān)的設(shè)備特殊數(shù)據(jù),設(shè)備相關(guān)部分包括USB設(shè)備的Node ID、USB管道句柄、端點地址、狀態(tài)等信息。其結(jié)構(gòu)如圖2所示。設(shè)備無關(guān)部分主要用于設(shè)備管理,而設(shè)備相關(guān)部分則用于對設(shè)備的訪問。


上一頁 1 2 3 下一頁

關(guān)鍵詞: VxWorks 同類USB 設(shè)備管理

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉