我试图实现一个虚拟鼠标驱动程序,根据必需的Linux设备驱动程序书。有一个用户空间应用程序,它生成坐标以及内核模块。
参见:关于如何使用此驱动程序的虚拟鼠标驱动程序和用户空间应用程序代码和循序渐进。
1.)我编译了用户空间应用程序和驱动程序的代码。
2.)接下来,我检查了dmesg
输出,
输入:未指定的设备为/class//input 32 虚拟鼠标驱动程序初始化
3.)在初始化过程中正确地创建了sysfs节点(在/sys/devices/platform/vms/coordinates
中找到)
4.)我知道虚拟鼠标驱动程序(input32 )通过检查以下内容链接到event5:
$ cat /proc/bus/输入/设备 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="“ P: Phys= S: Sysfs=/设备/虚拟/输入/输入32 U: Uniq= H: Handlers=event5 B: EV=5 B: REL=3
5.)接下来,我将一个GPM服务器附加到事件接口:gpm -m /dev/input/event5 -t evdev
6.)运行用户空间应用程序为虚拟鼠标生成随机坐标,并使用od -x /dev/input/event5
观察生成的坐标。
什么都没发生。为什么?这里作者还提到gdm
应该被停止,使用/etc/init.d/gdm停止,但是在停止gdm
时我得到了“没有这样的服务”。
这里是我构建和运行虚拟鼠标的完整脚本:
make -C /usr/src/kernel/2.6.35.6-45.fc14.i686/ SUBDIRS=$PWD modules
gcc -o app_userspace app_userspace.c
insmod app.ko
gpm -m /dev/input-event5 -t evdev
./app_userspace
Makefile:
obj-m+=app.o
内核版本:2.6.35.6
正如我之前所说的,我可以通过od收到结果,但我是通过您的程序/sys/devices/platform/virmouse/vmevent收到的,回显9 19 >
给予:
time 1368284298.207654类型2代码0值9
time 1368284298.207657类型2代码1值19
time 1368284298.207662类型0代码0值0
所以现在的问题是: X11有什么问题?我想强调,我在两个不同的发行版Ubuntu11.04和Fedora 14下尝试了这段代码。
也许这会有所帮助:在Xorg.0.log中,我看到了以下内容:
21.022没有指定输入驱动程序/标识符(忽略)
272.987配置/udev:添加输入设备(/dev/ input /event5)
272.987没有指定输入驱动程序/标识符(忽略)
666.521配置/udev:添加输入设备(/dev/ input /event5)
666.521没有指定输入驱动程序/标识符(忽略)
发布于 2013-05-16 18:05:02
我花了大量的时间,解决这个问题,我想帮助其他人,谁在这个问题上运行。我认为一些外部X11功能干扰了我的模块工作。在禁用GDM之后,它现在工作正常(运行级别3)。工作代码,您可以在这里找到http://fred-zone.blogspot.ru/2010/01/mouse-linux-kernel-driver.html工作发行版ubuntu11.04 (gdm禁用)
发布于 2013-06-25 13:29:17
尝试替换输入设备驱动程序中的以下代码行
set_bit(EV_REL, vms_input_dev->evbit);
set_bit(REL_X, vms_input_dev->relbit);
set_bit(REL_Y, vms_input_dev->relbit);
使用
vms_input_dev->name = "Virtual Mouse";
vms_input_dev->phys = "vmd/input0"; // "vmd" is the driver's name
vms_input_dev->id.bustype = BUS_VIRTUAL;
vms_input_dev->id.vendor = 0x0000;
vms_input_dev->id.product = 0x0000;
vms_input_dev->id.version = 0x0000;
vms_input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
vms_input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
vms_input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
vms_input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA);
vms_input_dev->relbit[0] |= BIT_MASK(REL_WHEEL);
它在我的ubuntu 12.04上成功了
https://stackoverflow.com/questions/16482260
复制相似问题