LINUX系列文章目录
第二章 嵌入式linux开发之基于Radxa zero的usb_gadgetEthnet功能配置
文章目录
前言
最近张工拿到一款比较热门的开发板Radxa zero。Radxa zero是一款基于Amlogic S905Y2 Quad [email protected]的小型开发板,主要面向对性能要求不是特别高的嵌入式系统和物联网应用。如果需要更高性能或更多功能,就需要考虑其他型号的开发板。如果你有对其特定用途的需求,也可以考虑使用它。为什么选择这个开发板作为usb_gadgetEthnet开发呢?因为我开发这个功能的时候网络上没有基于radxa zero做的usb gadgetEthnet的有效参考,官网给的参考步骤做下来也没有成功。今天基于这个开发板做usb gadgetEthnet的功能,以下内容是张工经过项目验证成功后总结出来的,保证真实有效。本着真实写技术文章,希望对大家开发有所帮助。
一、usb_gadgetEthnet是什么?
先来普及一下概念:
- USB Gadget Ethernet 是一个将 USB 设备模拟成以太网适配器的功能。它使得一个嵌入式设备(如单片机、开发板等)可以通过USB 接口模拟成一个以太网设备,与另外的主机(如 PC 或其他嵌入式设备)通过 USB 线缆连接,并以太网的方式进行通信。
- USB Gadget Ethernet 主要有两种模式:
- USB Gadget Ethernet Function 模式:在这种模式下,嵌入式设备模拟成一个 USB 以太网适配器,可以被 PC 或其他主机识别为一个网络设备。这使得嵌入式设备可以通过 USB 连接实现与外部设备的通信,进行数据传输等操作。
- USB Gadget Ethernet RNDIS 模式:Remote Network Driver Interface Specification(远程网络驱动接口规范),这是一种标准的 USB 协议,它允许设备通过USB连接以太网进行网络通信。在这种模式下,嵌入式设备模拟成一个 RNDIS 设备,从而可以被 PC 识别为一个远程网络设备,实现通过USB与 PC 进行网络通信。
- USB Gadget Ethernet 通常用于嵌入式系统、单片机或一些嵌入式开发板上,使得这些设备可以通过 USB 端口方便地与 PC 或其他设备进行网络通信,对于一些物联网或嵌入式应用具有一定的推广和应用前景。
二、具体操作
1.开发板上电,查询网络信息
root@radxa-zero:~# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.200 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::13c:18e0:f2aa:ea60 prefixlen 64 scopeid 0x20<link>
ether b8:13:32:d2:90:e0 txqueuelen 1000 (Ethernet)
RX packets 15549 bytes 2091196 (1.9 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 1673 bytes 214327 (209.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看出目前开发板里面只存在一个无线网卡wlan0,不存在usb虚拟网络。
2.usb_gadgetEthnet配置流程
操作环境:
Ubuntu 系统的 PC 机
Radxa Zero
基于Ubuntu 系统的 PC 机操作
配置内核
我这里的内核版是5.10.69,对于配置步骤不熟悉的可参考https://wiki.radxa.com/Zero/dev/kernel在内核目录下,打开内核配置选项菜单:
cd kernel
export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
make menuconfig
进行 make menuconfig 可视化配置。增加如下配置,开启RNDIS配置。
保存之后退出,然后编译内核
make radxa_zero_defconfig
make -j8
打包内核
export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
make radxa_zero_defconfig
export build_id="999"
export lv="-$build_id-amlogic"
export kv=$(make kernelversion)
export debv="$kv$lv"
make bindeb-pkg -j8 LOCALVERSION=$lv KDEB_PKGVERSION=$debv
查看生成的软件包(内核修订版本不同名称可能不同,我这边是5.10.69)
ls ../*.deb
基于Radxa Zero开发板操作
- 在 Radxa Zero 上安装内核
将 linux-headers-5.10.69-999-amlogic_5.10.69-999-amlogic_arm64.deb 和 linux-image-5.10.69-999-amlogic_5.10.69-999-amlogic_arm64.deb复制到 Radxa Zero板子上。使用以下命令进行安装:
rock@radxa-zero:~$ sudo dpkg -i linux-headers-5.10.69-999-amlogic_5.10.69-999-amlogic_arm64.deb
rock@radxa-zero:~$ sudo dpkg -i linux-image-5.10.69-999-amlogic_5.10.69-999-amlogic_arm64.deb
重新启动,进入到新内核
root@radxa-zero:~# reboot
-
安装并打开 DHCP 服务器,在 /etc/modules 末尾添加
libcomposite
root@radxa-zero:~# vim /etc/modules
-
在 /etc/dhcpcd.conf 末尾添加
denyinterfaces usb0
root@radxa-zero:~# vim /etc/dhcpcd.conf
-
安装 dnsmasq
root@radxa-zero:~# apt update
root@radxa-zero:~# apt install dnsmasq
- 创建 /etc/dnsmasq.d/usb 文件
interface=usb0
dhcp-range=10.24.0.2,10.24.0.254,255.255.255.0,24h
dhcp-option=3
leasefile-ro
#其中 dhcp-range 设置表示 DHCP 服务分配的 IP 地址范围从 10.55.0.2-10.55.0.254,子网掩码为 255.255.255.0,有效期为 24小时。
- 创建 /etc/network/interfaces.d/usb0 文件
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 10.24.0.1
netmask 255.255.255.0
#其中,address 表示 USB 接口的 IP 地址为 10.24.0.1,子网掩码为 255.255.255.0。
- 创建 /root/usb.sh
#!/bin/bash
sudo -i
modprobe configfs
modprobe udc-core
modprobe libcomposite
insmod /lib/modules/5.10.69-999-amlogic/kernel/drivers/usb/gadget/function/u_ether.ko
insmod /lib/modules/5.10.69-999-amlogic/kernel/drivers/usb/gadget/function/usb_f_rndis.ko
insmod /lib/modules/5.10.69-999-amlogic/kernel/drivers/usb/gadget/function/usb_f_ecm.ko
insmod /lib/modules/5.10.69-999-amlogic/kernel/drivers/usb/gadget/function/usb_f_ecm_subset.ko
insmod /lib/modules/5.10.69-999-amlogic/kernel/drivers/usb/gadget/legacy/g_ether.ko
cd /sys/kernel/config/usb_gadget/
mkdir -p radxa
cd radxa
echo 0x0525 > idVendor # Linux Foundation
echo 0xa4a2 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
echo 0x02 > bDeviceClass
echo 0x06 > bDeviceSubClass
echo 0x02 > bDeviceProtocol
mkdir -p strings/0x409
echo "fedcba9876543211" > strings/0x409/serialnumber
echo "RADXAZERO" > strings/0x409/manufacturer
echo "USB Device" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
# see gadget configurations below
# End functions
mkdir -p ./functions/ecm.usb0
HOST="00:dc:c8:f7:75:14" # "HostPC"
SELF="00:dd:dc:eb:6d:a1" # "BadUSB"
echo $HOST > functions/ecm.usb0/host_addr
echo $SELF > functions/ecm.usb0/dev_addr
ln -s ./functions/ecm.usb0 configs/c.1/
udevadm settle -t 5 || :
ls /sys/class/udc > UDC
ifup usb0
service dnsmasq restart
给脚本添加可执行权限
root@radxa-zero:~# sudo chmod +x /root/usb.sh
- 添加脚本开机启动,在 /etc/rc.local 中 exit 0 上一行添加 /root/usb.sh
- 重启设备,radxa-zero看到 USB 接口的 IP 地址为10.24.0.1
- 安装驱动,驱动下载链接:https://pan.baidu.com/s/1KEbE4MUPH_hOwT116ihs5Q 提取码:
HA11
打开设备管理器->网络适配器,观察驱动是否安装完成。
三. usb_gadgetEthnet测试
-
windows上测试
观察radxa-zero的usb-typec接口分配的IP地址
windows上ping radxa-zero板子
-
linux上ping radxa-zero板子
总结
以上就是今天要讲的内容,本文详细系统介绍了基于RadxaZero的usb_gadgetEthnet功能开发流程,以上内容是张工经过项目验证成功后总结出来的,均真实有效。相信你仔细阅读之后,必有所收获。最后希望大家点点关注,订阅,多多支持,是我持续更新的动力。张工致力于有效解决我们项目开发过程中遇到的痛点问题。
标签:gadgetEthnet,USB,zero,5.10,radxa,69,usb From: https://blog.csdn.net/qq_32706229/article/details/136958244