FunctionFS 描述符¶
以下描述了一些可以寫入 FFS gadget 的描述符。裝置和配置描述符由複合 gadget 處理,使用者不會將其寫入 FFS gadget。
描述符按照描述符頭部寫入 FFS gadget 中的“ep0”檔案。
描述符格式
偏移 |
名稱 |
型別 |
描述 |
0 |
magic |
LE32 |
FUNCTIONFS_DESCRIPTORS_MAGIC_V2 |
4 |
length |
LE32 |
整個資料塊的長度 |
8 |
flags |
LE32 |
functionfs_flags 的組合 |
eventfd |
LE32 |
eventfd 檔案描述符 |
|
fs_count |
LE32 |
全速描述符的數量 |
|
hs_count |
LE32 |
高速描述符的數量 |
|
ss_count |
LE32 |
超高速描述符的數量 |
|
os_count |
LE32 |
MS OS 描述符的數量 |
|
fs_descrs |
Descriptor[] |
全速描述符列表 |
|
hs_descrs |
Descriptor[] |
高速描述符列表 |
|
ss_descrs |
Descriptor[] |
超高速描述符列表 |
|
os_descrs |
OSDesc[] |
MS OS 描述符列表 |
根據設定的標誌,結構中可能會缺少各種欄位。任何無法識別的標誌都會導致整個塊被拒絕,並返回 -ENOSYS。
舊版描述符格式(自 3.14 起已棄用)
偏移 |
名稱 |
型別 |
描述 |
0 |
magic |
LE32 |
FUNCTIONFS_DESCRIPTORS_MAGIC |
4 |
length |
LE32 |
整個資料塊的長度 |
8 |
fs_count |
LE32 |
全速描述符的數量 |
12 |
hs_count |
LE32 |
高速描述符的數量 |
16 |
fs_descrs |
Descriptor[] |
全速描述符列表 |
hs_descrs |
Descriptor[] |
高速描述符列表 |
所有數字必須採用小端位元組序。
Descriptor[] 是一個有效的 USB 描述符陣列,其格式如下
偏移 |
名稱 |
型別 |
描述 |
0 |
bLength |
U8 |
描述符的長度 |
1 |
bDescriptorType |
U8 |
描述符型別 |
2 |
payload |
描述符的有效載荷 |
OSDesc[] 是一個有效的 MS OS 功能描述符陣列,具有以下格式之一
偏移 |
名稱 |
型別 |
描述 |
0 |
interface |
U8 |
相關介面編號 |
1 |
dwLength |
U32 |
描述符的長度 |
5 |
bcdVersion |
U16 |
當前支援:1 |
7 |
wIndex |
U16 |
當前支援:4 |
9 |
bCount |
U8 |
ext. compat. 的數量 |
10 |
Reserved |
U8 |
0 |
11 |
ExtCompat[] |
ext. compat. d. 列表 |
偏移 |
名稱 |
型別 |
描述 |
0 |
interface |
U8 |
相關介面編號 |
1 |
dwLength |
U32 |
描述符的長度 |
5 |
bcdVersion |
U16 |
當前支援:1 |
7 |
wIndex |
U16 |
當前支援:5 |
9 |
wCount |
U16 |
ext. compat. 的數量 |
11 |
ExtProp[] |
ext. prop. d. 列表 |
ExtCompat[] 是一個有效的擴充套件相容性描述符陣列,其格式如下
偏移 |
名稱 |
型別 |
描述 |
0 |
bFirstInterfaceNumber |
U8 |
介面索引或第一個 |
IAD 組中的介面 |
|||
1 |
Reserved |
U8 |
1 |
2 |
CompatibleID |
U8[8] |
相容 ID 字串 |
10 |
SubCompatibleID |
U8[8] |
子相容 ID 字串 |
18 |
Reserved |
U8[6] |
0 |
ExtProp[] 是一個有效的擴充套件屬性描述符陣列,其格式如下
偏移 |
名稱 |
型別 |
描述 |
0 |
dwSize |
U32 |
描述符的長度 |
4 |
dwPropertyDataType |
U32 |
1..7 |
8 |
wPropertyNameLength |
U16 |
bPropertyName 長度 (NL) |
10 |
bPropertyName |
U8[NL] |
此屬性的名稱 |
10+NL |
dwPropertyDataLength |
U32 |
bPropertyData 長度 (DL) |
14+NL |
bProperty |
U8[DL] |
此屬性的有效載荷 |
介面描述符¶
可以寫入標準 USB 介面描述符。最近的介面描述符的類/子類決定了接受的特定於類的描述符型別。
特定於類的描述符¶
僅接受最近介面描述符的類/子類的特定於類的描述符。以下是一些支援的特定於類的描述符。
DFU 功能描述符¶
當介面類為 USB_CLASS_APP_SPEC 且介面子類為 USB_SUBCLASS_DFU 時,可以提供 DFU 功能描述符。DFU 功能描述符在本編寫時在裝置韌體升級 (DFU) 的 USB 規範版本 1.1 中進行了描述。
-
struct usb_dfu_functional_descriptor¶
DFU 功能描述符
定義:
struct usb_dfu_functional_descriptor {
__u8 bLength;
__u8 bDescriptorType;
__u8 bmAttributes;
__le16 wDetachTimeOut;
__le16 wTransferSize;
__le16 bcdDFUVersion;
};
成員
bLength描述符的大小(位元組)
bDescriptorTypeUSB_DT_DFU_FUNCTIONAL
bmAttributesDFU 屬性
wDetachTimeOutDFU_DETACH 後等待的最長時間(毫秒,le16)
wTransferSize每次控制寫入的最大位元組數 (le16)
bcdDFUVersionDFU 規範版本(BCD,le16)