[SOLVED]using dkms to install driver with errors
起因
由于笔记本(ThinkPad X1C 2014)在Linux下的待机时间远不如Windows,经过简单的搜索,发现了TLP这款能耗管理神器,调教起来还比较简单,基本只要用自带的能源方案就已经够了,其他的就不多说了,因为美帝良心想的本子都有一个电源管理设置叫充放电阈值(这个还是刚查的)有利于笔记本电源的保养,在我的历代笔记本里都是电池先DIE,所以对此比较在意,就查了一下,TLP是支持[仅ThinkPad]的该项设置,在/etc/default/tlp中,需要acpi-call这个模块,对,这就是本文的主角。
按照TLP官网教程安装过程很顺利
问题
提示是这样的,大概意思就是说引用函数没有找到
DKMS make.log for acpi_call-1.2.0 for kernel 4.12.1-chrysalis (x8664)
Thu Jul 13 19:31:39 CEST 2017
make -C /lib/modules/4.12.1-chrysalis/build M=/var/lib/dkms/acpi_call/1.2.0/build modules
make[1]: Entering directory ‘/tmp/linux-4.12.1’
CC [M] /var/lib/dkms/acpi_call/1.2.0/build/acpi_call.o
/var/lib/dkms/acpi_call/1.2.0/build/acpi_call.c: In function ‘acpi_proc_write’:
/var/lib/dkms/acpi_call/1.2.0/build/acpi_call.c:307:9: error: implicit declaration of function ‘copy_from_user’ [-Werror=implicit-function-declaration]
if (copy_from_user( input, buff, len )) {
^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:309: /var/lib/dkms/acpi_call/1.2.0/build/acpi_call.o] Error 1
make[1]: *** [Makefile:1512: _module/var/lib/dkms/acpi_call/1.2.0/build] Error 2
make[1]: Leaving directory ‘/tmp/linux-4.12.1’
make: *** [Makefile:7: default] Error 2
然后在网上找了很久,对应的方法都没有解决:
- 加上-Werror=implicit-function-declaration编译选项
- 用define更改定义(这个不完全符合,所以没有办法尝试)
- 可能没有引包(最开始我觉得这官方源不应该出这种错误啊,虽然也不是这个错误,但这是最接近的一个)
后来注意到有两个版本:copy_from_user
这个函数在<asm/uaccess.h>
另一说是在<linux/uaccess.h>
,用locate
命令查到源码位置后,发现是引用的是<asm/uaccess.h>
,之前挖坑的时候遇到过不在标准位置这个问题,就想着这个是不是在linux/下面,于是把asm改成了linux,先手动运行了一下make
,跑通了,然后