如题,有没有这种情况啊??还是我想歪了?
最近在看usb协议,有点晕啊!!!
还是hub是集成在usb主控制器中啊?没找到相关文档啊!!
谁知道啊,给指条路啊!!
一般来说,一个电脑里有一个 usb host controller就可以了,她就可以控制很多个设备了,比如u盘,比如usb键盘,比如usb鼠标.所有的外设都把自己的请求提交给 usb host controller.然后让 usb host controller 统一来调度.而设备怎么连到 host controller上?哎,这就是我们故事的主角,hub,乳名叫做集线器。
关于hub的代码,在drivers/usb/core/目录下面,有一个叫做hub.c的文件.这个文件
可不简单. localhost:/usr/src/linux-2.6.22.1/drivers/usb/core # wc -l hub.c
傻眼了,就hub这么一个玩艺儿竟然有三千多行代码,真要是按行计费,写代码的那些家
伙还不发财发死?还好不是那样,真要是那样,还不个个都跟赵丽华似的,一个个都成了诗人,
开源社区该改成开源诗社了.
三千多行就三千多行吧,总不能见困难就退吧.小的时候我们可都是听着雷锋叔叔的故
事长大的,雷锋叔叔的螺丝钉的精神虽然我们学不到,但是雷锋叔叔说的好,对待女同志,要像
春天般的温暖!同样,我们对待代码,也要像春天般的温暖.嗯,跟我走吧,现在就出发.
939 module_exit(usb_exit);
很显然,这样两行正是 Linux中 usb 子系统的初始化代码,这里我们看到一个 subsys_init
call,它也是一个宏,我们可以把它理解为 module_init,只不过因为这部分代码比较核心,开发者
们把它看作一个子系统,而不仅仅是一个模块,这也很好理解,usbcore这个模块它代表的不是某
一个设备,而是所有usb设备赖以生存的模块,Linux 中,像这样一个类别的设备驱动被归结为一
个子系统.比如pci子系统,比如scsi子系统,基本上,drivers/目录下面第一层的每个目录都算一
个子系统,因为它们代表了一类设备.subsys_initcall(usb_init)的意思就是告诉我们usb_init
是我们真正的初始化函数,而 usb_exit()将是整个usb 子系统的结束时的清理函数.于是我们就
从 usb_init 开始看起,
860 /*
861 * Init
862 */
863 static int __init usb_init(void)
864 {
865 int retval;
866 if (nousb) {
867 pr_info("%s: USB support disabled\n", usbcore_na
me);
868 return 0;
869 }
870
871 retval = ksuspend_usb_init();
872 if (retval)
873 goto out;
874 retval = bus_register(&usb_bus_type);
875 if (retval)
876 goto bus_register_failed;
877 retval = usb_host_init();
878 if (retval)
879 goto host_init_failed;
880 retval = usb_major_init();
881 if (retval)
882 goto major_init_failed;
883 retval = usb_register(&usbfs_driver);
884 if (retval)
885 goto driver_register_failed;
886 retval = usb_devio_init();
887 if (retval)
888 goto usb_devio_init_failed;
889 retval = usbfs_init();
(转)
有奖活动 | |
---|---|
分享开发笔记,赚取电动螺丝刀(便携轻巧与无刷电机两款可选) | |
看《关键跃升》,聊聊工作心法、动力、能力、沟通与协作,从五个方面深入交流你的工作心得 | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
我要给自己挣一部逻辑分析仪 | |
用知识换取送给亲朋的礼物,做个浪漫的开发者 | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 |
打赏帖 | |
---|---|
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 | |
【换取手持示波器】树莓派PICO逻辑分析仪被打赏16分 |