linux usb core是针对usb host,对于做手机的我而言,更加关注的是usb gadget,毕竟手机更多的作为usb外设而存在,不过随着越来越多的otg需求,这块就难以避免了
花点时间研究了下,usb gadget下次再谈
从init开始
1006 static int __init usb_init(void)
1007 {
1008 int retval;
1009 if (nousb) {
1010 pr_info("%s: USB support disabled\n", usbcore_name);
1011 return 0;
1012 }
1013
1014 retval = usb_debugfs_init();
1015 if (retval)
1016 goto out;
1017
1018 retval = bus_register(&usb_bus_type);
1019 if (retval)
1020 goto bus_register_failed;
1021 retval = bus_register_notifier(&usb_bus_type, &usb_bus_nb);
1022 if (retval)
1023 goto bus_notifier_failed;
1024 retval = usb_major_init();
1025 if (retval)
1026 goto major_init_failed;
1027 retval = usb_register(&usbfs_driver);
1028 if (retval)
1029 goto driver_register_failed;
1030 retval = usb_devio_init();
1031 if (retval)
1032 goto usb_devio_init_failed;
1033 retval = usbfs_init();
1034 if (retval)
1035 goto fs_init_failed;
1036 retval = usb_hub_init();
1037 if (retval)
1038 goto hub_init_failed;
1039 retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE);
1040 if (!retval)
1041 goto out;
usb_init是整个usb core的入口,略过前面debugfs之类的函数,注意到bus_register(&usb_bus_type),用来注册usb bus
接下来一个重要的调用就是usb_hub_init
3864 int usb_hub_init(void)
3865 {
3866 if (usb_register(&hub_driver) < 0) {
3867 printk(KERN_ERR "%s: can't register hub driver\n",
3868 usbcore_name);
3869 return -1;
3870 }
3871
3872 khubd_task = kthread_run(hub_thread, NULL, "khubd");
3873 if (!IS_ERR(khubd_task))
3874 return 0;
3875
3876 /* Fall through if kernel_thread failed */
3877 usb_deregister(&hub_driver);
3