gpt4 book ai didi

linux - 基于 Allwinner H3 的 linux 板上的 GadgetFS

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:01 26 4
gpt4 key购买 nike

我有 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";
}

Main usermode driver

USB descriptor strings

Header file for the above

关于linux - 基于 Allwinner H3 的 linux 板上的 GadgetFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com