問題
有客戶使用Linux中的USB Gadget功能,把MPSoC器件做USB從設(shè)備。在執(zhí)行“mkdir functions/.”時,得到錯誤“Device or resource busy”。
mkdir:can'tcreatedirectory'functions/ffs.usb0':Deviceorresourcebusy
分析
根據(jù)配置項CONFIG_USB_F_FS分析對應(yīng)的代碼drivers/usb/gadget/function/f_fs.c, 使能其中的調(diào)試信息,并增加額外的調(diào)試信息,發(fā)現(xiàn)_ffs_alloc_dev中的_ffs_get_single_dev得到了有效指針,就會返回EBUSY。_ffs_get_single_dev返回的指針,從鏈表ffs_devices中獲取。
staticstructffs_dev*_ffs_alloc_dev(void) { structffs_dev*dev; intret; if(_ffs_get_single_dev()){ returnERR_PTR(-EBUSY); } ...... returndev; }
繼續(xù)跟蹤代碼,發(fā)現(xiàn)drivers/usb/gadget/legacy/g_ffs.c中向鏈表ffs_devices添加了設(shè)備。
因此禁止g_ffs.c對應(yīng)的配置CONFIG_USB_FUNCTIONFS,再次使用USB gadget功能,沒有錯誤“Device or resource busy”。
創(chuàng)建USB gadget功能的腳本
#!/bin/sh echo"USBffsinit" uname-a CONFIGFS_HOME=/sys/kernel/config echo$CONFIGFS_HOME modprobelibcomposite mountnone$CONFIGFS_HOME-tconfigfs ls-l$CONFIGFS_HOME mkdir$CONFIGFS_HOME/usb_gadget/hkug ls-l$CONFIGFS_HOME/usb_gadget/hkug cd$CONFIGFS_HOME/usb_gadget/hkug pwd echo0x0104>idProduct echo0x1d6b>idVendor mkdirstrings/0x409 ls-lstrings/0x409 echohkug12345678>strings/0x409/serialnumber echohkug>strings/0x409/manufacturer echohkugtester>strings/0x409/product mkdirconfigs/hkugcfgname.1 ls-lconfigs/hkugcfgname.1 mkdirconfigs/hkugcfgname.1/strings/0x409 ls-lconfigs/hkugcfgname.1/strings/0x409 echohkugtcfg>configs/hkugcfgname.1/strings/0x409/configuration echo120>configs/hkugcfgname.1/MaxPower echo"functions/ffs.usb0" mkdirfunctions/ffs.usb0 ls-lfunctions/ffs.usb0 ln-sfunctions/ffs.usb0configs/c.1 echo"UDC" #echo>UDC echohkug>UDC ls/sys/class/udc/ ls/sys/class/udc/>UDC
其它
CONFIG_USB_F_FS(USB_F_FS)的定義在文件drivers/usb/gadget/Kconfig:
configUSB_F_FS tristate
CONFIG_USB_FUNCTIONFS(USB_FUNCTIONFS)的定義在文件drivers/usb/gadget/Kconfig:
configUSB_FUNCTIONFS tristate"FunctionFilesystem" selectUSB_LIBCOMPOSITE selectUSB_F_FS selectUSB_FUNCTIONFS_GENERICif!(USB_FUNCTIONFS_ETH||USB_FUNCTIONFS_RNDIS) help TheFunctionFilesystem(FunctionFS)letsonecreateUSB compositefunctionsinuserspaceinthesamewayGadgetFS letsonecreateUSBgadgetsinuserspace.Thisallowscreation ofcompositegadgetssuchthatsomeofthefunctionsare implementedinkernelspace(forinstanceEthernet,serialor massstorage)andotherareimplementedinuserspace. Ifyousay"y"or"m"hereyouwillbeablewhatkindof configurationsthegadgetwillprovide. Say"y"tolinkthedriverstatically,or"m"tobuild adynamicallylinkedmodulecalled"g_ffs".
奇怪的是,會主動選擇CONFIG_USB_F_FS。
審核編輯:湯梓紅
-
amd
+關(guān)注
關(guān)注
25文章
5503瀏覽量
134695 -
usb
+關(guān)注
關(guān)注
60文章
7989瀏覽量
266262 -
Xilinx
+關(guān)注
關(guān)注
71文章
2171瀏覽量
122232
發(fā)布評論請先 登錄
相關(guān)推薦
在Ubuntu Linux OS上安裝Xilinx USB電纜不起作用
如何配置USB OTG為Gadget serial device?
分享一種將RK3399配置成USB gadget設(shè)備的方法
基于Linux內(nèi)核的Rockchip USB Gadget UAC開發(fā)資料分享
RK3288使用USB GADGET實現(xiàn)大容量存儲腳本
求助,關(guān)于USB gadget安裝虛擬網(wǎng)口問題求解
[嵌入式linux]將linux板卡虛擬為USB網(wǎng)卡設(shè)備(Ethernet Gadget)
![[嵌入式<b class='flag-5'>linux</b>]將<b class='flag-5'>linux</b>板卡虛擬為<b class='flag-5'>USB</b>網(wǎng)卡設(shè)備(Ethernet <b class='flag-5'>Gadget</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何使用Vivado 2022.1版本工具鏈實現(xiàn)ZCU102 USB啟動(上)
AMD Xilinx K26從eMMC啟動Ubuntu
AMD-Xilinx MPSoC的Watchdog在Linux中使用的簡明教程
USB Gadget serial應(yīng)用實例(上)
![<b class='flag-5'>USB</b> <b class='flag-5'>Gadget</b> serial應(yīng)用實例(上)](https://file1.elecfans.com/web2/M00/8C/A2/wKgaomSvaYyAKANEAACuWMtslD4395.jpg)
USB Gadget zero應(yīng)用實例程序
![<b class='flag-5'>USB</b> <b class='flag-5'>Gadget</b> zero應(yīng)用實例程序](https://file1.elecfans.com/web2/M00/8C/A2/wKgZomSva-iADAypAAC3NHq5ZPM519.jpg)
從硬件軟件角度理解Gadget框架
![從硬件軟件角度理解<b class='flag-5'>Gadget</b>框架](https://file1.elecfans.com/web2/M00/8C/A3/wKgaomSvbR2AEoUiAAWGHZ-svJI275.jpg)
評論