- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有 nanopi-neo,它是基于 Allwinner H3 的 Linux 板。它支持 USB OTG 模式,所以我想尝试使用 GadgetFS 将其转换为从机。
据我了解,我应该用这个选项重建他们提供的linux内核
<*> USB Gadget Drivers
<*> Gadget Filesystem
对于 rootfs 使用这个
Package Selection for the target --->
Hardware handling --->
[*] gadgetfs-test
然后我开始构建并启动电路板。
我关注了这个guide并使用了这些命令
root:/dev> mkdir /dev/gadget
root:/dev> mount -t gadgetfs gadgetfs /dev/gadget
[ 219.808688] WRN:L2558(drivers/usb/sunxi_usb/udc/sunxi_udc.c):ERR: Error in bind() : -120
[ 219.827939] nop sunxi_usb_udc: failed to start (null): -120
root:/dev> ls /dev/gadget/ -l
total 0
-rw------- 1 root root 0 Jan 1 00:03 sunxi_usb_udc
我找不到关于这个错误的任何信息。人们面临的大多数问题都与 insmod 有关,但我已将模块内置在内核中。所以我不确定这个问题。
然后我找到了这个 post对于 sunxi,即 allwinner sdk 要求我向 otg_role 回显一些值,我做到了,我得到了这个
echo 1 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role
[ 192.310934] sunxi-ehci sunxi-ehci.1: remove, state 4
[ 192.326666] usb usb1: USB disconnect, device number 1
[ 192.343775] sunxi-ehci sunxi-ehci.1: USB bus 1 deregistered
[ 192.370300] sunxi-ohci sunxi-ohci.1: remove, state 4
[ 192.385941] usb usb5: USB disconnect, device number 1
[ 192.402761] sunxi-ohci sunxi-ohci.1: USB bus 5 deregistered
[ 192.444442] sunxi-ehci sunxi-ehci.1: SW USB2.0 'Enhanced' Host Controller (EHCI) Driver
[ 192.458113] sunxi-ehci sunxi-ehci.1: new USB bus registered, assigned bus number 1
[ 192.471720] sunxi-ehci sunxi-ehci.1: irq 104, io mem 0xf1c1a000
[ 192.500050] sunxi-ehci sunxi-ehci.1: USB 0.0 started, EHCI 1.00
[ 192.511581] hub 1-0:1.0: USB hub found
[ 192.519996] hub 1-0:1.0: 1 port detected
[ 192.548993] sunxi-ohci sunxi-ohci.1: SW USB2.0 'Open' Host Controller (OHCI) Driver
[ 192.561898] sunxi-ohci sunxi-ohci.1: new USB bus registered, assigned bus number 5
[ 192.574365] sunxi-ohci sunxi-ohci.1: irq 105, io mem 0xf1c1a400
[ 192.644522] hub 5-0:1.0: USB hub found
[ 192.652612] hub 5-0:1.0: 1 port detected
root@kyloren:/$ # echo 2 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role
[ 195.940888] sunxi-ehci sunxi-ehci.1: remove, state 4
[ 195.956330] usb usb1: USB disconnect, device number 1
[ 195.976521] sunxi-ehci sunxi-ehci.1: USB bus 1 deregistered
[ 195.997477] sunxi-ohci sunxi-ohci.1: remove, state 4
[ 196.007624] usb usb5: USB disconnect, device number 1
[ 196.018520] sunxi-ohci sunxi-ohci.1: USB bus 5 deregistered
我尝试再次挂载,但我得到了同样的错误。
有人可以指导我吗?
最佳答案
很久以后的某个时候......
简短的回答是您缺少实际实例化 USB 端点并处理设置和控制请求的用户模式组件。
这种野兽的一个例子可以在下面的 3 个部分中找到,链接如下。
长版:
要将H3板作为设备使用,需要modprobe gadgetfs
,创建目录mkdir -p/dev/gadget
,然后将设备挂载到该目录下包含 mount -t gadgetfs gadgetfs/dev/gadget
的目录。
最后使用 echo 2 >/sys/bus/platform/devices/sunxi_usb_udc/otg_role
启用设备角色。
您需要将以下内容添加到 usb.c
中的 autoconfig()
函数中,因为该代码方式早于 AllWinner 的存在。
构建用户模式应用程序 (usb) 后,只需将其作为 sudo usb -v
运行即可进入详细模式。如果您正确插入并供电,您的设备现在应该显示在主机上,带有 2 个批量端点和一个中断 EP。
如果您尝试使用主线,您将需要在下面的代码中更改 Controller 的名称(位于/dev/gadget 中)并将正确的拼写添加到 DTS 文件中。祝你好运,因为我还没有让 4.11 在我的 NanoPi M1 和 NanoPi Neo Air 板上以设备模式工作。
希望这个迟来的东西在某个时候对某人有用!
if (stat(DEVNAME = "sunxi_usb_udc", &statb) == 0)
{
HIGHSPEED = 1;
fs_source_desc.bEndpointAddress = hs_source_desc.bEndpointAddress = USB_DIR_IN | 1;
EP_IN_NAME = "ep1in-bulk";
fs_sink_desc.bEndpointAddress = hs_sink_desc.bEndpointAddress = USB_DIR_OUT | 1;
EP_OUT_NAME = "ep1out-bulk";
source_sink_intf.bNumEndpoints = 3;
fs_status_desc.bEndpointAddress = hs_status_desc.bEndpointAddress = USB_DIR_IN | 2;
EP_STATUS_NAME = "ep2in-interrupt";
}
关于linux - 基于 Allwinner H3 的 linux 板上的 GadgetFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394520/
我有 nanopi-neo,它是基于 Allwinner H3 的 Linux 板。它支持 USB OTG 模式,所以我想尝试使用 GadgetFS 将其转换为从机。 据我了解,我应该用这个选项重建他
我正在尝试访问硬件registers of an A20 SOM通过将它们映射到用户空间。在本例中,目标是 PIO,在物理地址 0x01C20800 处列出。 正在使用官方 Olimex Debian
我是一名优秀的程序员,十分优秀!