P1630 上的 kubuntu 13.04(64 位)上的 fujitsu-usb-touchscreen:“make”错误

P1630 上的 kubuntu 13.04(64 位)上的 fujitsu-usb-touchscreen:“make”错误

我在新的 Fujitsu LifeBook P1630 上安装了 Kubuntu 13.04(64 位),并添加了几个软件包:

首先aptitude,然后我执行了aptitude update && safe-upgrade,然后(这似乎有效,除了每次重新xinput-calibrator启动系统时我都必须再次运行它),gcc然后make,,,,,和。build-essentialcheckinstallbinutilslinux-source

然后我下载了文件 cybergene-fujitsu-usb-触摸屏-112fdb75b406.zip链接自页面https://bitbucket.org/cybergene/fujitsu-usb-touchscreen/overview (我假设它是难以捉摸的 v0.3.9,似乎没有任何地方以这个名字链接);我将其内容提取到一个目录中 ~/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406 并尝试运行make。控制台(呃,Konsole)跟踪如下:

archelon@ingelrayok:~/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406$ make
make -C /lib/modules/3.8.0-30-generic/build M=/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406 modules
make[1]: Entering directory `/usr/src/linux-headers-3.8.0-30-generic'
  CC [M]  /home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.o
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c: In function ‘usb_u810_tablet_irq’:
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:133:4: error: implicit declaration of function ‘dbg’ [-Werror=implicit-function-declaration]
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:182:3: error: implicit declaration of function ‘err’ [-Werror=implicit-function-declaration]
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c: In function ‘usb_u810_tablet_probe’:
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:246:6: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:253:6: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:263:6: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:270:6: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:277:6: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:302:5: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:358:5: error: called object ‘err’ is not a function
/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.c:366:5: error: called object ‘err’ is not a function
cc1: some warnings being treated as errors
make[2]: *** [/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/fujitsu_usb_touchscreen.o] Error 1
make[1]: *** [_module_/home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.8.0-30-generic'
make: *** [fujitsu_usb_touchscreen.ko] Error 2
archelon@ingelrayok:~/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406$

我还应该指出,make在我的另一台计算机上,即运行 Kubuntu 12.04 的 Toshiba Satellite R10,此过程无错误完成;这台机器还配有带手写笔的(功能齐全的)平板电脑。(东芝的平板电脑是带有有源数字转换器的 Wacom,而不是富士通的 USB 电阻式触摸屏)。所以,可能我只是缺少了某些软件包——我已经多年没有编译任何东西了,而且从来没有特别擅长编译。也许你可以帮我解决。

更新:我已将 13.04 替换为 12.04 LTS,保留了我的 /home 分区,现在包可以编译:make完成且没有错误。但是,make install没有。[准确地说,我运行了checkinstall(或者说,sudo checkinstall),它调用了make install,因为据我所知,前者是后者的简单升级(至少对我来说是这样),提供了与包管理系统的集成。] 最初,它失败并出现以下错误:

make: execvp: /etc/init.d/fujitsu_touchscreen: Permission denied
make: *** [install] Error 127

经过一番研究,我尝试chmod +x在受影响的文件上使用:

$ sudo chmod +x /etc/init.d/fujitsu_touchscreen

再次运行sudo checkinstall,可以看到权限错误已解决;在再次失败之前,它取得了很大进展。它提供打印到 stdout 的日志显示了一个dpkg错误,如下所示:

dpkg: error processing /home/archelon/fujitsu-touchscreen-driver/cybergene-fujitsu-usb-touchscreen-112fdb75b406/cybergene-fujitsu-usb-touchscreen-112fdb75b406_amd64.deb (--install):
 unable to create `/sys/module/fujitsu/usb/touchscreen/parameters/touch_maxy.dpkg-new' (while processing `/sys/module/fujitsu/usb/touchscreen/parameters/touch_maxy'): No such file or directory

确实,虽然有/sys/module/fujitsu_usb_touchscreen/parameters/touch_maxy,但没有/sys/module/fujitsu/usb/touchscreen/parameters/touch_maxy;显然是某个地方出现了印刷错误。因此我必须找到并修复它。但不幸的是,除了install;makefile 的部分之外,我几乎不知道该去哪里找,而且它不在那里。(我知道有时会有一个install文件?但在这种情况下没有。)...帮忙?

(由于这是一个完全不同的问题,因此我提出了一个单独的问题:`make install` 显然由于拼写错误而失败,但不是在 makefile 中:如何查找和修复?

更新日期 2013-10-18 重新安装 Kubuntu 12.04 后,这次重新创建了 /home 分区(同样,该分区是在安装 13.04 时生成的),我再也无法重现上面的奇怪错误。我仍然很好奇下划线是如何变成斜线的,但似乎没人知道。也许还值得一提的是,虽然我还没有成功运行checkinstall这个包,但我已经运行了make install;它需要可执行性/etc/init.d/fujitsu_touchscreen和安装hal,并且 GUI 在安装完成后不久就冻结了,之后我并没有注意到任何特别的新功能,系统也无法再从挂起状态恢复。后来我失去了兴趣,fujitsu-usb-touchscreen因为似乎魔法旋转软件包可以提供我所寻找的一切。但是,它不能“开箱即用”;我已经提交了一份错误报告它也记录了我发现的不太好的解决方法。

答案1

fujitsu_usb_touchscreen.c 表示它是 v0.3.9,尽管随附的 README 文件报告“Fujitsu usb 触摸屏内核模块和实用程序 v0.3.5”。我不想这么说,但“它对我有用”:

wget https://bitbucket.org/cybergene/fujitsu-usb-touchscreen/get/112fdb75b406.zip
unzip 112fdb75b406.zip
cd cybergene-fujitsu-usb-touchscreen-112fdb75b406
make

有三种可能:

  1. 可能是 zip 文件已损坏?尝试再次下载并重复提取/制作步骤?

  2. 确保您已经安装了当前的 linux-headers 包(这对于包含以下内容是必需的:linux/kernel.h、linux/slab.h、linux/module.h、linux/init.h、linux/usb/input.h)。例如:find /usr/src/ -iname slab.h

  3. 软件包作者确实说过,“如果您在安装软件包时遇到问题,请给我发送电子邮件。” 您尝试过吗?

--beg:编辑

我已经在 VirtualBox 客户机上测试过它。我之前用它运行的那个客户机是前段时间从 kubuntu-13.04-desktop-i386.iso 安装的,可能有一些额外的头文件让它正常运行。

我刚刚从 kubuntu-13.04-desktop-amd64.iso 安装了一个干净的客户端,并能够重现您的错误。不确定那里发生了什么,但如果我在 fujitsu_usb_touchscreen.c 中在包含后立即添加以下几行,那么它就可以编译而不会出错:

#define dbg(args...) printk(args)
#define err(args...) printk(args)

此外,usb_u810_tablet_probe() 函数定义了一个int err容易让人混淆的err()函数/宏。

希望这可以帮助!

相关内容