linux usb初始化,Linux USB subsystem -- initialize

目的:对USB作深入学习,在此留下笔记。欢迎讨论。

[Linux 3.2] [driver/usb/core/usb.c]

USB作为Linux系统的一个子系统,其初始化函数被subsys_initcall修饰。

其初始化代码如下:

/*

* Init

*/

staticint__init usb_init(void)

{

intretval;

if(nousb) {

pr_info("%s: USB support disabled\n", usbcore_name);

return0;

}

retval = usb_debugfs_init();

if(retval)

gotoout;

retval = bus_register(&usb_bus_type);

if(retval)

gotobus_register_failed;

retval = bus_register_notifier(&usb_bus_type, &usb_bus_nb);

if(retval)

gotobus_notifier_failed;

retval = usb_major_init();

if(retval)

gotomajor_init_failed;

retval = usb_register(&usbfs_driver);

if(retval)

gotodriver_register_failed;

retval = usb_devio_init();

if(retval)

gotousb_devio_init_failed;

retval = usbfs_init();

if(retval)

gotofs_init_failed;

retval = usb_hub_init();

if(retval)

gotohub_init_failed;

retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE);

if(!retval)

gotoout;

usb_hub_cleanup();

hub_init_failed:

usbfs_cleanup();

fs_init_failed:

usb_devio_cleanup();

usb_devio_init_failed:

usb_deregister(&usbfs_driver);

driver_register_failed:

usb_major_cleanup();

major_init_failed:

bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);

bus_notifier_failed:

bus_unregister(&usb_bus_type);

bus_register_failed:

usb_debugfs_cleanup();

out:

returnretval;

}

如果在boot参数(对u-boot是在bootargs里面加:nousb)里面有nousb,输出: usbcore: USB support disabled,然后退出。

如果在boot参数()里面没有nousb,则进行USB的初始化工作。

初始化的主要内容如下:

1. usb debug 文件系统初始化: usb_debugfs_init()。

2. 注册USB总线 :bus_register(&usb_bus_type)。

3. 给USB总线注册一个通知链 : bus_register_notifier(&usb_bus_type, &usb_bus_nb)。

4. usb_major_init

5. 注册usbfs驱动: usb_register(&usbfs_driver)

usbfs_driver在

6. usb_devio_init

7. USB文件系统注册:usbfs_init()。

注:如果没有CONFIG_USB_DEVICEFS,此函数为inline空函数。如果定义CONFIG_USB_DEVICEFS,则在实现。

8. 对USB HUB进行初始化:usb_hub_init()

usb_hub_init()在中实现。

9. 注册一个generic的USB驱动:usb_register_device_driver(&usb_generic_driver, THIS_MODULE);

下面文章会依次对每个部分进行详细描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值