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