linux usb core

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值