驱动Linux Hidraw驱动:深入了解如何利用它(linuxhidraw)
继计算机发展的几十年 后,从外部输入设备到桌面计算机的一个重要连接,是一个兼容计算机的专用输入设备,被称为HID(Human Interface Device),简单来说,HID设备是用户可以与计算机进行直接交互的设备,它可以帮助用户控制计算机,其中包括鼠标,键盘,游戏控制台,手柄,触摸板等。
HID接口有两种主要实现,一种是USB HID,另一种是Linux上的HIDRAW。 Linux HIDRAW驱动可以为使用Linux内核的系统提供驱动功能,模拟HID设备,以便用户可以与系统进行交互。 由于HIDRAW驱动功能的重要性,访问和驱动HIDRAW设备在Linux开发中变得非常重要。
使用HIDRAW驱动的最常见方法需要以下几个步骤:
首先,我们需要枚举当前系统中可用的HIDRAW设备。 在Linux系统中,我们可以使用以下代码来实现:
#include
#include
int opened_hidraw_devices = 0;
for (int i = 0; i { // Enumarate up to 16 hidraw devices
char device_name[65] = { 0 }; sprintf(device_name, "/dev/hidraw%d", i);
int fd = open(device_name, O_RDWR); if (fd
opened_hidraw_devices++; close(fd);
}
其次,当我们检测到某个HIDRAW设备时,我们需要获取其信息,以便可以得知我们想要使用的设备的详细信息及其支持特性。 我们可以使用以下函数进行获取:
int hidraw_get_info(int fd, struct hidraw_info *info)
{ int res;
memset(info, 0, sizeof(*info));
res = ioctl(fd, HIDIOCGRAWINFO, info); if (res
{ perror("HIDIOCGRAWINFO");
return -1; }
return 0;}
最后,我们可以使用该设备的HIDRAW驱动进行通信,来实现与设备的交互:
int hidraw_send_data(int fd, uint8_t* data, size_t len)
{ int res;
// Write data to the HIDRAW device res = write(fd, data, len);
if (res {
perror("write"); return -1;
}
return 0;}
int hidraw_read_data(int fd, uint8_t* data, size_t len){
int res; // Read data from the HIDRAW device
res = read(fd, data, len); if (res
{ perror("read");
return -1; }
return 0;
综上所述,利用Linux HIDRAW驱动可以使用Linux内核作为HID设备,以便用户可以与计算机进行交互。 HIDRAW驱动的使用步骤是枚举当前可用的HIDRAW设备,获取设备的信息并建立通信,以驱动HIDRAW设备。