probe是usb子系统自动调用的一个函数,有usb设备接到硬件集线器时,usb子系统 会根据production ID和vendor ID的组合或者设备的class、subclass跟protocol的组合来识别设备调用相应驱动程序的probe(探测)函数,对于skeleton 来说,就是skel_probe。系统会传递给探测函数一个usb_interface *跟一个struct usb_device_id *作为参数。他们分别是该usb设备的接口描述(一般会是该设备的第0号接口,该接口的默认设置也是第0号设置)...
接下来的工作是向系统注册一些以后会用的的信息。首先我们来说明一下usb- set_intfdata(),他向内核注册一个data,这个data结构可以是任意的,在这段程序用向内核注册了一个usb_skel结构,就是我们 刚刚看到的被初始化的那个,这个data可以在以后用usb_get_intfdata来得到。 usb_set_intfdata(interface, dev); retval = usb_register_dev(interface, &skel_class); 然后我们向这个interface注册一个skel_class结构。这...
好,了解过usb一些规范细节之后,我们现在来看看linux的驱动框架。事实上,linux的设备驱动,特别是这种hotplug的usb设备驱动,会被编译成模块,然后在需要时挂在到内核。要写一个linux的模块并不复杂,以一个helloworld为例: #include #include MODULE_LICENSE(“GPL”); static int hello_init(void) { printk(KERN_ALERT “Hello World!\n”); return 0; } static int hello_exit(void) { printk(KERN_ALE...
linux usb驱动框架分析(一) 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我 说一说这段时间的收获,跟大家分享一下linux的驱动开发。但这次只先针对linux的usb子系统作分析,因为周五研讨老板催货。当然,还会顺带提一 下其他的驱动程序写法。 事实上,linux的设备驱动都遵循一个惯例——表征驱动程序(用driver...
probe是usb子系统自动调用的一个函数,有usb设备接到硬件集线器时,usb子系统会根据production ID和vendor ID的组合或者设备的class、subclass跟protocol的组合来识别设备调用相应驱动程序的probe(探测)函数,对于skeleton来说,就是skel_probe。系统会传递给探测函数一个usb_interface *跟一个struct usb_device_id *作为参数。他们分别是该usb设备的接口描述(一般会是该设备的第0号接口,该接口的默认设置也是第0号设置)跟...
一:前言usb是一个很复杂的系统.在usb2.0规范中,将其定义成了一个分层模型.linux中的代码也是按照这个分层模型来设计的.具体的分为usb设备,hub和主机控制器三部份.在阅读代码的时候,必须要参考相应的规范.最基本的就是usb2.0的spec.它定义了usb协议.另外的一个是usb控制器的规范.有UHCI,EHCI,OHCI三种.其中UHCI是Intel推出的一种usb控制器标准.它将很多功能交给软件处理.相比之下,它也是最为复杂的.因此,本文档以UHCI为例分析.另外,...
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:前言 usb是一个很复杂的系统.在usb2.0规范中,将其定义成了一个分层模型.linux中的代码也是按照这个分层模型来设计的.具体的分为usb设备,hub和主机控制器三部份.在阅读代码的时候,必须要参考相应的规范.最基本的就是usb2.0的spec.它定义了usb协议.另外的一个是US...
linux下usb驱动之skeleton分析(一) usb_skeleton.c,是usb驱动的框架,适合usb驱动的初学者。 1.结构体 内核其实就是一坨坨的数据结构,加上一根根链表。 对于初学者,如果直接看usb驱动代码,大概会被那些名字相近的结构体弄得晕头转向,比如usb_host_interface和usb_interface,看着看着就把两个混淆了。所以,在学习usb驱动之前,建议把相关结构体都拎出来看一下,其实,也就那么几个结构体在那装神弄鬼。usb skeleton驱...
三:传输过程的实现说到传输过程,我们必须要从URB开始说起,这个结构的就好比是网络子系统中的skb,好比是I/O中的bio.usb系统的信息传输就是打成URB结构,然后再过行传送的.URB的全称叫usb request block.下面从它的接口说起.3.1:URB的相关接口1:URB的创建URB的创建是由usb_alloc_urb()完成的.这个函数会完成URB内存的分配和基本成员的初始化工作.代码如下:struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags){ ...
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 三:传输过程的实现 说到传输过程,我们必须要从URB开始说起,这个结构的就好比是网络子系统中的skb,好比是I/O中的bio.usb系统的信息传输就是打成URB结构,然后再过行传送的. URB的全称叫usb request block.下面从它的接口说起. 3.1:URB的相关接口 1:URB的创建 URB的创...