从源代码编译驱动程序时 xinput ABI 版本错误

从源代码编译驱动程序时 xinput ABI 版本错误

我正在使用联想 X1 Yoga 平板电脑,我需要一个自定义版本的 xf86-input-wacom 驱动程序才能使我的笔正常工作。在此过程中,我发现一些头文件包含与实际安装不一致的版本信息。我的问题是如何获取正确的开发文件,以便我从源代码编译此驱动程序。

我做了什么:

我在 Lenovo X1 Yoga Tablet 上安装了 Ubuntu 16.04.3 LTS。手写笔可以工作,但会产生一些虚假的输入数据。为了解决这个问题,我需要安装 xf86-input-wacom 驱动程序的自定义版本:请参阅以下讨论https://sourceforge.net/p/linuxwacom/bugs/339/按照该页面第二条评论中的说明,我做了以下操作。

$ sudo apt-get install autoconf pkg-config make xutils-dev libtool xserver-xorg-dev libx11-dev libxi-dev libxrandr-dev libxinerama-dev libudev-dev

安装开发文件(一些软件包已经安装。)

$ git clone https://github.com/jigpu/xf86-input-wacom -b fix-bug-339

获取我需要的特定分支。

$ cd xf86-input-wacom
$ ./autogen.sh --prefix=/usr && make

编译驱动程序。

由于遇到问题,我手动复制了生成的驱动程序

$ cp src/.libs/wacom_drv.so /usr/lib/xorg/modules/input/wacom_drv.so

重新启动后,xinput 看不到任何 wacom 设备。问题出在

/var/log/Xorg.0.log:

[    11.725] (II) LoadModule: "wacom"
[    11.725] (II) Loading /usr/lib/xorg/modules/input/wacom_drv.so
[    11.726] (II) Module wacom: vendor="X.Org Foundation"
[    11.726]    compiled for 1.18.4, module version = 0.35.0
[    11.726]    Module class: X.Org XInput Driver
[    11.726]    ABI class: X.Org XInput driver, version 22.1
[    11.726] (EE) wacom: module ABI major version (22) doesn't match the server's version (24)
[    11.726] (II) UnloadModule: "wacom"
[    11.726] (II) Unloading wacom

那么,为什么刚从源代码编译的模块的 xinput ABI 版本会落后于 X 服务器的版本呢?让我们来看看

/usr/include/xorg/xf86Module.h:

#define ABI_ANSIC_VERSION       SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION    SET_ABI_VERSION(20, 0)
#define ABI_XINPUT_VERSION      SET_ABI_VERSION(22, 1)
#define ABI_EXTENSION_VERSION   SET_ABI_VERSION(9, 0)
#define ABI_FONT_VERSION        SET_ABI_VERSION(0, 6)

因此,根据这个头文件,版本确实是 22,但我全新安装的 Ubuntu 16.04.3 LTS 的实际版本是 24。

所以我的问题是,如何获取正确的开发文件,以便我编译与 Ubuntu 16.04.3 LTS 附带的 Xorg 版本兼容的驱动程序?

顺便说一句,我能够通过让我的朋友在他的 Fedora 系统上编译具有兼容版本的驱动程序来实现这一点。我只是将他的 wacom_drv.so 复制到 /usr/lib/xorg/modules/input。但将来我希望能够在没有他帮助的情况下维护它。

答案1

奇怪的是,我今天遇到了与 mtrack 完全相同的问题。我通过执行 clean checkout(准确地说是 git clone)并重新运行 autoreconf 和 ./configure 解决了这个问题。但我仍然不知道如何清理原始目录。

答案2

我又搜索了一下,问题已经解决了。据我所知,Ubuntu 16.04.3 LTS 附带的默认 Xorg 版本对应于带有后缀的软件包

*-hwe-16.04

当我安装开发文件时,我安装了包

xserver-xorg-dev

这不正确。我应该安装

xserver-xorg-dev-hwe-16.04

虽然我不确定我作为用户应该如何知道这一点。无论如何,安装该软件包、重新编译并重新安装解决了该问题。

相关内容