读Linux那些事儿之我是HUB笔记(四)
24、去抖动技术 原则上,spec规定,只有持续了100ms的插入才算真正的插入,或者说才算稳定的插入.hub_port_debounce 就是干这件事情的,这个函数会让你至少等待 100ms,如果设备依然在,那说明稳定了; 25、printk_ratelimit: 是 printk 的变种,printk_ratelimit 的用途就是当你某条消息可能会重复的被多次打印的,甚至极限情况下,打印个成千上万条,直接导致日志文件溢出,把别的信息都冲掉了,这样是不好的,于是进化出来一个 printk_ratelimit(),它会控制打印消息的频率,如果短期内连续出现打印消息,那么它把消息抛弃,这种情况下这个函数返回 0,,只有返回非 0值的情况下才会真正打印. 26、hub是如何去实现调用设备提供的probe接口: :一个usb设备申请内存空间,设置它的状态,把它复位,为它设置地址,获取它的描述符,然后就向设备模型中添加这么一个设备,再然后会为这个设备寻找它的驱动程序,再然后驱动程序提供的 probe()函数就会被调用. 从 usb 这边来说,只要调用 device_add 这么一个函数向设备模型核心层添加设备就够了,剩下的事情设备模型层会去处理,这就是设备模型的优点,也叫统一的设备模型.就是说不管你是 pci 还是 usb还是 scsi, 总线驱动的工作:是申请并建立总线的数据结构, 设备驱动的工作:是往这条总线上注册,调用 driver_add, 而设备这边也是一样,也往该总线上注册,即调用 device_add.而driver_add 就会在总线上寻找每一个设备,就是获得你那个 18 个字节的真正的完整的设备描述符.这样子,也就达到了目的了.这就是 Windows下面的处理方法.
本文出自 “Paul玩嵌入式Linux” 博客,请务必保留此出处http://zyg0227.blog.51cto.com/1043164/557040 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |