[USB] 梳理USB子系统

看了很久的USB子系统了,还是雾蒙蒙的,现在梳理一下。

首先从bus入手,在core下面定义了struct bus_type usb_bus_type,这就是usb的bus上的设备与驱动通用的一个结构体。

首先看driver,API主要在core/driver.c里,注册usb_bus_type的,主要有两个函数:usb_register_device_driver()usb_register_driver()

这两个函数最主要的区别就是for_devices,而它在usb_device_match()函数(usb_bus_type中的match函数)中用到。用来表征该驱动是设备驱动(is_usb_device()),还是接口驱动(is_usb_interface())。

其次是device,API主要是在core/usb.c里,注册usb_bus_type的函数:usb_alloc_dev()

这个函数用来生成一个usb设备,只在hub.c里的hub_port_connect_change()函数中被调用,与usb_new_device()(该函数也只是在这里被调用)配合使用。

调用流程如下(core/hub.c):

usb_hub_init() -> kthread_run(hub_thread, NULL, "khubd")

       hub_thread() -> hub_event() -> hub_port_connect_change() -> usb_alloc_dev() usb_new_device()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值