USB 设备驱动是 Linux 驱动开发中的一个重要领域,它涉及到 USB 子系统的架构、原理和接口,以及 USB 设备的描述符、传输类型和数据处理等。本文将以 usb-skeleton.c 为例,分析一个简单的 USB 设备驱动的开发过程,包括如何注册和注销 USB 驱动,如何获取和释放 USB 设备,如何读写 USB 端点,以及如何处理 USB 事件和错误等。
usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动。两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备。
下面转载的一篇分析usb-skeleton.c文章。
初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发。但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货。当然,还会顺带提一下其他的驱动程序写法。
事实上,Linux的设备驱动都遵循一个惯例–表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构化的思想来分析代码,但我还