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

Linux USB子系统之Gadget设备端驱动

源码路径:
usb/gadget/

USB层级例子
root -> port -> device -> 多个EP 端点

如以下这个设备的描述符树

    USB_Core -->|配置描述符| Config0Config0 --> Interface0(HID音量接口)Config0 --> Interface1(其他功能接口)Interface0 --> HID_DescriptorInterface0 --> EP1(IN端点1)Interface1 --> EP2(端点2)Interface1 --> EP3(端点3)HID_Descriptor --> Report_Descriptor

ps : usb控制器有带宽和端点的限制,所以device不能超过控制器端点数量限制,否则无法枚举完成。

层级

  • usb/gadget/configfs.c
  • usb/gadget/functions.c
  • usb/gadget/function/f_rndis.c

以下是device层级的

例子:
RNDIS驱动,安卓手机接入电脑能作为USB网卡就用这个
usb/gadget/function/f_rndis.c

驱动注册:

DECLARE_USB_FUNCTION_INIT(rndis, rndis_alloc_inst, rndis_alloc);

宏的定义很简单
image

  • 驱动加载时调用usb function注册,卸载反之
  • 赋值两个行为函数指针
    • alloc_inst 这个是usb实例初始化注册
    • alloc_func 这个是usb功能注册,用于configfs,端点描述符等处理

UVC例子

usb/gadget/function/
层级
f_uvc.c 适配层L2
uvc_v4l2.c 底层转换支持L1

usb/gadget/function/f_uvc.c
通过uvc->vdev私有数据管理下属v4l2虚拟设备

主要通过v4l2的api注册虚拟设备,其中的fops函数指针作为数据转换读写的通道。(吐槽一下,内核没有统一使用通道这种设计是有点捞了)

  • 注册
  • video_register_device
  • video_set_drvdata

usb/gadget/function/uvc_v4l2.c
关键ops函数,实现v4l2框架所需的接口即可

  • uvc_v4l2_fops
    image

  • uvc_v4l2_ioctl_ops
    image

端口排查

带宽工具,基于usbmon驱动
https://github.com/aguinet/usbtop

命令查看端点

cat /sys/kernel/debug/usb/devices
# cat /sys/kernel/debug/usb/devicesT:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 6.01
S:  Manufacturer=Linux 6.1.141 ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=21480000.usb
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256msT:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12   MxCh= 1
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0001 Rev= 6.01
S:  Manufacturer=Linux 6.1.141 ohci_hcd
S:  Product=Generic Platform OHCI controller
S:  SerialNumber=214c0000.usb
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms

B代表带宽,而且还需要留意Int+Iso的数量
控制器会有设备数限制和端点数限制
这里的端点数限制指周期端点,包括 int中断传输,isoc基于时间固定带宽传输两种
EP一般有IN/OUT,EP IN + EP OUT = 2个端点

关于alt,usb支持设备布局 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/usbcon/usb-device-layout
image

驱动里面一般也有处理,当USB主机发送USB_REQ_SET_INTERFACE命令时,驱动会调用set_alt函数
例如uac2驱动将会调用afunc_set_alt函数,若根据intf值来切换录制和播放

http://www.jsqmd.com/news/417910/

相关文章:

  • 解锁香港名校密码:十大留学中介“神助攻”来袭 - 博客湾
  • 2026年 洗车机水处理设备厂家推荐排行榜,一体化污水处理设备,工业污水处理设备,专业净化技术助力环保升级! - 品牌企业推荐师(官方)
  • 端到端在工程上的严格含义;funasr的多模块级联;
  • 港校申请秘籍大公开!TOP10留学机构全揭秘 - 博客湾
  • 夸克浏览器v6.8.8 去网站访问限制/去广告/去更新
  • 闲置天猫享淘卡别闲置!超实用高效回收妙招,轻松盘活卡内余额 - 京回收小程序
  • 图扑 HT Qt 应用:高性能可视化渲染效果实现
  • 2026冲刺用!千笔·专业降AI率智能体,本科生降重首选
  • labelme实例分割标注的图片和标注数据微微旋转1度2度 做数据扩增
  • 2026看中医去哪里?中医诊疗机构推荐及选择指南 - 品牌排行榜
  • 2026年优质清洁设备厂家口碑榜 涵盖智能清洁 适配多场景实用之选 - 深度智识库
  • 2026年全国保洁设备厂家哪家好?技术过硬服务周到 适配多场景需求 - 深度智识库
  • 港校逐梦“加速器”:留学中介TOP10实力大揭秘 - 博客湾
  • 干燥设备订制优选集:2026年这些厂家评价颇高,离心造粒包衣机/高效沸腾制粒机/高效粉碎机,干燥设备生产厂家有哪些 - 品牌推荐师
  • LORA无线数传模块
  • 2026年 全自动洗车机厂家实力推荐榜:隧道式/往复式/公交大巴/智能无人值守洗车机品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026磁轴键盘排名TOP1!迈从Ace 68 Turbo|实至名归的磁轴键盘性价比之王 - 速递信息
  • 揭秘2026:GEO优化如何助力企业突破增长瓶颈,GEO服务/GEO优化AI搜索,GEO优化企业有哪些 - 品牌推荐师
  • LoRa无线数传模块:点对多点通信,一主多从全覆盖
  • mongodb数据库被攻击后分析排查,恢复数据操作
  • 详解文献中引用其他参考文献格式对应的含义
  • 港校申请“加速键”:十大留学中介助力冲刺香港名校 - 博客湾
  • 2026 年知识库部署厂商排行:优质服务商、定制方案商、全栈部署厂商全面汇总 - 品牌2025
  • 浙大 × 西湖大学最新:超越π0.5,融合人类数据与世界模型的高效VLA训练框架
  • 本科留学秘籍大公开!留学中介助力名校梦 - 博客湾
  • 2026年四川省机房建设厂家推荐榜 西南数基建设实力企业甄选(附评分) - 深度智识库
  • 2026 靠谱知识库部署厂商盘点:企业级服务商、AI 方案商、本地化部署商一应俱全 - 品牌2025
  • 联想全新服务打造永不停机的基础设施:由主动式 AI 驱动支持赋能的服务器 Premier Support Plus 服务
  • 圆梦海本科: 靠谱留学中介实力护航,冲刺顶尖本科 - 博客湾
  • 2026年徐州压路机/装载机/清扫机防撞系统/夜间施工照明灯/LED信息看板厂家综合评测报告 - 2026年企业推荐榜