使用Linux虚拟鼠标驱动

Ale*_*pus 5 linux mouse mouseevent linux-device-driver linux-kernel

我正在尝试根据Essential Linux device Drivers一书实现虚拟鼠标驱动程序。有一个用户空间应用程序,它生成坐标以及一个内核模块。

请参阅:虚拟鼠标驱动程序和用户空间应用程序代码以及如何使用此驱动程序的分步说明。

1.) 我编译用户空间应用程序和驱动程序的代码。

2.)接下来我检查了dmesg输出并得到了,

输入:未指定的设备为 /class/input/input32
虚拟鼠标驱动程序已初始化

3.) sysfs节点在初始化期间正确创建(参见/sys/devices/platform/vms/coordinates

4.)通过检查以下内容,我知道虚拟鼠标驱动程序 ( input32 ) 已链接到event5 :

$ cat /proc/bus/input/devices
I: 总线=0000 供应商=0000 产品=0000 版本=0000
N: 名称=""
P: Phys=
S: Sysfs=/devices/virtual/input/input32
U: Uniq=
H:处理程序=事件5
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 stop来停止,但是在停止时我得到“没有这样的服务”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
Run Code Online (Sandbox Code Playgroud)

生成文件:

obj-m+=app.o
Run Code Online (Sandbox Code Playgroud)

内核版本:2.6.35.6


正如我之前所说,我可以通过 od 收到结果,但我通过你的程序收到它 echo 9 19 > /sys/devices/platform/virmouse/vmevent

给出:

时间 1368284298.207654 类型 2 代码 0 值 9

时间 1368284298.207657 类型 2 代码 1 值 19

时间 1368284298.207662 类型 0 代码 0 值 0

那么现在的问题是:X11出了什么问题?我想强调的是,我在两个不同的发行版 Ubuntu 11.04 和 Fedora 14 下尝试了这段代码。


也许这会有所帮助:在 Xorg.0.log 中我看到以下内容:

[21.022](II)未指定输入驱动程序/标识符(忽略)

[272.987](II)config/udev:添加输入设备(/dev/input/event5)

[272.987](II)未指定输入驱动程序/标识符(忽略)

[666.521](II)config/udev:添加输入设备(/dev/input/event5)

[666.521](II)未指定输入驱动程序/标识符(忽略)

Ale*_*pus 4

我花了很多时间来解决这个问题,我想帮助其他遇到这个问题的人。我认为一些外部X11功能干扰了我的模块工作。禁用 GDM后,它现在可以正常工作(运行级别 3)。您可以在这里找到工作代码http://fred-zone.blogspot.ru/2010/01/mouse-linux-kernel-driver.html工作发行版ubuntu 11.04(禁用gdm)