ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

使用Linux虚拟鼠标驱动程序

2019-08-25 18:50:34  阅读:246  来源: 互联网

标签:linux mouse linux-kernel linux-device-driver mouseevent


我正在尝试根据Essential Linux设备驱动程序手册实现虚拟鼠标驱动程序.有一个用户空间应用程序,它生成坐标和内核模块.

请参阅:Virtual mouse driver and userspace application code以及有关如何使用此驱动程序的step by step.

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

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

input: Unspecified device as /class/input/input32
Virtual Mouse Driver Initialized

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

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

$cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=””
P: Phys=
S: Sysfs=/devices/virtual/input/input32
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观察生成的坐标.

没有任何反应.为什么?
另外here作者提到应该停止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

Makefile文件:

obj-m+=app.o

内核版本:2.6.35.6

正如我之前所说,我可以通过od收到结果,但我通过你的程序收到了它
echo 9 19> / SYS /设备/平台/ 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)未指定输入驱动程序/标识符(忽略)

解决方法:

尝试替换输入设备驱动程序中的以下代码行

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上对我有用

标签:linux,mouse,linux-kernel,linux-device-driver,mouseevent
来源: https://codeday.me/bug/20190825/1722034.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有