首页 > 其他分享 >imx6ull如何使用configfs使能usb gadget中的usbnet功能

imx6ull如何使用configfs使能usb gadget中的usbnet功能

时间:2024-09-18 11:46:54浏览次数:11  
标签:0x409 usbnet 使能 configfs USB usb0 mkdir echo strings

要在 i.MX6ULL 平台上使用 configfs 使能 USB Gadget 中的 usbnet 功能,可以按照以下步骤进行配置。以下步骤假设您已经在设备上运行了嵌入式Linux系统,并且具有root权限。

1. 确认内核配置

在编译内核时,需要确保以下配置项被启用:

CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_CONFIGFS=y
CONFIG_USB_GADGET_CONFIGFS_NCM=y         # 如果需要NCM功能
CONFIG_USB_GADGET_CONFIGFS_RNDIS=y       # 如果需要RNDIS功能
CONFIG_USB_GADGET_CONFIGFS_ECM=y         # 如果需要ECM功能
CONFIG_USB_GADGET_CONFIGFS_ECM_SUBSET=y  # 如果需要ECM子集功能
CONFIG_USB_GADGET_CONFIGFS_EEM=y         # 如果需要EEM功能
CONFIG_USB_G_NCM=y                       # 对应NCM设备
CONFIG_USB_G_MULTI=y                     # 多功能Gadget(可选)

根据您的实际需求,启用相应的USB网络功能。

2. 加载必要的内核模块

如果这些功能被编译为模块(m),则需要加载它们:

modprobe libcomposite

3. 挂载configfs文件系统

mkdir -p /sys/kernel/config
mount -t configfs none /sys/kernel/config

4. 创建USB Gadget目录

cd /sys/kernel/config/usb_gadget
mkdir g1
cd g1

5. 设置USB设备描述符

echo 0x1d6b > idVendor      # Linux Foundation的VID,可以根据需要更改
echo 0x0104 > idProduct     # 自定义的PID

6. 创建字符串描述符

mkdir -p strings/0x409
echo "1234567890" > strings/0x409/serialnumber
echo "Your Company" > strings/0x409/manufacturer
echo "USB Net Device" > strings/0x409/product

7. 创建USB配置

mkdir -p configs/c.1
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower

8. 创建USB网络功能

以 ECM(以太网控制模型) 为例:

mkdir functions/ecm.usb0

如果需要 RNDIS(远程网络驱动接口规范) 功能:

mkdir functions/rndis.usb0

根据需要,可以创建其他类型的usbnet功能。

9. 绑定功能到配置

以ECM为例:

ln -s functions/ecm.usb0 configs/c.1/

10. 绑定USB控制器

首先,查看可用的UDC(USB Device Controller):

ls /sys/class/udc

假设输出为 ci_hdrc.0,则绑定UDC:

echo ci_hdrc.0 > UDC

11. 配置网络接口

当USB Gadget成功启动后,系统中会出现对应的网络接口(如usb0)。可以使用ifconfigip命令配置该接口。

例如,设置IP地址:

ifconfig usb0 192.168.7.2 netmask 255.255.255.0 up

12. 主机端配置

在将设备通过USB连接到主机(如PC)后,主机通常会识别出一个新的USB网络设备。根据主机操作系统,可能需要安装相应的驱动程序:

  • Linux主机:一般会自动加载usbnet驱动。
  • Windows主机:对于ECM,需要安装WinUSB驱动;对于RNDIS,Windows通常会自动安装驱动。

在主机上为对应的网络接口配置IP地址,使其与设备端在同一子网内。

注意事项:

  • 权限问题:上述操作需要root权限。
  • USB连接:确保USB OTG端口正确连接,并使用适当的USB线缆。
  • 调试:如果遇到问题,可以查看内核日志(使用dmesg)获取详细信息。

示例脚本:

以下是一个完整的示例脚本,可以保存为scripts/usbnet_setup.sh,并赋予执行权限。

#!/bin/bash

# 加载模块
modprobe libcomposite

# 挂载configfs
mount -t configfs none /sys/kernel/config

# 进入USB Gadget目录
cd /sys/kernel/config/usb_gadget/
mkdir -p g1
cd g1

# 设置USB描述符
echo 0x1d6b > idVendor
echo 0x0104 > idProduct

# 创建字符串描述符
mkdir -p strings/0x409
echo "1234567890" > strings/0x409/serialnumber
echo "Your Company" > strings/0x409/manufacturer
echo "USB Net Device" > strings/0x409/product

# 创建配置
mkdir -p configs/c.1/strings/0x409
echo "USB Net Config" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower

