[RK3288][Android6.0] USB hub初始化流程小结
2016-11-01 09:22
483 查看
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函数.
参考:
<<Linux那些事儿之我是HUB>>
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函数.
参考:
<<Linux那些事儿之我是HUB>>
相关文章推荐
- [RK3288][Android6.0] 网络服务Netd初始化流程小结
- [RK3288][Android6.0] Display驱动初始化流程小结
- [RK3288][Android6.0] Display驱动初始化流程小结【转】
- [RK3288][Android6.0] Wifi Service初始化流程小结
- [RK3288][Android6.0] U-boot 启动流程小结【转】
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] 输入法框架开机初始化部分小结
- [RK3288][Android6.0] Audio录音frame rate设置流程小结
- [RK3288][Android6.0] 系统调试串口驱动流程小结
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] TS-ADC驱动流程小结
- [RK3288][Android6.0] WiFi在Settings中的热点开启流程小结
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] ION 驱动流程小结
- [RK3288][Android6.0] 开机播放音乐流程小结
- [RK3288][Android6.0] TS-ADC驱动流程小结【转】
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] Audio录音HAL层的初始化流程分析
- [RK3288][Android6.0] Audio的音量设置流程小结