1

我知道,树莓派零支持OTG和USB外设的协议,并有如下所示内置外设很多很酷:https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all#other-modules树莓派零USB设备仿真

的问题是,我需要模拟USB没有出现在此列表中的外围设备。我有一个设备的供应商ID和产品ID,我正试图弄清楚如何去做这件事。我需要修改Raspbian内核中的OTG USB驱动程序吗?我是否必须完全构建自己的内核?还是有更好的选择,我甚至没有意识到?

在此先感谢!

回答

1

我需要修改Raspbian内核中的OTG USB驱动程序吗?

回答你的第一个问题是“这取决于”,但如果您的设备 没有做任何事情太不寻常了,这可能是一个不,你不必 修改源代码的内核模块,也不内核。

你很幸运,Raspbian支持带有ConfigFS支持的现代内核。一旦你设置了dtoverlay=dwc2,你可以打开一个FunctionFS批量端点为根像这样:如果你需要更密切地模仿其他设备

modprobe libcomposite 
modprobe usb_f_fs 
cd /sys/kernel/config/usb_gadget 
mkdir -p myperipheral; cd myperipheral 
echo 0x1234 > idVendor # put actual vendor ID here 
echo 0xabcd > idProduct # put actual product ID here 
mkdir configs/c.1 
mkdir configs/c.1/strings/0x409 
echo "My Peripheral" > configs/c.1/strings/0x409/configuration 
mkdir functions/ffs.my_func_name 
ln -s functions/ffs.my_func_name configs/c.1/ 
mkdir -p /tmp/mount_point 
mount my_func_name -t functionfs /tmp/mount_point 
# compile ffs-test from source, then copy and run it from /tmp/mount_point 
ls /sys/class/udc > UDC 

,它给你设定bcdDevicebcdUSB,串口数量,制造商,产品字符串,最大功率,os_desc,以及其他可能的字段。

AFAIK FunctionFS不支持同步端点,中断传输和异常控制传输。如果你需要这个,你可能需要开始考虑扩展现有的小工具模块,源代码为here

更新:当我回家测试这个时,我遇到了Raspbian的严重警告。它最初将无法创建ffs.my_func_name,因为默认情况下未启用usb_f_fs。尽管您不需要修改任何内核模块,但您必须使用备用配置recompilemake menuconfig - >设备驱动程序 - > USB支持 - > USB小工具支持 - > USB功能可以通过配置configfs /功能文件系统(FunctionFS)+一些其他模块来测试。上传新的内核/模块后,我在Raspbian 8上测试了上述脚本。如果您使用更简单的g_ffs传统模块代替ConfigFS,我还建议将USB Gadget Drivers/Function Filesystem设置为(M)。