0

我有 nanopi-neo,它是基于 Allwinner H3 的 linux 板。它支持 USB OTG 模式,所以我想尝试使用 GadgetFS 将其转换为从机。

据我了解,我应该使用此选项重建他们提供的 linux 内核

<*>   USB Gadget Drivers
<*>     Gadget Filesystem

对于 rootfs 使用这个

Package Selection for the target  --->
Hardware handling  --->
    [*] gadgetfs-test

然后我开始构建和启动电路板。

我遵循本指南并使用了这些命令

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,但我已经在内核中内置了模块。所以我肯定没有这个问题。

然后我为 sunxi ie 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

我尝试再次安装,但我得到了同样的错误。

有人可以指导我吗?

4

1 回答 1

1

很久以后的某个时候...

简短的回答是您缺少实际实例化 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

您需要将以下内容添加到autoconfig()函数中,usb.c因为该代码方式早于 AllWinner 的存在。

构建用户模式应用程序 (usb) 后,只需像sudo usb -v详细模式一样运行它。如果您正确插入并供电,您的设备现在应该显示在具有 2 个批量端点和一个中断 EP 的主机上。

如果您尝试使用主线,您将需要在下面的代码中更改控制器的名称(在 /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";
}

主用户模式驱动程序

USB 描述符字符串

上面的头文件

于 2017-09-19T17:01:44.083 回答