当前位置:  开发笔记 > 运维 > 正文

如何获取uinput创建的设备的名称(路径)

如何解决《如何获取uinput创建的设备的名称(路径)》经验,为你挑选了1个好方法。

我已成功设置一个小程序来创建一个输入设备,我打算用它来自动测试接收键盘输入事件的应用程序.

我已经按照这个非常好的答案中的两个 教程进行了操作.

当我的程序通过调用ioctl(fd, UI_DEV_CREATE)新设备创建uinput设备出现在文件系统中时,我的测试应用程序可以附加到它并等待事件.我的目标系统已经有了一个/dev/input/event0设备,所以新的设备获得了路径/dev/input/event1.如果我为我的桌面系统编译并运行程序,那里有现有设备/dev/input/event[0-15],当程序运行时,新设备就会获得/dev/input/event16.

我希望我的程序在创建后报告新设备名称.有办法搞定吗?



1> 小智..:

是的,您可以使用UI_GET_SYSNAME(定义/usr/include/linux/uinput.h),如果它在您的平台上可用(例如,Android由于某种原因没有定义它).它将为您创建的设备命名/sys/devices/virtual/input.一旦您了解了sysfs中的设备,就可以/dev/input通过阅读此SO问题找出创建的设备.

在调用之后使用它UI_DEV_CREATE(省略错误/健全性检查):

ioctl(fd, UI_DEV_CREATE);

char sysfs_device_name[16];
ioctl(fd, UI_GET_SYSNAME(sizeof(sysfs_device_name)), sysfs_device_name);
printf("/sys/devices/virtual/input/%s\n", sysfs_device_name);

如果它不可用,您可以尝试查找sysfs设备,/proc/bus/input/devices其中应包含如下条目:

I: Bus=0006 Vendor=0001 Product=0001 Version=0001
N: Name="your-uinput-device-name"
P: Phys=
S: Sysfs=/devices/virtual/input/input12
U: Uniq=
H: Handlers=sysrq kbd mouse0 event11 
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0 0 7ffff ffffffff fffffffe
B: REL=143

..有点麻烦.但正如您所看到的那样,它还会为您提供创建的设备的快捷方式/dev/input.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有