USB gadget 笔记

博客围绕USB驱动及设备展开,介绍了查看注册UDC、使用configfs、通过lsusb查看设备信息等操作。还深入分析了基于nanopi neo源代码的musb_core、udc_core等模块关系,包括gadget与udc的绑定、udc的生成、相关结构体及工作流程等信息技术内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gadget arch and API
https://blog.youkuaiyun.com/wenlifu71022/article/details/4668512
USB 驱动及设备生命线
https://blog.youkuaiyun.com/zhqh100/category_3045907.html
1.查看注册了多少个UDC
ls /sys/class/udc/
2.configfs
https://blog.youkuaiyun.com/u014135607/article/details/79949571
https://blog.youkuaiyun.com/litao31415/article/details/97613438
3.lsusb查看USB设备信息
https://ipcmen.com/lsusb
4.USB PC网络通信
https://blog.youkuaiyun.com/forfuture_/article/details/79266375
5.USB gadget, hdrc
https://www.jianshu.com/p/2c1d38086a8b
https://www.jianshu.com/p/d341022167b4
6.gadget驱动分层
https://blog.youkuaiyun.com/litao31415/article/details/99689399
Function
usb_function
usb_function_instance

基于nanopi neo源代码分析musb_core, udc_core, composite, gadget等模块关系

legacy webcam.c module_usb_composite_driver (entry)->
get gadget_driver from composite_driver_template
search udc for udc_list
udc_bind_to_driver->
gadget driver bind
udc start
usb_composite_driver->
bind (be invoked in composite_bind)->
usb_get_function_instance(“uvc”);
usb_add_config to usb_composite_dev
usb_gadget_driver

gadget composite.c usb_gadget_driver (value copied to usb_composite_driver)
bind->
create usb_composite_dev
udc core.c usb_gadget_probe_driver,
udc_bind_to_driver(so where is udc generated)
(usb_add_gadget_udc is provided by udc_core)
musb_core.c struct platform_driver musb_driver
musb_probe->
musb_init_controller->
create musb instance
musb_platform_init->
invoke “musb_platform_ops->init” in sunxi.c (glue layer)
init workqueue (for what purpose?),
Setup by port mode
host
gadget
musb_gadget_setup->
usb_add_gadget_udc
dual role
musb_init_debugfs
sysfs_create_group
glue layer sunxi.c struct platform_driver sunxi_musb_driver
sunxi_musb_probe->
usb_phy_generic_register
sunxi_musb_ops
platform_device_register_full (hdrc)
1.how gadget bind to udc
legacy ->
usb_composite_driver with empty usb_gadget_driver
“module_usb_composite_driver”, this macro for registering usb_composite_driver by “composite usb_composite_probe” in composite

composite ->
real usb_gadget_driver
usb_composite_probe invoke “usb_gadget_probe_driver” in udc core

udc core ->
usb_udc
usb_gadget_probe_driver->udc_bind_to_driver-> usb_gadget_driver bind(in composite.c):
***create usb_composite_dev
usb_composite_driver->bind (legacy)
usb_gadget_udc_start

2.where udc generate
musb_core ->
platform_driver -> musb_probe -> musb_init_controller-> invoke musb_gadget_setup (in musb_gadget)
struct musb
struct usb_gadget g; //attributes be assigned in musb_gadget
usb_gadget_ops
struct usb_gadget_driver *gadget_driver; //be assigned in g.usb_gadget_ops->udc_start

musb_gadget->
musb_gadget_setup -> invoke usb_add_gadget_udc (in usb_core, gadget instance is also in udc)

udc core ->
usb_add_gadget_udc: create usb_udc

3.struct usb_function
struct usb_configuration
struct usb_composite_dev *cdev (be assigned in usb_add_config , invoke usb_add_config_only)

4.zero.c workflow
module_usb_composite_driver->
usb_composite_probe->
assign “gadget_driver” in “usb_composite_driver” with “composite_driver_template”
usb_gadget_probe_driver->
get udc(struct usb_udc) from udc_list
udc_bind_to_driver-> composite_bind(gadget driver bind)
->create “usb_composite_dev”
->bind (usb_composite_driver)
usb_gadget_udc_start (usb_gadget_ops->udc_start)
5.udc register workflow
struct platform_driver musb_driver->musb_probe->musb_init_controller->musb_gadget_setup->
usb_gadget_ops assignment
usb_add_gadget_udc

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值