# 创建ECM功能
mkdir functions/ecm.usb0
# 设置ECM功能的主机和设备MAC地址(可选)
echo "02:00:00:00:00:00" > functions/ecm.usb0/dev_addr
echo "02:00:00:00:00:01" > functions/ecm.usb0/host_addr

# 将功能绑定到配置
ln -s functions/ecm.usb0 configs/c.1/

# 绑定UDC
ls /sys/class/udc > UDC

# 配置网络接口
ifconfig usb0 192.168.7.2 netmask 255.255.255.0 up

执行脚本:

chmod +x usbnet_setup.sh
./usbnet_setup.sh

结论

通过以上步骤,您已经在i.MX6ULL平台上使用configfs成功使能了USB Gadget中的usbnet功能。设备现在可以作为USB网络设备与主机通信,实现网络数据传输。

标签:0x409,usbnet,使能,configfs,USB,usb0,mkdir,echo,strings
From: https://www.cnblogs.com/wanglouxiaozi/p/18418164

相关文章

  • USB configfs与USB functionfs的区别及关系
    configfs和functionfs是Linux内核中用于配置和管理USB设备行为的两种不同的文件系统,它们各自的用途和工作方式有所不同,但在USBGadget子系统中可以结合使用。以下是它们的区别和关系:1.configfs:用途:用于配置和管理USB设备的整体功能和配置。工作原理:config......
  • USB gadget configfs
    概述USBLinuxGadget是一种具有UDC(USB设备控制器)的设备,可以连接到USB主机,以扩展其附加功能,如串口或大容量存储能力。一个gadget被它的主机视为一组配置,每个配置都包含一些接口,从gadget的角度来看,这些接口被称为功能,每个功能代表一个串行连接或一个SCSI磁盘。Linux提供了许......
  • 3.3.2 IPIPE对Linux中断使能与屏蔽的改造
    点击查看系列文章=》 InterruptPipeline系列文章大纲-CSDN博客        3.3第一行之hard_local_irq_disable()                 3.3.1 Linux中断的使能与屏蔽                        3.3.1.1 中断使能与屏蔽的三重......
  • 3.3.1 Linux中断的使能与屏蔽
    点击查看系列文章 =》 InterruptPipeline系列文章大纲-CSDN博客3.3.1Linux中断的使能与屏蔽3.3.1.1 中断使能与屏蔽的三重关卡        本章的主题是hard_local_irq_disable(),它是对中断的关闭操作。为了彻底搞清楚中断关闭的机制,这里先对Linux使能与屏蔽中断的......
  • 华为万兆猫HN8145X6使能+补全AllShell+修改SN+E改XG+切换华为界面
    第〇部分准备工作1、查询老光猫上的LOID(电信、联通)、Password(移动)。1.1用光猫默认账号密码(详见光猫底部铭牌)访问光猫;状态-状态总览:宽带识别码(LOID):网络-远程管理-宽带识别码(LOID)认证-宽带识别码(LOID):2、记录老光猫的互联网、IPTV的默认配置数据,截图存档(建议项,一般......
  • 完美解决RTX5源码工程+最新emWin6.40的编译兼容问题,使能C编译器使用C11可解决
    最新的emWin6.40仅提供了.a格式库,这个库兼容MDK,IAR和GCC,但是在MDKAC6下使用需要做如下操作-fno-short-wchar-fshort-enums他这个操作,正好跟RTX5源码工程添加的一个设置冲突了,通过搜索资料,发现使能MDK使用C11版本编译可以完美解决这个问题:最终配置如下,确实解决了:最后就......
  • H7-TOOL自制Flash读写保护算法系列,为STM32H7全系列芯片制作读写使能和解除算法,支持在
    说明:很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。最近好几个网友咨询H7系列芯片保护支持,马不停蹄,已......
  • H7-TOOL自制Flash读写保护算法系列,为国民技术N32G031制作读写使能和解除算法,支持在线
    说明:很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。实现效果:本次添加国民技术的N32G031,从2.26版本开......
  • Code-Logger-替换标准输出和标准错误,并通过宏使能输出
    Code-Logger-替换标准输出和标准错误,并通过宏使能输出需求:替换标准输出和标准错误,并通过宏使能输出classLogger#ifndefENABLE_LOGS#defineENABLE_LOGS1//设置为1表示启用日志输出,0则禁用#endif#include<iostream>#include<sstream>classLogger{public:......
  • 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是使能i.MXRT1050,1060Hab签名或加密启动时App链接在片内SRAM的限制。最近有客户反馈,在RT1060上测试Non-XIP程序启动,如果程序体部分链接进0x20280000地址之后的片内OCRAM区域(这部分是由FlexRAM......