问题
有客户使用Linux中的USB Gadget功能,把MPSoC器件做USB从设备。在执行“mkdir functions/.”时,得到错误“Device or resource busy”。
mkdir:can'tcreatedirectory'functions/ffs.usb0':Deviceorresourcebusy
分析
根据配置项CONFIG_USB_F_FS分析对应的代码drivers/usb/gadget/function/f_fs.c, 使能其中的调试信息,并增加额外的调试信息,发现_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; }
继续跟踪代码,发现drivers/usb/gadget/legacy/g_ffs.c中向链表ffs_devices添加了设备。
因此禁止g_ffs.c对应的配置CONFIG_USB_FUNCTIONFS,再次使用USB gadget功能,没有错误“Device or resource busy”。
创建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
+关注
关注
25文章
5441浏览量
133937 -
usb
+关注
关注
60文章
7893浏览量
263984 -
Xilinx
+关注
关注
71文章
2163浏览量
121008
发布评论请先 登录
相关推荐
评论