Linux3.10.x的USB学习笔记之HUB

入口函数usb_hub_init:

       注册usb_driver

       开启内核线程kthread_run()

卸载usb_driver //如果线程开启失败


出口函数usb_hub_cleanup:

       停止线程:kthread_stop

usb_deregister(&hub_driver);

   

插入一个USB设备,产生一个中断

Hub_irq  断主控制器处理urb的结果状态,如是OK的,则继续处理。

       Kick_khubd  hub 加入到hub驱动队列hub_event_list中,唤醒hub守护进程wake_up(khubd_wait),开始解析hub

        hub_thread  开启hub线程

             hub_port_connect_change  hub端口发生变化

                                分配内存

                                   udev= usb_alloc_dev(hdev, hdev->bus, port1);

                                                        dev->dev.bus= &usb_bus_type;

                  初始化设备端口

                     hub_port_init  

                                   usb_get_device_descriptor(udev,8); // 获取设备描述符

                                          retval= usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);

 

usb_new_device(udev) //分配一个新的设备

       err= usb_get_configuration(udev); // 把所有的描述符都读出来,并解析

                     usb_parse_configuration

                            device_add  // 把device放入usb_bus_type的dev链表,

                                                 //从usb_bus_type的driver链表里取出usb_driver,

                                                 //把usb_interface和usb_driver的id_table比较

                                                 // 如果能匹配,调用usb_driver的probe

                                                                                           

你可能感兴趣的:(Android/Linux,kernel)