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)。