我正在尝试根据Essential Linux设备驱动程序书实现一个虚拟鼠标驱动 程序 。 有一个用户空间应用程序,它产生坐标以及一个内核模块。
请参阅: 虚拟鼠标驱动程序和用户空间应用程序代码,并逐步了解如何使用此驱动程序。
2.)接下来我检查了dmesg输出结果,
模拟点击而不点击
如何检测在Linux中的鼠标和键盘不活动
我怎样才能模拟在x,y坐标,使用sendinput的双击鼠标(我khow句柄)上的双击鼠标?
自定义鼠标光标的阴影(2)
编程检测鼠标和键盘是否插入
input:未指定的设备作为/ class / input / input32
虚拟鼠标驱动程序初始化
3.) sysfs节点是在初始化期间正确创build的(在/sys/devices/platform/vms/coordinates )
4.)我知道虚拟鼠标驱动程序( input32 )通过检查以下内容链接到event5 :
$ cat / proc / bus / input / devices
I:总线= 0000供应商= 0000产品= 0000版本= 0000
N:Name =“”
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时,我得到“没有这样的服务” 。
这里是我build立和运行虚拟鼠标的完整脚本:
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收到的结果,但我通过你的程序收到它回声9> / sys / devices / platform / virmouse / vmevent
得到:
时间1368284298.207654types2代码0值9
时间1368284298.207657types2代码1值19
时间1368284298.207662types0代码0值0
所以现在的问题是:X11有什么问题? 我想强调的是,我在两个不同的发行版Ubuntu 11.04和Fedora 14下试过这个代码。
也许这将有助于:在Xorg.0.log我看到以下内容:
(21.022)(II)未指定input驱动程序/标识符(忽略)
(II)config / udev:添加input设备(/ dev / input / event5)
(II)没有指定input驱动器/标识符(忽略)
(II)config / udev:添加input设备(/ dev / input / event5)
(II)没有指定input驱动程序/标识符(忽略)
linux:双鼠标 – 多鼠标指针的鼠标?
阅读隐藏在Windows(hidapi)上的鼠标/键盘
喂养一个鼠标驱动程序备用数据在Linux中
如何在Windows上抓住鼠标
鼠标双击不工作相当好
尝试在输入设备驱动程序中替换下面的代码行
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上为我工作
我花了很多时间,解决了这个问题,我想帮助其他人解决这个问题。 我认为一些外部X11功能干扰了我的模块工作。 禁用GDM后,它现在工作正常(运行级别3)。 工作代码,你可以在这里找到http://fred-zone.blogspot.ru/2010/01/mouse-linux-kernel-driver.html工作发行ubuntu 11.04(gdm禁用)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。