如何从用户空间访问输入设备驱动程序
How to access input device driver from userspace
我目前正在为触摸屏开发输入子系统驱动程序。我不知道的是如何从用户空间访问设备,例如如何打开应该在文件系统中创建的文件。
到目前为止我所做的是:
在我 insmod 驱动程序之后,我在 dmesg 中收到以下消息:
输入:driver_name as /devices/platform/soc/3f804000.i2c/i2c-1/1-0038/input/input0
现在当我走到这个位置时,我发现 input0,这是一个目录。在这个目录中,我可以找到name、properties、uevent等文件,但是none 这里的文件包含触摸数据。
我的问题是,输入子系统在我调用后将触摸数据放在哪里
input_report_abs(data.input, ABS_X, coord_x);
input_report_abs(data.input, ABS_Y, coord_y);
input_sync(data.input);
已解决:
一旦你执行 insmod,新文件将在 /dev/input 下创建,在我的例子中是 event0 文件。为了测试功能,你可以做evtest input0。可以通过以下方式从用户空间程序使用此文件:
struct input_event ev;
FILE* fd = open("/dev/input/event0", O_RDWR);
while(1)
{
int count = read(fd, &ev, sizeof(struct input_event);
for(int i = 0; i < (int)count / sizeof(struct input_event); i++)
{
if(EV_KEY == ev.type) // printf ...
if(EV_ABS == ev.type) // printf ...
}
}
希望这会对某些人有所帮助,因为我觉得文档中对此的介绍还不够。
我目前正在为触摸屏开发输入子系统驱动程序。我不知道的是如何从用户空间访问设备,例如如何打开应该在文件系统中创建的文件。 到目前为止我所做的是: 在我 insmod 驱动程序之后,我在 dmesg 中收到以下消息:
输入:driver_name as /devices/platform/soc/3f804000.i2c/i2c-1/1-0038/input/input0
现在当我走到这个位置时,我发现 input0,这是一个目录。在这个目录中,我可以找到name、properties、uevent等文件,但是none 这里的文件包含触摸数据。
我的问题是,输入子系统在我调用后将触摸数据放在哪里
input_report_abs(data.input, ABS_X, coord_x);
input_report_abs(data.input, ABS_Y, coord_y);
input_sync(data.input);
已解决: 一旦你执行 insmod,新文件将在 /dev/input 下创建,在我的例子中是 event0 文件。为了测试功能,你可以做evtest input0。可以通过以下方式从用户空间程序使用此文件:
struct input_event ev;
FILE* fd = open("/dev/input/event0", O_RDWR);
while(1)
{
int count = read(fd, &ev, sizeof(struct input_event);
for(int i = 0; i < (int)count / sizeof(struct input_event); i++)
{
if(EV_KEY == ev.type) // printf ...
if(EV_ABS == ev.type) // printf ...
}
}
希望这会对某些人有所帮助,因为我觉得文档中对此的介绍还不够。