对于设备驱动接口的认识
2011-01-02 10:23
323 查看
对于接口的认识
接口对应的设备功能的抽象
每一个设备或许有不同的接口
比如一个雷帕鼠标 可能会有两种功能,一种是usb驱动, 另外一种是音频流驱动程序。
(设备驱动种类)
那么他就需要两个接口来实现。
接口是对于设备功能来使用的。
因此我们要给自己的驱动程序分配一个接口来使用。
在libusb中使用 libusb_claim_interface(libusb_device_handle * _pHandle , int interface_number);
这个interface_number用来决定选择使用的是哪个接口
在内核中有如下一个结构题用来抽象一个设备接口描述符
struct usb_interface_descriptor
{
__u8 bLength;
__u8 bDescriptorType;
__u8 bInterfaceNumber;
__u8 bAlternateSetting;
__u8 bNumEndpoints;
__u8 bInterfaceClass;
__u8 bInterfaceSubClass;
__u8 bInterfaceProtocal;
__u8 iInterface;
}
因此libusb_claim_interface这个API是用来给驱动程序选择一个接口。
//接口描述符
对于__u8 应该是一个宏定义,他是一个占8个字节的unsigned char的重定义
typedef unsigned char BYTE
typedef BYTE __u8
第一个数据变量 bLength
代表该接口描述符号的长度 ,这个长度是固定的 #define UBS_DT_INTERFACE_SIZE 9
这几个字母是按级别往下排列的 usb的datatable 数据表 的接口 的长度是 9
第二个变量bDescriptorType
用来表述该描述符的类型,对于接口描述符是一个固定的数值 即#define USB_DT_INTERFACE 0x04
第三个变量 bInterfaceNumber
这个就是我们刚才传递进去的数据
这个数据可能会有要求。
等等再探索它。
第四个变量
bAlternateSetting
这个变量是对接口的设置
对于接口的设置有许多个选项,每一个选项有不同的设置,默认使用的是0号设置
第五个变量
bNumEndpoints;
这个变量用来描述该接口的端点个数,不包括0端点。
第六 7 8 个变量
__u8 bInterfaceClass;
代表接口类别对于存储设备就是MASS STORAGE , 用0x08表示, 对于Hub设备是用0x09表示。
第9个变量
iInterface 字符串描述符 用来存储一些额外的附加信息 如公司名字, 产品序列号。
接口描述符号的用户是谁呢?
接口描述符 构成接口描述符数组。我们选择其中一个来使用。
接口对应的设备功能的抽象
每一个设备或许有不同的接口
比如一个雷帕鼠标 可能会有两种功能,一种是usb驱动, 另外一种是音频流驱动程序。
(设备驱动种类)
那么他就需要两个接口来实现。
接口是对于设备功能来使用的。
因此我们要给自己的驱动程序分配一个接口来使用。
在libusb中使用 libusb_claim_interface(libusb_device_handle * _pHandle , int interface_number);
这个interface_number用来决定选择使用的是哪个接口
在内核中有如下一个结构题用来抽象一个设备接口描述符
struct usb_interface_descriptor
{
__u8 bLength;
__u8 bDescriptorType;
__u8 bInterfaceNumber;
__u8 bAlternateSetting;
__u8 bNumEndpoints;
__u8 bInterfaceClass;
__u8 bInterfaceSubClass;
__u8 bInterfaceProtocal;
__u8 iInterface;
}
因此libusb_claim_interface这个API是用来给驱动程序选择一个接口。
//接口描述符
对于__u8 应该是一个宏定义,他是一个占8个字节的unsigned char的重定义
typedef unsigned char BYTE
typedef BYTE __u8
第一个数据变量 bLength
代表该接口描述符号的长度 ,这个长度是固定的 #define UBS_DT_INTERFACE_SIZE 9
这几个字母是按级别往下排列的 usb的datatable 数据表 的接口 的长度是 9
第二个变量bDescriptorType
用来表述该描述符的类型,对于接口描述符是一个固定的数值 即#define USB_DT_INTERFACE 0x04
第三个变量 bInterfaceNumber
这个就是我们刚才传递进去的数据
这个数据可能会有要求。
等等再探索它。
第四个变量
bAlternateSetting
这个变量是对接口的设置
对于接口的设置有许多个选项,每一个选项有不同的设置,默认使用的是0号设置
第五个变量
bNumEndpoints;
这个变量用来描述该接口的端点个数,不包括0端点。
第六 7 8 个变量
__u8 bInterfaceClass;
代表接口类别对于存储设备就是MASS STORAGE , 用0x08表示, 对于Hub设备是用0x09表示。
第9个变量
iInterface 字符串描述符 用来存储一些额外的附加信息 如公司名字, 产品序列号。
接口描述符号的用户是谁呢?
接口描述符 构成接口描述符数组。我们选择其中一个来使用。
相关文章推荐
- Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- 若操作系统没有加载网卡驱动,网卡虽然在系统设备树上,但网卡接口创建不了,那网卡实际能不能接收到数据?
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- usb驱动开发5之总线设备与接口
- WinCE 流接口驱动中设备句柄的传输过程
- 字符设备驱动基础篇4——字符设备驱动读写接口的操作实践
- 使用bat批量修改某个目录下的文件后缀 - 对于只认识txt的设备很有用
- 【再上层楼】CooCox优化了CoX——基于ARM Cortex-M处理器的设备驱动统一接口
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- linux内核字符设备驱动之发送命令接口
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- GPIO驱动及设备模型接口使用讲解
- Linux的USB器件驱动多接口设备初探
- 流接口设备驱动
- 设备驱动的认识
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- linux驱动由浅入深系列:usb子系统之三(usb系统中的设备、配置、接口、端点概念及代码解释)
- MTD层次、MTD设备驱动接口、Nor Flash/Nand Flash驱动
- 设备驱动学习之字符设备驱动接口