您的位置:首页 > 运维架构 > Linux

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

2017-08-18 11:25 225 查看
入口函数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 usb