当前位置: 首页 > news >正文

Linux开发—— USB 虚拟网口配置

一、内核编译配置

1. 必需的内核选项

# USB Gadget 支持(核心)Device Drivers --->[*]USB support ---><M>USB Gadget Support ---><M>USB Gadget Drivers# USB 网络功能(关键)Device Drivers --->[*]USB support ---><M>USB Gadget Support ---><M>Ethernet Gadget(with CDC Ethernet support)<M>RNDIS support<M>ECM support

2. 具体配置项

配置项说明为什么需要
CONFIG_USB_GADGET=y/mUSB Gadget 框架使 Linux 设备作为 USB 从设备
CONFIG_USB_CONFIGFS=y/mConfigFS 支持允许通过文件系统动态配置 USB
CONFIG_USB_ETH=mUSB Ethernet Gadget提供基础以太网功能
CONFIG_USB_ETH_RNDIS=yRNDIS 协议Windows 兼容性(必需)
CONFIG_USB_ETH_EEM=yEEM 协议高性能以太网模拟
CONFIG_USB_G_ETHER=mEthernet Gadget 驱动实际的网络驱动程序

3. 推荐的额外选项

CONFIG_USB_LIBCOMPOSITE=m# 组合 USB 设备支持CONFIG_USB_F_ECM=m# ECM 功能(Mac/Linux)CONFIG_USB_F_RNDIS=m# RNDIS 功能(Windows)CONFIG_USB_F_EEM=m# EEM 功能

二、为什么需要这些配置?

1.USB Gadget 框架原理

硬件层 (USB Controller) ↓ USB Gadget 驱动层 (内核模块) ↓ USB 功能层 (RNDIS/ECM/EEM) ↓ 网络协议栈 (usb0 虚拟网卡)
  • Gadget 模式:让 Linux 设备充当 USB 从设备(而非主机)
  • 功能复用:同一个 USB 接口可以模拟多种设备(网卡、串口、存储等)

2.RNDIS 的必要性

  • Windows 兼容:Windows 原生支持 RNDIS 协议
  • 无需驱动:Windows 自动识别为网络适配器
  • 即插即用:连接后自动创建网络连接

3.ECM/EEM 的作用

  • ECM:Linux/macOS 的标准协议,性能好
  • EEM:最新协议,效率最高,开销最小
  • 跨平台:配置多种协议确保兼容性

三、运行时配置(两种方法)

方法 1:使用 g_ether 模块(简单)

# 加载模块modprobe g_ether# 配置 IP 地址ifconfigusb0192.168.7.2 netmask255.255.255.0 up# 启用路由转发(可选)echo1>/proc/sys/net/ipv4/ip_forward

方法 2:使用 ConfigFS(灵活,推荐)

#!/bin/bash# 挂载 configfsmount-t configfs none /sys/kernel/configcd/sys/kernel/config/usb_gadget/# 创建 gadgetmkdirg1cdg1# 设置 USB 描述符echo"0x1d6b">idVendor# Linux Foundationecho"0x0104">idProduct# Multifunction Composite Gadgetecho"0x0100">bcdDevice# v1.0.0echo"0x0200">bcdUSB# USB 2.0# 创建字符串描述符mkdirstrings/0x409echo"0123456789">strings/0x409/serialnumberecho"MyCompany">strings/0x409/manufacturerecho"USB-Ethernet">strings/0x409/product# 创建配置mkdirconfigs/c.1mkdirconfigs/c.1/strings/0x409echo"Config 1: RNDIS network">configs/c.1/strings/0x409/configurationecho250>configs/c.1/MaxPower# 创建 RNDIS 功能mkdirfunctions/rndis.usb0# 设置 MAC 地址(可选)echo"02:00:00:00:00:01">functions/rndis.usb0/dev_addrecho"02:00:00:00:00:02">functions/rndis.usb0/host_addr# 链接功能到配置ln-s functions/rndis.usb0 configs/c.1/# 绑定到 UDC(USB Device Controller)ls/sys/class/udc>UDC# 配置网络接口sleep2ifconfigusb0192.168.7.2 netmask255.255.255.0 up

