我正在尝试在Raspberry Pi 4上实现一个简单的WebUSB设备。我为此创建了一个带有FunctionFS函数的Linux USB Gadget。目前我以Linux内核中的usb/ffs-test.c示例为基础。
根据这个优秀的Google blog by Reilly Grant在“为WebUSB构建一个设备”,我必须扩展二进制设备对象存储(BOS)与Microsoft OS compatibility descriptors让这在Windows上工作。我还可以向它添加WebUSB描述符,但这不是功能需求。
但是我在这一步卡住了,我该如何用FunctionFS扩展BOS?这是我第一次使用FunctionFS或USB,所以我可能错过了一些明显的东西。我在usb/functionfs.h中发现了一些usb_os_desc_header
结构体,但我不知道这是否是我需要的,也不知道我应该如何使用它。
1条答案
按热度按时间vuv7lop31#
我最终也弄明白了这一点,所以这就是我必须做的事情(基于tools/usb/ffs-test. c)。
一个用户空间函数必须将所有描述符写入ep 0,所以诀窍是扩展描述符struct:
ss_count
之后添加__le32 os_count
ss_descs
后添加struct usb_os_desc_header os_header
和struct usb_ext_compat_desc os_desc
FUNCTIONFS_HAS_MS_OS_DESC
需要添加到header.flags
下面是我如何初始化WinUSB兼容性的新字段,我假设WebUSB一般工作类似:
字符串