首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Linux虚拟鼠标驱动程序

使用Linux虚拟鼠标驱动程序
EN

Stack Overflow用户
提问于 2013-05-10 12:27:08
回答 2查看 8K关注 0票数 5

我试图实现一个虚拟鼠标驱动程序,根据必需的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时我得到了“没有这样的服务”。

这里是我构建和运行虚拟鼠标的完整脚本:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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没有指定输入驱动程序/标识符(忽略)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-16 18:05:02

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

票数 4
EN

Stack Overflow用户

发布于 2013-06-25 13:29:17

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

代码语言:javascript
运行
复制
set_bit(EV_REL, vms_input_dev->evbit);
set_bit(REL_X, vms_input_dev->relbit);
set_bit(REL_Y, vms_input_dev->relbit);

使用

代码语言:javascript
运行
复制
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上成功了

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16482260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档