登录/注册

linux usb gadget驱动

更多

Linux中的USB Gadget驱动是用于实现设备充当USB从设备(Peripheral)功能的软件框架。它允许基于Linux系统的设备(如嵌入式开发板、树莓派、手机等)模拟成各种USB设备角色,例如:

核心概念与工作机制

  1. 与主机驱动相反:

    • 主机端驱动(如 ehci-hcd, xhci-hcd) 让Linux控制USB端口作为主机 (Host),连接打印机、U盘等外设。
    • Gadget驱动让Linux控制USB端口作为从设备 (Peripheral),被另一台主机(如PC、手机)识别和使用。
  2. 内核框架:

    • UDC驱动 (USB Device Controller Driver): 这是底层硬件驱动,直接控制SoC或外接芯片上的USB Device控制器硬件(如DWC2, DWC3, Chipidea等)。它提供了与Gadget框架交互的接口。
    • Gadget Function驱动: 这些驱动实现了具体的USB设备功能(如存储、网络、串口)。它们构建符合USB规范的设备描述符、配置描述符、接口描述符、端点描述符,并通过UDC驱动与硬件交互处理数据传输。
    • Gadget核心层: 提供基础API和结构体,协调UDC驱动和Function驱动的交互。
  3. 关键组件:

    • configfs: (强烈推荐,现代方式)一个虚拟文件系统 (/sys/kernel/config/usb_gadget/),允许完全在用户空间动态配置Gadget设备:创建Gadget、选择功能(Function)、设置USB属性(厂商ID、产品ID、字符串描述符)、绑定UDC、激活设备等。无需重新编译内核或加载模块(除了底层UDC和Function驱动本身)。
    • Legacy GadgetFS: (较旧方式)另一个用户空间接口,通过挂载一个特殊的文件系统节点 (/dev/gadget) 来配置和控制Gadget。比configfs繁琐,渐少使用。
    • FunctionFS (ffs): 一种特殊的Function驱动,允许在用户空间程序中实现USB接口逻辑(协议处理)。内核只处理标准描述符和端点通信,应用层通过libusbgadget或直接操作ep文件读写数据。非常灵活,用于实现自定义协议或复杂功能(如Android ADB、MTP)。
  4. 配置流程 (典型使用 configfs)

    1. 挂载configfs (通常系统已挂载)。
    2. /sys/kernel/config/usb_gadget/ 下创建一个目录(如 g1),即创建了一个Gadget实例。
    3. 在该目录下设置USB属性 (idVendor, idProduct, bcdDevice, strings/* 等)。
    4. 创建所需的功能(Function) 目录 (如 mass_storage.usb0, ecm.usb0, ffs.adb)。这些目录通常链接到相应Function驱动的配置节点。
    5. 配置具体的Function参数(如在 mass_storage.usb0 里设置 lun.0/file=/path/to/backing-file)。
    6. 创建一个配置(Configuration) 目录 (如 configs/c.1),并在其中创建指向所需Function的符号链接(如 ln -s ../../functions/mass_storage.usb0 configs/c.1/)。一个Gadget可以有多个配置(但主机通常只激活一个)。
    7. 绑定UDC: 将Gadget关联到一个可用的USB Device控制器 (如 echo dwc3.0.auto > UDC)。这一步通常会自动启用USB连接。
    8. 对于FunctionFS,通常在创建 ffs.[name] Function后,还需要挂载FunctionFS (mount -t functionfs [name] /mount/point) 并启动处理通信的用户空间程序。

启用USB Gadget支持

  1. 内核配置: 在内核源码中启用:

    • CONFIG_USB_CONFIGFS (必需 - 支持configfs接口)
    • CONFIG_USB_LIBCOMPOSITE (必需 - 基础库)
    • 所需的UDC驱动 (如 CONFIG_USB_DWC2, CONFIG_USB_DWC3, CONFIG_USB_MUSB_HDRC)
    • 所需的Function驱动 (如 CONFIG_USB_F_MASS_STORAGE, CONFIG_USB_F_ECM, CONFIG_USB_F_SERIAL, CONFIG_USB_F_HID, CONFIG_USB_F_FS)
  2. 加载模块: 如果未编译进内核,需要加载相应模块 (udc_core, libcomposite, usb_f_mass_storage, usb_f_acm, 具体的UDC驱动模块如 dwc3, dwc2 等)。

实用工具

典型应用场景

总结

Linux USB Gadget驱动框架(特别是结合configfs和FunctionFS)提供了强大的灵活性,使Linux设备能够轻松扮演各种USB从设备的角色。开发者可以通过内核配置和用户空间脚本/程序动态创建和配置复杂的复合USB设备,极大地简化了USB从设备功能的开发。理解UDC、Function驱动、configfs和FunctionFS是掌握该技术的关键。

求助,关于USB gadget安装虚拟网口问题求解

1.make linux-menuconfig USB support ----> <*>USB

2023-09-01 06:14:42

从硬件软件角度理解Gadget框架

、USB 摄像头。基于这个角度,Gadget 框架可以分为两层: 底层 endpoint 操作 上层模拟各类 USB 设备 2.1 底层硬件操作

2023-07-13 11:32:28

USB Gadget zero应用实例程序

1. 编写程序 1.1 编程思路 涉及的程序如下图所示: PC 端基于 libusb 编写应用程序,开发板端直接使用 Linux 自带的 USB Gadget

2023-07-13 11:14:52

[嵌入式linux]将linux板卡虚拟为USB网卡设备(Ethernet Gadget

kernel menuconfig-> Device Drivers ->USB support -> USB Gadget

资料下载 贾桂林 2021-11-02 11:36:16

WH109-2 USB通信线驱动资料汇总

WH109-2 USB通信线驱动资料汇总

资料下载 卡拉卡拉2 2021-09-07 15:53:40

USB驱动程序

USB驱动程序

资料下载 思为无线 2021-08-17 11:47:54

工具SemExpr可实现gadget搜索与语义分析

代码重用攻击的实施过程较为繁杂,通常需要一些工具辅助人工来完成 gadget序列的构建,但现有的自动化构建工具效率较低。在分析 Ropper、 angrop和BoPC等典型开源 gadget工具语义

资料下载 佚名 2021-03-12 14:52:41

如何使用Linux内核实现USB驱动程序框架

Linux内核提供了完整的USB驱动程序框架。USB总线采用树形结构,在

资料下载 佚名 2020-11-06 17:59:17

USB Gadget serial应用实例(上)

1. 硬件体验 使用 Linux 自带的 USB Gadget 驱动 /

2023-07-13 11:06:31

AMD Xilinx Linux 2022.1 USB Gadget使用

有客户使用Linux中的USB Gadget功能,把MPSoC器件做USB

2023-07-07 14:15:03

RK3288使用USB GADGET实现大容量存储脚本

(){mount -t configfs none /sys/kernel/configmkdir /sys/kernel/config/usb_gadget/rockchip -m

2022-11-18 16:33:06

基于Linux内核的Rockchip USB Gadget UAC开发资料分享

1、Rockchip USB Gadget UAC开发步骤本文档提供 Rockchip 平台基于 Linux 内核的

2022-08-10 16:03:24

分享一种将RK3399配置成USB gadget设备的方法

1、RK3399的USB type-c接口初始化配置RK3399中提供了USB gadget设备的支持,程序在内核中目录“kernel/driv

2022-05-24 10:35:31

如何配置USB OTG为Gadget serial device?

现需要将OKA40i-C板子上的OTG下载口配置为虚拟串口,实现u***串行通信,利用linux已存在的u***转虚拟串口驱动:USB

2022-01-04 06:47:05

怎样将linux板卡虚拟为USB网卡设备

kernel menuconfig-> Device Drivers ->USB support -> USB Gadget

2021-11-05 08:35:27
7天热门专题 换一换
相关标签