四、验证配置

# 1. 检查内核模块lsmod|grepusb# 2. 查看网络接口ipaddr show usb0# 3. 查看 USB 设备状态cat/sys/kernel/config/usb_gadget/g1/UDC# 4. 测试连接(从 PC 端)ping192.168.7.2

五、常见问题排查

问题原因解决方法
usb0 不出现内核选项未启用检查CONFIG_USB_G_ETHER
Windows 无法识别缺少 RNDIS 支持确保CONFIG_USB_ETH_RNDIS=y
连接后无法通信IP 地址冲突PC 和板子使用不同 IP
无法加载模块UDC 驱动未加载检查 USB 控制器驱动

六、开机自动配置

创建 systemd 服务或在/etc/rc.local中添加:

#!/bin/sh# USB 网络初始化modprobe g_etherifconfigusb0192.168.7.2 netmask255.255.255.0 upexit0

总结

核心要点

  1. 内核支持:编译时启用 USB Gadget + RNDIS/ECM 功能
  2. 运行时配置:加载模块并配置 IP 地址
  3. 协议选择:RNDIS(Windows)、ECM(Linux/Mac)
  4. IP 规划:确保 PC 和开发板 IP 在同一网段但不冲突
http://www.jsqmd.com/news/325219/

相关文章:

  • 结构胶按需定制价格多少钱,佛山有哪些推荐的供应商
  • 讲讲毛绒布小批量定制生产商选哪家
  • 如何为不同经营场景选麻将机?2026年麻将机品牌推荐与评测,直击成本与体验痛点
  • 批量压缩包下载!科哥UNet处理结果获取
  • 2026年佛山高精度滑轨设备厂家排名,哪家性价比高值得推荐?
  • 四川桥架行业综合选购指南:聚焦铝合金、玻璃钢、槽式与大跨距桥架服务商深度分析
  • 雪花ID
  • 2026年杭州割圈绒生产企业选择指南,哪家值得选?
  • F.I.R.E. 计算器:通往财务自由的数字导航仪
  • Linux 多线程编程:互斥锁 (Mutex) —— 给共享资源加上“安全锁” - 详解
  • 聊聊好用的聚氨酯结构胶,这些结构胶品牌商值得关注
  • 极简云端文件格式转换工具:安全高效的在线数据处理助手
  • 数据结构==B-树== - 教程
  • 联友邦精密机械的滑轨成型机好用吗,有哪些品牌优势?
  • 2026年钉钉服务商联系电话推荐:覆盖多区域服务网络
  • 基于SSM的文档管理系统的设计与实现任务书
  • AI事件检测系统:让机器学会“读懂”异常
  • 2026全国不锈钢型材优质厂家盘点+选型指南,采购避坑
  • 计算机毕设java制造业企业专件全生命周期管理系统 基于Java的制造业零部件全生命周期管理系统设计与实现 Java技术驱动的制造业专件生命周期管理平台开发
  • PNG 转 WebP 教程:免费在线实现高效图片优化
  • 基于SSM的文档管理系统的设计与实现开题报告
  • 计算机毕设java制氢领域文献管理系统 基于Java的制氢领域文献管理平台设计与实现 Java环境下制氢领域文献信息管理系统开发
  • 三合一全自动SEO外链生成器|多线程批量发链工具|全平台搜索引擎适配外链软件
  • 基于SprintBoot和Vue的农家乐系统开题报告
  • Go有没有反射的一些框架
  • Firecracker:轻量级虚拟化技术赋能无服务器计算
  • 商业股权设计方案:打造“与人类共存亡”的永续型企业
  • 实用指南:Flutter Android Kotlin 插件编译错误完整解决方案
  • 机器学习算法中,如何正确选择参数模型?
  • 查看android 设备是否支持WEP?