设为首页 加入收藏

TOP

Linux USB subsystem --- USBFS driver registration
2014-11-24 13:29:47 来源: 作者: 【 】 浏览:1
Tags:Linux USB subsystem --- USBFS driver registration

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


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


定义:usbfs_driver


[Linux 3.2] [include/linux/usb.h]


函数:usb_register();


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


函数:usb_register_driver();


此函数主要功能实现是通过driver_register实现。后面会详细分析。


其余功能如下:


1. usbfs_update_special() ==> 跟usb文件系统相关,暂时不分析。


2. usb_create_newid_file() ==> 创建newid属性文件,在/sys/bus/usb/drivers/usbfs/下面可以看到此文件。


3. usb_create_removeid_file() ==> 创建removeid 性文件,在/sys/bus/usb/drivers/usbfs/下面可以看到此文件。


4. 输出信息:usbcore: registered new interface driver usbfs


问题:newid与removeid属性文件的作用是什么?


回答:等待解答


现在分析driver_register功能:


1. 首先判断,些驱动所属bus的subsys_private结构有没有初始化。如果没有,报bug信息。


2. 判断需要注册的driver和driver所属的bus是否都有probe, remove, shutdown函数。如有,打印kernel warning信息。


3. 判断此driver已经在driver所属的bus上面注册过了。如果注册过了,打印错误信息,并返回。


4. 调用bus_add_driver来注册driver。


5. 调用driver_add_groups来添加组属性。


6. 返回。


最后对bus_add_driver进行分析。


其功能是向bus中添加一个driver。


1. bus_get() ==> bus的计数加1;


2. kzalloc,分配driver_private内存空间。


3. 初始化此driver的klist_devices链表。


4. kobject_init_and_add() ==> 在/sys/bus/usb/drivers/下面创建usbfs文件夹。


5. 如果总线支持drivers_autoprobe,调用driver_attach。(USB 总线支持)


6. driver_create_file ==> 在/sys/bus/usb/drivers/usbfs下面创建uevent属性文件。


7. driver_add_attrs() ==> 将总线的属性也加到/sys/bus/usb/drivers/usbfs


8. add_bind_files() ==> 在/sys/bus/usb/drivers/usbfs创建bind和unbind属性文件。


9. kobject_uevent() ==> 发送一个KOBJ_ADD的事件。


在/sys/bus/usb/drivers/usbfs下面的文件:


bind module new_id remove_id uevent unbind


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++编译器无法捕捉到的8种错误 下一篇Linux Debug Filesystem的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)