当前位置:嗨网首页>书籍在线阅读

11-探测和断开函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

20.3.3 探测和断开函数

在USB设备驱动usb_driver结构体的探测函数中,应该完成如下工作。

● 探测设备的端点地址、缓冲区大小,初始化任何可能用于控制USB设备的数据结构。

● 把已初始化数据结构的指针保存到接口设备中。

usb_set_intfdata()函数可以设置usb_interface的私有数据,这个函数的原型为:

void usb_set_intfdata (struct usb_interface intf, void data);

这个函数的“反函数”用于得到usb_interface的私有数据,其原型为:

void usb_get_intfdata (struct usb_interface intf);

● 注册USB设备。

如果是简单的字符设备,调用usb_register_dev(),这个函数的原型为:

int usb_register_dev(struct usb_interface *intf,

struct usb_class_driver *class_driver);

上述函数中第二个参数为usb_class_driver结构体,这个结构体的定义如代码清单20.15所示。

代码清单20.15 usb_class_driver结构体

1 struct usb_class_driver {

2 char name; /sysfs中用来描述设备名*/

3 struct file_operations fops;/文件操作结构体指针*/

4 int minor_base; /开始次设备号/

5 };

对于字符设备而言,usb_class_driver结构体的fops成员中的write()、read()、ioctl()等函数的地位完全等同于本书第6章中的file_operations成员函数。

如果是其他类型的设备,如tty设备,则调用对应设备的注册函数。

在USB设备驱动usb_driver结构体的探测函数中,应该完成如下工作。

● 释放所有为设备分配的资源。

● 设置接口设备的数据指针为NULL。

● 注销USB设备。

对于字符设备,可以直接调用usb_register_dev()函数的“反函数”,如下所示:

void usb_deregister_dev(struct usb_interface *intf,

struct usb_class_driver *class_driver);

对于其他类型的设备,如tty设备,则调用对应设备的注销函数。