usb驱动相对i2c复杂了一些,主要表现在要获取usb的设备描述符等。主从设备的通讯方式跟i2c差不多。
学习linux驱动的步骤:
(1)了解usb的结构,主机的检查方法。
(2)了解usb通讯协议的基本术语。
(3)了解usb的初始化的过程。
(4)了解usb的主从机之间的握手协议。
以上的内容在我的前几遍转载别人的博文中有详细介绍(谢谢这些作者)。
了解的usb的通讯协议对你驱动的学习将提高很大的帮助。
下面我大概阐述鼠标驱动的执行过程
(1)注册驱动usb_register(&usb_mouse_driver)
(2)驱动的探测,这阶段完成设备描述符等的填充。初始化urb,input等,在input_dev->open = usb_mouse_open;用户空间会调用usb_mouse_open,这边执行 if (usb_submit_urb(mouse->irq, GFP_KERNEL)),即完成了把urb传递给usb core。从而完成数据的传送。
看了usb通讯协议后再ldd3的usb那章再配合mouse driver的代码看,你就可以较快地理解。
下面我吧ldd3的usb这章传上来,中文版的。
|
文件: |
LDD3-13.pdf |
大小: |
380KB |
下载: |
下载 | |
阅读(1350) | 评论(0) | 转发(2) |