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-essential
, checkinstall
, binutils
和linux-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
三种可能性:
-
可能是zip文件已损坏? 尝试再次下载并重复提取/制作步骤?
-
确保安装了当前的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
-
软件包作者说:“如果您在安装软件包时遇到问题,请给我发电子邮件。” 你试过那个吗?
–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()
函数/宏造成了混淆。
希望这可以帮助!