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

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

第一个aptitude ,然后我做了aptitude update && safe-upgrade ,然后xinput-calibrator (这似乎工作,除了每次我重新启动系统时我必须再次运行它),然后gccmakebuild-essentialcheckinstallbinutilslinux-source

然后我下载了文件cybergene-fujitsu-usb-touchscreen-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的东芝Satellite R10; 这台机器还有一个带手写笔的(完全可操作的)平板电脑。 (东芝的平板电脑是带有有源数字转换器的Wacom,而不是富士通的USB电阻式触摸屏)。 所以,可能我只是错过了一些包裹或其他 – 我多年没有编译任何东西,从来没有特别擅长它。 也许你可以把我解雇。

更新:我用12.04 LTS替换了13.04,保留了我的/ 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;之外,我几乎不知道去哪里看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在安装完成后不久就会冻结,之后我没有注意到任何特殊的新function,系统再也无法恢复暂停。 我后来对fujitsu-usb-touchscreen失去了兴趣,因为看起来Magick Rotation包可以提供我想要的一切。 然而,它并不是“开箱即用”的工作; 我已经提交了一份错误报告 ,该报告还记录了我发现的不优雅的解决方法。

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软件包(这对于inlude来说是必需的: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()函数/宏造成了混淆。

希望这可以帮助!