news 2026/5/28 5:31:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 在同一网段但不冲突
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 5:05:50

基于VC++的饭店点餐系统-任务书

目录项目背景与目标功能模块设计技术实现要点开发环境与工具预期成果进度安排项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作项目背景与目标 开发一款基于VC的饭店点餐系统&#xff0c;旨在提升餐饮行业点…

作者头像 李华
网站建设 2026/5/26 16:00:10

YOLOv13镜像部署踩坑与解决方案分享

YOLOv13镜像部署踩坑与解决方案分享 YOLO系列模型在工业质检、智能安防、自动驾驶等场景中早已成为视觉感知的“基础设施”。但每当新版本发布&#xff0c;开发者常面临一个现实困境&#xff1a;论文里惊艳的指标&#xff0c;落地时却卡在环境配置、依赖冲突、CUDA兼容性这些“…

作者头像 李华
网站建设 2026/5/22 1:22:03

TensorFlow SavedModel 深度解析:超越 `model.save()` 的模型部署艺术

TensorFlow SavedModel 深度解析&#xff1a;超越 model.save() 的模型部署艺术 引言&#xff1a;为什么 SavedModel 比你想象的更重要 在 TensorFlow 生态系统中&#xff0c;模型保存似乎是一个被简化为 model.save(my_model) 的简单操作。然而&#xff0c;这种表面上的简单…

作者头像 李华
网站建设 2026/5/11 17:40:42

基于Java的广播电视设备巡检智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 广播电视设备巡检智慧管理系统通过集成会员管理、设备参数与故障管理等关键模块&#xff0c;实现从数据录入到维修报告生成的全流程自动化。相较于传统系统&#xff0c;该方案采用SpringMVC框架和MySQL数据库构建更高效的数据处理流程&am…

作者头像 李华