假設(shè)你要【模擬】一個(gè) USB 設(shè)備:
這個(gè) USB 設(shè)備含有廠家信息:它記錄在設(shè)備描述符里,所以設(shè)備描述符應(yīng)該由你提供
這個(gè)芯片可能有多種配置,這也是由你決定,所以配置描述符應(yīng)該由你提供
某個(gè)配置下多個(gè)接口,接口就是功能,Linux 內(nèi)核里事先提供了很多功能的驅(qū)動(dòng)程序,所以:接口描述符是內(nèi)核提供的
某個(gè)接口下需要什么端點(diǎn),也是內(nèi)核里各類功能的驅(qū)動(dòng)程序提供的
以 zero.c 為例:
配置 1:loopback,Host 寫數(shù)據(jù)給它,就可以讀出原樣的數(shù)據(jù)
配置 2:sourcesink,Host 寫數(shù)據(jù)給它(它只是記錄下數(shù)據(jù)),Host 還可以讀數(shù)據(jù)(讀到的都是0)
從下到上涉及這些文件:
閱讀源碼時(shí),入口函數(shù)是usb_composite_probe(&zero_driver):
函數(shù)調(diào)用過(guò)程中主要的函數(shù)如下,重點(diǎn)關(guān)注“xxx_bind”函數(shù),bind 就是初始化的意思:
usb_composite_probe
composite_bind
zero_bind
sourcesink_bind/loopback_bind
深入解讀描述符的構(gòu)造過(guò)程,可以得到下面的圖:
構(gòu)造出一個(gè) usb_composite_dev 結(jié)構(gòu)體
它把各層串聯(lián)起來(lái),里面構(gòu)造有設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
對(duì)于實(shí)現(xiàn)USB功能的項(xiàng)目,不管是實(shí)現(xiàn)CDC,大容量存儲(chǔ)、HID等都必須使用實(shí)現(xiàn)USB標(biāo)準(zhǔn)描述符,從而實(shí)現(xiàn)USB枚舉過(guò)程。這里共享一個(gè)USB描述符的詳解。
發(fā)表于 06-12 14:46
??
在DM368的開(kāi)發(fā)包目錄下/psp/flash-utils/DM36x/GNU:執(zhí)行make 可以省成UBL:ubl_DM36x_nand.bin ;我想問(wèn)的是如何添加UBL 的描述符?燒寫到
發(fā)表于 06-21 08:48
`標(biāo)準(zhǔn)的 USB 描述符包括設(shè)備(Device)描述符、配置(Configuration)描述符、接口(Interface)描述符、端點(diǎn)(Endpoint)
發(fā)表于 11-12 09:23
usb標(biāo)準(zhǔn)描述符之技巧
USB是個(gè)通用的總線,端口都是統(tǒng)一的。但是USB設(shè)備卻各種各樣,例如USB鼠標(biāo),USB鍵盤,U盤等等,那么USB主機(jī)是如何識(shí)別出不同的設(shè)備的呢?這就要依賴
發(fā)表于 04-12 11:09
?1521次閱讀
在USB中,USB HOST是通過(guò)各種描述符來(lái)識(shí)別設(shè)備的,有設(shè)備描述符,配置描述符,接口描述符,端點(diǎn)描述符,字符串
發(fā)表于 04-12 11:13
?4006次閱讀
Descriptor即描述符,是一個(gè)完整的數(shù)據(jù)結(jié)構(gòu),可以通過(guò)C語(yǔ)言等編程實(shí)現(xiàn),并存儲(chǔ)在USB設(shè)備中,用于描述一個(gè)USB設(shè)備的所有屬性,USB主機(jī)是通過(guò)一系列命令來(lái)要求設(shè)備發(fā)送這些信息的。
發(fā)表于 07-16 09:39
?2621次閱讀
6.2 Linux中文件及文件描述符概述 在Linux中對(duì)目錄和設(shè)備的操作都等同于文件的操作,因此,大大簡(jiǎn)化了系統(tǒng)對(duì)不同設(shè)備的處理,提高了效率。Linux中的文件主要分為4種:普通文件、目錄文件
發(fā)表于 10-18 14:35
?0次下載
本文檔的主要內(nèi)容詳細(xì)介紹的是USB設(shè)備鍵值表描述符說(shuō)明資料免費(fèi)下載包括了:1.設(shè)備描述符的結(jié)構(gòu),2. 配置描述符的結(jié)構(gòu),3. 接口描述符的結(jié)構(gòu),4. HID
發(fā)表于 07-16 16:56
?35次下載
USB 是個(gè)通用的總線,端口都是統(tǒng)一的。但是USB 設(shè)備卻各種各樣,例如USB 鼠標(biāo), USB鍵盤, U盤等等,那么USB 主機(jī)是如何識(shí)別出不同的設(shè)備的呢?這就要依賴于描述符了。USB 的描述符主要有設(shè)備描述符,配置
發(fā)表于 07-23 16:53
?8次下載
本文檔的主要內(nèi)容詳細(xì)介紹的是HID Descriptor Tool隱藏描述符工具應(yīng)用程序免費(fèi)下載。
發(fā)表于 01-08 08:00
?11次下載
文件描述符 進(jìn)程每打開(kāi)一個(gè)文件的時(shí)候,會(huì)獲得該文件的文件描述符,而后續(xù)的讀寫操作都把文件描述符作為參數(shù)。在用戶空間或者內(nèi)核空間,都是通過(guò)文件描述符來(lái)唯一地索引一個(gè)打開(kāi)的文件。文件
發(fā)表于 09-02 09:50
?1646次閱讀
以及行為呢?這就要通過(guò)描述符來(lái)實(shí)現(xiàn)了。那么什么是USB的描述符呢?其實(shí)就是一些傳遞的協(xié)議信息,比如設(shè)備的類型、廠商ID、產(chǎn)品ID、端點(diǎn)情況、版本號(hào)等信息。 既然描述符是協(xié)議信息,那么不同的版本也會(huì)有所不同,比如USB1.1協(xié)議定
發(fā)表于 12-02 14:41
?3915次閱讀
安裝好 gadget 驅(qū)動(dòng)程序后(比如 modprobe g_zero), 它只是構(gòu)造好了各類描述符。在設(shè)備的枚舉過(guò)程會(huì)讀取描述符。 使用 OTG 線連接電腦和開(kāi)發(fā)板時(shí),電腦軟件會(huì)執(zhí)行
發(fā)表于 07-13 11:38
?859次閱讀
前面我們介紹了描述符鏈表的工作模式,重點(diǎn)是了解環(huán)形鏈表是如何環(huán)形的,以及相關(guān)的寄存器。驅(qū)動(dòng)編寫就需要更進(jìn)一步,了解描述符的具體內(nèi)容,即4個(gè)描述符的每個(gè)字段的含義。
發(fā)表于 09-04 14:14
?2406次閱讀
學(xué)習(xí) Python 這么久了,說(shuō)起 Python 的優(yōu)雅之處,能讓我脫口而出的, Descriptor(描述符)特性可以排得上號(hào)。 描述符 是Python 語(yǔ)言獨(dú)有的特性,它不僅在應(yīng)用層使用,在語(yǔ)言
發(fā)表于 11-02 10:52
?969次閱讀
評(píng)論