android手机 usb hub,[RK3288][Android6.0] USB hub初始化流程小结

Platform: ROCKCHIP

OS: Android 6.0

Kernel: 3.10.92

上一篇文件小结了USB设备的枚举过程,而设备是插入到hub上才被检测到的.

这里小结hub的初始化,假设初始化之前USB设备已经插入,并且这里讨论的是

root hub,非root hub的行为会和usb设备类似.

usb core初始化会创建一个hub thread, 来处理USB设备插入后的枚举事件.

usb_init ->    core/usb.c

usb_hub_init ->    hub.c

usb_register    //和其他USB设备一样注册到core中,让core知道它的存在.

hub_thread ->

hub_events    //while循环,第一次进来后hub event list是空,马上退出然后进入休眠.

wait_event_freezable    //休眠等待测到有usb插入.

对于root hub,它和host controller一起的,也就是说有host controller,就一定有root hub存在,

在host controller初始化时会一并将root hub注册.

ehci_rk_init -> echi-rockchip.c

platform_driver_register ->

ehci_rk_probe ->

usb_add_hcd ->

usb_alloc_dev     //分配root hub的usb_device

register_root_hub ->

usb_new_device ->

usb_enumerate_device    //枚举获取root hub信息

device_add ->    进而调用hub drvier的probe

hub_probe ->    hub.c

hub_configure    ->

usb_get_status    //获得hub device状态

usb_alloc_urb    //分配urb

usb_fill_int_urb    //填充中断类型的urb(hub支持control/int类型), 注意这里的hub_irq()参数,后面会重点提到.

hub_activate ->

schedule_delayed_work ->

hub_init_func2 ->

hub_activate    //HUB_INIT2阶段

schedule_delayed_work ->

hub_init_func3 ->

hub_activate ->//HUB_INIT3阶段

usb_submit_urb    //提交urb

kick_khubd    ->

wake_up(&khubd_wait) ->    //接下来就是枚举设备的过程了.

hub_thread ->

hub_events ->

hub_port_connect_change ->

usb_alloc_dev

usb_set_device_state    //USB_STATE_POWERED:上电状态

choose_devnum

hub_port_init

usb_new_device

usb_enumerate_device

device_add    //接着就会调用到对应设备的probe函数.

参考:

<>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值