如题,有没有这种情况啊??还是我想歪了?
最近在看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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |