資源描述:
《linux的usb總線(xiàn)驅(qū)動(dòng)分析》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、USB大存儲(chǔ)設(shè)備這里所說(shuō)的大存儲(chǔ)設(shè)備包括U盤(pán)、讀卡器、USB接口的光驅(qū)等其他塊存儲(chǔ)設(shè)備。lUSB接口大存儲(chǔ)設(shè)備操作流程它們被看做是SCSI接口設(shè)備。當(dāng)用戶(hù)從設(shè)備上讀寫(xiě)數(shù)據(jù)時(shí),文件系統(tǒng)將讀寫(xiě)操作傳送到SCSI協(xié)議層,SCSI協(xié)議層將讀寫(xiě)請(qǐng)求封裝成USB請(qǐng)求塊(URB)通過(guò)USB接口傳遞給設(shè)備,USB設(shè)備從URB中解析處SCSI協(xié)議命令后再操作塊設(shè)備。lUSB接口大存儲(chǔ)設(shè)備設(shè)計(jì)思路設(shè)計(jì)一個(gè)控制線(xiàn)程,注冊(cè)這個(gè)線(xiàn)程為虛擬SCSI控制器,這個(gè)線(xiàn)程無(wú)論在設(shè)備插入或刪除時(shí)都是作為一個(gè)SCSI節(jié)點(diǎn)存在。這樣的話(huà),設(shè)備在移去然后再重
2、新插上時(shí)對(duì)應(yīng)/dev中的同一個(gè)節(jié)點(diǎn)。當(dāng)一個(gè)設(shè)備被接入時(shí),控制線(xiàn)程從SCSI中間層代碼得到命令??刂凭€(xiàn)程接受命令,再檢查后送命令到協(xié)議處理函數(shù)。這些處理函數(shù)負(fù)責(zé)再寫(xiě)命令到設(shè)備可以接受的形式,然后送到傳輸處理函數(shù)。傳輸處理函數(shù)負(fù)責(zé)將命令送到設(shè)備、交換數(shù)據(jù),并接著得到設(shè)備的狀態(tài)。Bulk-Only傳輸協(xié)議和SCSI命令塊集是具有Linux系統(tǒng)的嵌入設(shè)備的兩種模式。1.Bulk-Only傳輸協(xié)議Bulk-Only傳輸協(xié)議是USB大容量存儲(chǔ)器類(lèi)中的USB批量數(shù)據(jù)傳輸協(xié)議,它定義了僅通過(guò)批量端點(diǎn)傳輸?shù)拿?、?shù)據(jù)和狀態(tài)。l命令塊
3、數(shù)據(jù)包裹器CBW發(fā)送命令,使用命令狀態(tài)數(shù)據(jù)包裹器接受返回的狀態(tài)。CBW是一個(gè)包含命令塊和相關(guān)信息的數(shù)據(jù)包。格式是這樣的:ByteBit765432100~3dCBWSignature4~7dCBWTag8~11(08h~0Bh)dCBWTataTransfenLength12(0Ch)bmCBWFlags13(0Dh)Reserved(0)bCBWLUN14(0Eh)Reserved(0)bCBWCBLength15~30(0Fh~1Eh)CBWCB它用buld_cb_wrap的數(shù)據(jù)結(jié)構(gòu)描述(drivers/usb
4、/storage/transport.h)sturctbulk_cb_wrap{_le32Signature;//簽名’USBC’_u32Tag;//每個(gè)命令唯一的ID_le32DataTransferLength;//數(shù)據(jù)大小_u8Flags;//在bit0中表示方向_u8Lun;//表示LUN(SCSI邏輯單元)正常為0_u8Length;//數(shù)據(jù)傳輸長(zhǎng)度_u8CDB[16];//傳輸?shù)拿钭止?jié)};l命令狀態(tài)數(shù)據(jù)包裹器CSW是一個(gè)包含塊狀態(tài)的數(shù)據(jù)包,格式如下:ByteBit765432100~3dCSWSign
5、ature4~7dCSWTag8~11(Bh)dCSWResidue12(Ch)dCSWStatusCSW用如下數(shù)據(jù)結(jié)構(gòu)bulk_cs_wrap來(lái)描述(drivers/usb/storage/transfer.h)structbulk_cs_wrap{_le32Signature;//簽名’USBS’_u32Tag;//與CBW中Tag一樣_le32Residue;//沒(méi)有傳輸完的數(shù)據(jù)量_u8Status;//操作狀態(tài)標(biāo)示,如成功、失敗等_u8Filler[18];}l傳輸過(guò)程當(dāng)傳輸方向是從設(shè)備到主機(jī)時(shí),則當(dāng)CBW
6、發(fā)送成功后,設(shè)備的In端點(diǎn)讀取CBW中規(guī)定長(zhǎng)度的數(shù)據(jù)CBWCB;當(dāng)傳輸方向是從主機(jī)到設(shè)備是,則當(dāng)CBW發(fā)送成后,向設(shè)備的Out端點(diǎn)發(fā)送CBW中規(guī)定長(zhǎng)度的數(shù)據(jù)CBWCB。CBWCB是命令塊數(shù)據(jù),是遵循某一規(guī)范的命令集。當(dāng)主機(jī)與設(shè)備之間的數(shù)據(jù)傳送完畢后,主機(jī)還需從設(shè)備的In端點(diǎn)讀取傳送狀態(tài),并根據(jù)接收的CSW數(shù)據(jù)包判斷出通信是否正常。2.SCSI體系結(jié)構(gòu)模型及命令描述塊SCSIArchitectureModel是一個(gè)SCSII/O系統(tǒng)的抽象模型,可以應(yīng)用到所有的SCSI接口、協(xié)議、存取方法和設(shè)備上。SCSI系統(tǒng)使用的是
7、客戶(hù)-服務(wù)器模型,PC是客戶(hù)機(jī),SCSI硬盤(pán)是服務(wù)器,客戶(hù)機(jī)提供面向塊的設(shè)備所理解的命令,服務(wù)器完成命令的具體操作。域SCSI設(shè)備服務(wù)分發(fā)子系統(tǒng)目標(biāo)器啟動(dòng)器服務(wù)分發(fā)接口連接子系統(tǒng)任務(wù)管理器LUN應(yīng)用客戶(hù)設(shè)備服務(wù)器任務(wù)集(隊(duì)列)l域:一個(gè)SCSI域的結(jié)構(gòu)化模型是一個(gè)I/O子系統(tǒng),它由幾個(gè)SCSI設(shè)備組成,這些設(shè)備彼此之間通過(guò)一個(gè)服務(wù)分發(fā)子系統(tǒng)進(jìn)行通信l服務(wù)分發(fā)子系統(tǒng)(ServiceDeliverySubsystem,SDS):由一個(gè)連接子系統(tǒng)和至少兩個(gè)服務(wù)分發(fā)接口(SDI)組成,它的任務(wù)是做到對(duì)客戶(hù)機(jī)和服務(wù)器之間請(qǐng)求
8、和相應(yīng)進(jìn)行無(wú)差錯(cuò)傳輸。連接子系統(tǒng)是物理總線(xiàn),包括它的電纜、連接器和電氣特性。服務(wù)分發(fā)接口提供了相應(yīng)的協(xié)議。l啟動(dòng)器(initiator)和目標(biāo)器(target):可以發(fā)送SCSI命令和任務(wù)管理請(qǐng)求的SCSI設(shè)備稱(chēng)為啟動(dòng)器,可以執(zhí)行SCSI命令和任務(wù)管理請(qǐng)求的SCSI設(shè)備稱(chēng)為目標(biāo)器。l任務(wù)管理器:它管理控制著一個(gè)或多個(gè)任務(wù)的執(zhí)行,并對(duì)任務(wù)管理請(qǐng)求作出反應(yīng)。任務(wù)