嵌入式LINUX开发系列之基于Radxa zero的usb_gadgetEthnet功能配置

本文详细描述了如何在Radxazero开发板上配置和实现USBGadgetEthernet功能,包括内核设置、驱动安装、网络配置及测试过程,适用于嵌入式开发者进行网络通信相关项目。
摘要由CSDN通过智能技术生成

LINUX系列文章目录

第二章 嵌入式linux开发之基于Radxa zero的usb_gadgetEthnet功能配置


前言

最近张工拿到一款比较热门的开发板Radxa zero。Radxa zero是一款基于Amlogic S905Y2 Quad Cortex-A53@1.8GHz的小型开发板,主要面向对性能要求不是特别高的嵌入式系统和物联网应用。如果需要更高性能或更多功能,就需要考虑其他型号的开发板。如果你有对其特定用途的需求,也可以考虑使用它。为什么选择这个开发板作为usb_gadgetEthnet开发呢?因为我开发这个功能的时候网络上没有基于radxa zero做的usb gadgetEthnet的有效参考,官网给的参考步骤做下来也没有成功。今天基于这个开发板做usb gadgetEthnet的功能,以下内容是张工经过项目验证成功后总结出来的,保证真实有效。本着真实写技术文章,希望对大家开发有所帮助。


一、usb_gadgetEthnet是什么?

先来普及一下概念:

  • USB Gadget Ethernet 是一个将 USB 设备模拟成以太网适配器的功能。它使得一个嵌入式设备(如单片机、开发板等)可以通过USB 接口模拟成一个以太网设备,与另外的主机(如 PC 或其他嵌入式设备)通过 USB 线缆连接,并以太网的方式进行通信。
  • USB Gadget Ethernet 主要有两种模式:
    1. USB Gadget Ethernet Function 模式:在这种模式下,嵌入式设备模拟成一个 USB 以太网适配器,可以被 PC 或其他主机识别为一个网络设备。这使得嵌入式设备可以通过 USB 连接实现与外部设备的通信,进行数据传输等操作。
    2. 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开发板操作

  1. 在 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
  1. 安装并打开 DHCP 服务器,在 /etc/modules 末尾添加 libcomposite

    root@radxa-zero:~# vim /etc/modules
    

    在这里插入图片描述

  2. 在 /etc/dhcpcd.conf 末尾添加 denyinterfaces usb0

    root@radxa-zero:~# vim  /etc/dhcpcd.conf
    

  3. 安装 dnsmasq

root@radxa-zero:~# apt update
root@radxa-zero:~# apt install dnsmasq
  1. 创建 /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小时。
  1. 创建 /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。
  1. 创建 /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
  1. 添加脚本开机启动,在 /etc/rc.local 中 exit 0 上一行添加 /root/usb.sh

在这里插入图片描述

  1. 重启设备,radxa-zero看到 USB 接口的 IP 地址为10.24.0.1

在这里插入图片描述

  1. 安装驱动,驱动下载链接:https://pan.baidu.com/s/1KEbE4MUPH_hOwT116ihs5Q 提取码:HA11

在这里插入图片描述
打开设备管理器->网络适配器,观察驱动是否安装完成。
在这里插入图片描述

三. usb_gadgetEthnet测试

  1. windows上测试
    观察radxa-zero的usb-typec接口分配的IP地址
    在这里插入图片描述
    windows上ping radxa-zero板子
    在这里插入图片描述
    在这里插入图片描述

  2. linux上ping radxa-zero板子
    在这里插入图片描述

总结

以上就是今天要讲的内容,本文详细系统介绍了基于RadxaZero的usb_gadgetEthnet功能开发流程,以上内容是张工经过项目验证成功后总结出来的,均真实有效。相信你仔细阅读之后,必有所收获。最后希望大家点点关注,订阅,多多支持,是我持续更新的动力。张工致力于有效解决我们项目开发过程中遇到的痛点问题。

  • 44
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值