當前位置:首頁 > 嵌入式 > 嵌入式軟件

引言

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

1 VxW0rks的I/O子系統(tǒng)設備管理

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


2 USB設備管理方案設計

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

2.1 USB設備描述符

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


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


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


2.2設備列表設計

為了方便對設備的管理,USB設備列表可采用雙向鏈表結構,其作用是將所有USB設備的有關信息組織起來,從而實現(xiàn)對多個設備的鏈式管理。前面提到的設備描述符就是一個存儲了設備信息的數(shù)據(jù)結構。而所有USB設備描述符都是以設備頭數(shù)據(jù)結構開始的,這樣,就可以很方便地將設備描述符組成一個鏈表形式的設備列表。通常鏈表的數(shù)據(jù)結構如下:


圖3所示是一個空設備列表,而非空設備列表則如圖4所示。


對于同類USB設備,通常程序只維護一張設備列表,在注冊該USB設備驅動程序時,初始化設備列表為空,驅動程序只能被真正的注冊一次,因此,設備列表也只初始化一次。當驅動程序中的回調函數(shù)檢測到有設備動態(tài)接人時,系統(tǒng)會在創(chuàng)建設備、分配設備資源的同時將設備描述符加入到設備列表,而且只將其加入到設備列表的尾部。而在有設備動態(tài)移除時,驅動程序回調函數(shù)會捕獲移除動作,并根據(jù)設備的標識遍歷設備列表,以查找出移除的設備,然后將其描述符從設備列表中刪除。遍歷設備列表其實就是一個查找設備的過程。查找設備時,每一個設備都需要用唯一的一個標識來與其它設備區(qū)別,從而引出了設備的唯一標識問題。

2.3 USB設備的標識問題

同I/O系統(tǒng)標識設備一樣,對于USB設備的標識。也可以采用設備名來標識。這樣可以給用戶一個直觀的概念,而且便于記憶。利用設備頭(USB_DEV_HDR)中的name指針域可以為每一個接入的設備起一個名字。這樣,對于不同的設備,就可以用名字字符串來唯一區(qū)分,但這不利于快速訪問設備,因為在每次查找設備的時候對于每一個設備鏈表節(jié)點都要進行一次字符串比較,這樣便延長了查找設備的時間。針對USB設備及VxWorks下USB協(xié)議棧的特點,充分利用USBD對USB設備的標識,在設計中可采用USBD_NODEjD來標識設備。在VxWorks中的USB協(xié)議棧中。對每一個USB設備為其分配一個唯一的USBD_NODE_ID號。事實上,VxWorks USBD并不關心設備與哪一個USB主控制器相連,也不關心物理設備的連接細節(jié)以及地址分配,USBD通常只是采用USBD_NODE_ID來定位設備。因此,基于USBD對USB設備的定位方法,在采用鏈表對USB設備進行管理時,也可以采用USBD_NODE_ID來唯一標識一個USB設備。在用該方法標識設備時,可將USBD_NODE_ID nodeld作為USB設備描述符結構體的一個成員,其設備描述符結構改造如下:


由于USBD_NODE_ID是一個32位無符號整型數(shù),因此,在查找設備時,可以用switch case語句來完成。

2.4設備訪問技術

由于設備是獨立于I/O系統(tǒng)的,因此不存在驅動程序列表和文件描述符表。設計時,可采用驅動程序直接向應用程序提供可訪問設備的接口函數(shù),以替代驅動程序列表,而采用USBD_NODE_ID數(shù)組來存放多個USB設備的標識,以替代文件描述符表,如:USBD_NODE_ID usbd_node_id[MAX_DEV_NUM]。

對于同類USB設備,根據(jù)其Product ID的不同,可將其記為O、l、2……MAX_DEV_NUM號設備,并分別將其USBD_NODE_ID存放于數(shù)組的對應位置。這樣,在訪問設備時,就可利用設備號來代替文件描述符,例如在讀取0號設備時,由其索引值0,就可得到其USBD_NODE_ID為USBD_NODE_ID usbd_node_id[O],再從設備列表中查找出nodeld為usbd_node_id[O]的設備結構體,就可最終得到設備資源。通過USBD_NODE_ID數(shù)組來管理多個設備的nodeld如圖5所示。


在讀寫設備時??梢栽O備號作為設備的標識,并通過設備號在nodeld數(shù)組中得到設備的nodeId,再從設備列表中查找到具體的物理設備的描述符。從而得到設備資源并對設備進行訪問。以LM9833讀設備為例,其讀設備原型代碼如下:


其中,usbScanRead()是驅動程序向用戶應用程序提供的接口函數(shù),直接調用該函數(shù)即可讀取設備,其它的設備函數(shù)也是如此,其中設備號dev是由用戶根據(jù)不同設備的不同Product ID(PID)號制定的,這樣,當設備接入系統(tǒng)時,驅動程序就會根據(jù)其PID號判斷其設備號,并將該設備的nodeld值存放于數(shù)組的特定位置。由于此時設備始終處于就緒狀態(tài),用戶可以隨時對設備進行讀寫操作,而并不存在打開設備的操作。

讀寫設備時,首先要根據(jù)設備號dev從設備列表中查找出設備,并將其定位到具體的設備描述符上。在查找設備時,遍歷設備列表,就可找到節(jié)點設備描述符中nodeId與usbd_node_id[dev]相匹配的設備描述符結構體,并返回該結構體,然后再由設備描述符結構體得到設備的資源信息,從而實現(xiàn)對設備的讀寫。圖6所示是查找設備的一個簡單流程。


該方法屏蔽了復雜的驅動程序列表和文件描述符表,從而提供了一種快速定位和訪問設備的方法。這種方法在專用的系統(tǒng)中,對同類USB設備的訪問是非常高效的,但不具有通用性,也就是說,對于不同類別的設備。則需要另外一套同樣的機制來實現(xiàn)。

3 結束語

本文提出了一種獨立于VxWorks I/O系統(tǒng)的USB設備管理方法。該方法也是一種獨立于I/O系統(tǒng)的USB設備驅動程序設計模式,它對于在專用系統(tǒng)中同類USB設備的管理是非常有效的。通過對USB設備描述符、設備列表、以及應用程序訪問設備流程的設計,可以成功實現(xiàn)獨立于I/O系統(tǒng)的設備管理方法。這一種方法可以利用驅動程序直接向應用系統(tǒng)提供接口函數(shù)和nodeld數(shù)組。從而摒棄了I/O系統(tǒng)中復雜的驅動程序列表和文件描述符等概念。目前,這種獨立于VxWorks I/O系統(tǒng)的USB設備管理方法已在某大型掃描儀中得到應用,并取得了一定的經濟效益。



lele

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