波多在线播放_激情深爱五月_久久欧美精品_成人超碰_国产久_www.pixiv.moe


曙海教育集團(tuán)論壇VxWorks專區(qū)VxWorks技術(shù)討論區(qū) → vxworks(接上)


  共有8733人關(guān)注過(guò)本帖樹(shù)形打印

主題:vxworks(接上)

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


加好友 發(fā)短信
等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
vxworks(接上)  發(fā)帖心情 Post By:2010-11-17 10:39:27

 (2)“熱插拔”調(diào)用。執(zhí)行順序與其意義如下:
Boot Code里調(diào)用:
a.USB class driver初始化入口點(diǎn);
b.USB class driver調(diào)用usbdlnitialize();
Hot-Swap code調(diào)用:
c.Hot-Swap 鑒別USB主控制器的連接或斷開(kāi);
d.Usbdlnitialize();
e.UsbdPciConfigHeaderGet():讀USB主控制器配置頭;
f.UsbdHedAttaeh():連接HCD,將其作為特定的主控制器。
   

       因?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,再注銷。
       注冊(cè):usbdClientRegister("USBD_TEST',&usbdClientHandle);
       注銷: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)生什么類型的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è)特定類型的設(shè)備插入或拔出時(shí),USBD client都通知上一層。利用調(diào)用usbdDynamicAttachRegister()操作,client可以指定一個(gè)callback操作,以便可以獲取這樣的通知。
   

       USB設(shè)備類型用class,subclass,protocol來(lái)區(qū)別。標(biāo)準(zhǔn)的USB 類在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)類驅(qū)動(dòng)usbkeyboardLib, 注冊(cè)了Human Device Interface (HID) 類,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()操作。它們被一起稱作總線編號(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ù)交換。傳輸種類(分為控制、塊、中斷和同步傳輸)用一個(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之間的通道被稱作管道(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è),注銷,創(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ù)難題


支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

vxworks(接上)








簽名
主站蜘蛛池模板: 欧美国产在线观看 | 羞羞视频在线免费 | 欧美一区二区三区视频 | 国产欧美一区二区三区久久人妖 | 免费精品美女久久久久久久久久 | 高清国产一区二区三区四区五区 | 奇米影视7777久久精品人人爽 | 碰碰碰精品视频在线观看 | 天天舔天天舔 | 97精品国产综合久久 | 最近最新中文字幕 | 午夜视频在线网站 | 美国一级特色大黄 | 亚洲AV国产精品无码A片 | 日日夜夜天天人人 | 暴力强行进如hdxxx | 日韩精品一区二区三区在线观看 | 亚洲欧美在线免费观看 | 99亚洲精品色情无码久久 | 亚洲一区精品在线 | 欧美日韩成人在线观看 | 日本高清色www| 99精品国产免费久久国语 | 国产成人免费 | 一级毛片视频在线观看 | 欧美午夜精品一区二区蜜桃 | 精品久久久久久久久久久久久久 | 日韩三区 | 日韩精品视频免费观看 | 日本高清天码一区在线播放 | 国产成人免费全部网站 | 欧美精品一二三区 | 久久精品一区二区免费播放 | 成人在线视频一区 | 啪一啪在线视频 | 亚洲欧美精品 | 日本99热 | 欧美日韩在线观看视频 | 国产激情久久久久久熟女老人AV | 成人免费一级毛片在线播放视频 | 黄视频免费在线 |