kru*_*ubo 5 linux ubuntu thinkpad
我全新的 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 )
Run Code Online (Sandbox Code Playgroud)
任何其他想法如何使这项工作?
更新:以下是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
Run Code Online (Sandbox Code Playgroud)
我能够通过编辑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!
Run Code Online (Sandbox Code Playgroud)
使用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,
Run Code Online (Sandbox Code Playgroud)
重建模块:
# 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
Run Code Online (Sandbox Code Playgroud)
最后尝试使用它:
# cd /sys/devices/platform/smapi/BAT0
# echo 60 > stop_charge_thresh
Run Code Online (Sandbox Code Playgroud)
正如 hwong557 所提到的,添加tp_smapi
到/etc/modules
它会在启动时自动加载。
如果您是tp_smapi
模块维护者或其他知识渊博的人,可以“正确”修复此问题:这是“正确”修复吗?是否应该将 Thinkpad X120e 永久添加到此白名单中,或者是否有其他方法可以检查嵌入式控制器是否存在?我希望此更改或问题的其他修复将添加到上游源中。