假設(shè)你要【模擬】一個(gè) USB 設(shè)備:
這個(gè) USB 設(shè)備含有廠(chǎng)家信息:它記錄在設(shè)備描述符里,所以設(shè)備描述符應(yīng)該由你提供
這個(gè)芯片可能有多種配置,這也是由你決定,所以配置描述符應(yīng)該由你提供
某個(gè)配置下多個(gè)接口,接口就是功能,Linux 內(nèi)核里事先提供了很多功能的驅(qū)動(dòng)程序,所以:接口描述符是內(nèi)核提供的
某個(gè)接口下需要什么端點(diǎn),也是內(nèi)核里各類(lèi)功能的驅(qū)動(dòng)程序提供的
以 zero.c 為例:
配置 1:loopback,Host 寫(xiě)數(shù)據(jù)給它,就可以讀出原樣的數(shù)據(jù)
配置 2:sourcesink,Host 寫(xiě)數(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)描述符

-
嵌入式
+關(guān)注
關(guān)注
5193文章
20276瀏覽量
331736 -
Linux
+關(guān)注
關(guān)注
88文章
11681瀏覽量
218581 -
框架
+關(guān)注
關(guān)注
0文章
404瀏覽量
18353
發(fā)布評(píng)論請(qǐng)先 登錄
USB描述符詳解
UBL UBOOT 描述符
usb標(biāo)準(zhǔn)描述符之技巧
USB HID報(bào)告及報(bào)告描述符簡(jiǎn)介
Descriptor描述符解釋
Linux中文件及文件描述符概述
USB設(shè)備鍵值表描述符說(shuō)明資料免費(fèi)下載
USB各描述符之間的依賴(lài)是怎么樣的
隱藏描述符工具應(yīng)用程序免費(fèi)下載
Linux系統(tǒng)編程中的文件描述符調(diào)用
科普一下什么是USB的描述符
從獲取描述符的角度理解Gadget框架
基于DWC_ether_qos的以太網(wǎng)驅(qū)動(dòng)開(kāi)發(fā)-描述符格式介紹
Python的優(yōu)雅之處:Descriptor(描述符)
Gadget框架構(gòu)造描述符
評(píng)論