如何在Thinkpad X120e上加载tp_smapi

如何在Thinkpad X120e上加载tp_smapi

我的全新 Thinkpad X120e 在 Ubuntu Natty 上运行良好。现在我想得到tp_smapi模块工作,以便我可以控制电池充电行为。不幸的是我得到“没有 Thinkpad 嵌入式控制器”(如下)。

thinkwiki tp_smapi 页面在这种情况下说“你应该升级你的BIOS。一些早期的 BIOS(例如 X31 上的 1.x)不处理嵌入式控制器”。但就我而言,dmidecode 表明我已经在使用几乎最新的来自 IBM 的 BIOS

# apt-get install tp-smapi-dkms
...(works)...
# modprobe -v tp_smapi
WARNING: Error inserting thinkpad_ec (/lib/modules/2.6.38-7-generic/updates/dkms/thinkpad_ec.ko): No such device
FATAL: Error inserting tp_smapi (/lib/modules/2.6.38-7-generic/updates/dkms/tp_smapi.ko): No such device
# tail -1 /var/log/syslog
Apr 19 23:45:05 xilotl kernel: [ 5552.149408] thinkpad_ec: no ThinkPad embedded controller!
# dmidecode -s bios-version
8FET26WW (1.10 )

还有其他想法如何使这项工作有效吗?

dmidecode更新:以下是(即)的其他相关部分dmidecode -t0 -t1 -t11

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
    Vendor: LENOVO
    Version: 8FET26WW (1.10 )
    Release Date: 03/09/2011
    ...

Handle 0x0001, DMI type 1, 27 bytes
System Information
    Manufacturer: LENOVO
    Product Name: 0596CTO
    Version: ThinkPad X120e
    ...

Handle 0x0027, DMI type 11, 5 bytes
OEM Strings
    String 1: OEM default string

答案1

我能够通过编辑 的源代码来完成这项工作thinkpad_ec.c

该代码预计当您运行时dmidecode -t 11输出应提及“IBM ThinkPad Embedded Controller”。然而,新的Thinkpad X120e有一个很好的嵌入式控制器,下面没有提到dmidecode -t 11。结果,代码失败并出现错误“thinkpad_ec:没有 ThinkPad 嵌入式控制器!”。

为了避开这项检查,我将 ThinkPad X120e 添加到了当前列入白名单的 ThinkPad 型号列表中thinkpad_ec.c,然后重建了该模块。它加载成功,我能够按照广告在 /sys/devices/platform/smapi/BAT0 中设置电池的停止充电阈值。


如果您是Thinkpad X120e用户并且现在想使用tp_smapi模块,这是我克服模块加载失败的方法:

$ sudo su
# apt-get install tp-smapi-dkms
...(works)...
# modprobe -v tp_smapi
WARNING: Error inserting thinkpad_ec (/lib/modules/2.6.38-7-generic/updates/dkms/thinkpad_ec.ko): No such device
FATAL: Error inserting tp_smapi (/lib/modules/2.6.38-7-generic/updates/dkms/tp_smapi.ko): No such device
# tail -1 /var/log/syslog
Apr 19 23:45:05 xilotl kernel: [ 5552.149408] thinkpad_ec: no ThinkPad embedded controller!

编辑关键文件,vi /usr/src/tp-smapi-0.40/thinkpad_ec.c添加标有 + 的行:

diff --git a/thinkpad_ec.c b/thinkpad_ec.c
index a924d18..90d117e 100644
--- a/thinkpad_ec.c
+++ b/thinkpad_ec.c
@@ -460,6 +460,7 @@ static int __init check_dmi_for_ec(void)
                TP_DMI_MATCH("IBM", "ThinkPad A30"),
                TP_DMI_MATCH("IBM", "ThinkPad T23"),
                TP_DMI_MATCH("IBM", "ThinkPad X24"),
+               TP_DMI_MATCH("LENOVO", "ThinkPad X120e"),
                { .ident = NULL }
        };
        return dmi_find_substring(DMI_DEV_TYPE_OEM_STRING,

重建模块:

# dkms remove -m tp-smapi -v 0.40 --all
# dkms add -m tp-smapi -v 0.40
# dkms build -m tp-smapi -v 0.40
# dkms install -m tp-smapi -v 0.40
# modprobe tp-smapi

最后尝试使用它:

# cd /sys/devices/platform/smapi/BAT0
# echo 60 > stop_charge_thresh

正如 hwong557 提到的,添加tp_smapi/etc/modules以便它将在启动时自动加载。


如果您是tp_smapi模块维护者或其他能够获得此修复“正确”的知识渊博的人:这是“正确”的修复吗? Thinkpad X120e 是否应该永久添加到此白名单中,或者是否有其他方法可以检查嵌入式控制器是否存在?我希望此更改或问题的其他修复将添加到上游源中。

答案2

修复了架构Linux

下载tp_smapiAUR 的模块。

构建并安装:makepkg -i

尝试加载模块:

$ sudo  modprobe -v tp_smapi   
insmod /lib/modules/2.6.38-ARCH/extra/thinkpad_ec.ko.gz 
WARNING: Error inserting thinkpad_ec (/lib/modules/2.6.38-ARCH/extra/thinkpad_ec.ko.gz): No such device
FATAL: Error inserting tp_smapi (/lib/modules/2.6.38-ARCH/extra/tp_smapi.ko.gz): No such device

检查系统日志:

$ dmesg | tail -1           
[ 1009.371778] thinkpad_ec: no ThinkPad embedded controller!

按照 krubo 的答案进行编辑src/tp_smapi-0.40/thinkpad_ec.c,向包中添加补丁:

--- thinkpad_ec.c.orig  2011-05-15 13:35:28.556634244 -0700
+++ thinkpad_ec.c       2011-05-15 13:35:40.466634616 -0700
@@ -460,6 +460,7 @@
                TP_DMI_MATCH("IBM", "ThinkPad A30"),
                TP_DMI_MATCH("IBM", "ThinkPad T23"),
                TP_DMI_MATCH("IBM", "ThinkPad X24"),
+               TP_DMI_MATCH("LENOVO", "ThinkPad X120e"),
                { .ident = NULL }
        };
        return dmi_find_substring(DMI_DEV_TYPE_OEM_STRING,

编辑 PKGBUILD 以包含新补丁:

patch -Np1 < "$srcdir/thinkpad-x120e.patch"     

makepkg -i删除任何以前构建的软件包,然后使用此补丁重建并安装该软件包 ( )

加载模块,你就可以开始工作了:

$ sudo modprobe  tp_smapi
$ dmesg | tail -1
[ 1735.966431] tp_smapi successfully loaded (smapi_port=0xb0).
$ ls /sys/devices/platform/smapi 
ac_connected  BAT0  BAT1  driver  modalias  power 
smapi_request  subsystem  uevent

答案3

我试过了克鲁博的解决方案适用于我的 Thinkpad T420。然而,在最后一步install,我必须添加 a--force才能使 modprobe 成功;否则它给了我与最初相同的错误。

然而,当我尝试修改电池设置时,命令echo成功/sys/devices/platform/smapi/BAT0/stop_charge_thresh,但读取后,cat仍然给出 100。

另外,重新启动后,该模块不再加载,我需要再次手动 modprobe。通过添加tp_smapi到 来修复此问题/etc/modules

不过,我很高兴地报告 hdaps 正在工作;我必须将/etc/defaults/hdaps,中的最后一个设置更改FORCEENABLEyes。我使用此链接检查了它:验证 hdapsd 是否正常工作 (Thinkpad Wiki)

相关内容