安装前请先阅读http://www.thinkwiki.org/wiki/Tp_smapi
下面我介绍下我的安装过程。
安装的时候,首先需要创建source的链接(当然了,内核版本不同目录需要相应的变化下,可以用uname -r来查看)
代码: 全选
cd /lib/modules/2.6.27-7-generic/
ln -s /usr/src/linux-headers-2.6.27-7-generic/ ./source
代码: 全选
make
sudo make load
sudo make install
输入
代码: 全选
dmesg |grep thinkpad
代码: 全选
[ 19.144704] thinkpad_acpi: ThinkPad ACPI Extras v0.21
[ 19.144710] thinkpad_acpi: http://ibm-acpi.sf.net/
[ 19.144715] thinkpad_acpi: ThinkPad BIOS xxxxxxx
[ 19.144721] thinkpad_acpi: Lenovo ThinkPad T60, model 2007BP1
[ 19.145822] thinkpad_acpi: radio switch found; radios are enabled
[ 19.146068] thinkpad_acpi: This ThinkPad has standard ACPI backlight brightness control, supported by the ACPI video driver
[ 19.146076] thinkpad_acpi: Disabling thinkpad-acpi brightness events by default...
[ 19.159504] Registered led device: tpacpi::thinklight
[ 19.164686] thinkpad_acpi: Lenovo BIOS switched to ACPI backlight control mode
[ 19.164694] thinkpad_acpi: standard ACPI backlight interface available, not loading native one...
[ 21.310033] thinkpad_ec: thinkpad_ec 0.37 loaded.
代码: 全选
sudo gedit /etc/modules
代码: 全选
sudo update-initramfs -u
代码: 全选
modprobe -a tp_smapi
例如从40开始,70结束。
代码: 全选
echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
echo 70 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh
cat /sys/devices/platform/smapi/BAT0/*_charge_thresh
注意:此模块会和HDAPS模块冲突。http://www.thinkwiki.org/wiki/HDAPS而其内建的HDAPS不支持hdapsd,所以我没装。望达人指导。
用于查看电池信息的脚本
代码: 全选
#!/usr/bin/env python
#_*_ coding:utf-8 _*_
import string
smapiPath="/sys/devices/platform/smapi/BAT0/"
def _transBool(b):
"将BOOL值转换为str"
if b=="1":
return "是"
else:
return "否"
_tranWordsBank={
"idle":"空闲",
"charging":"充电",
"discharging":"放电",
"not_discharging":"未放电",
"not_charging":"未充电",
"none":"无"}
def _transWord(s):
"翻译 s"
try:
rst=_tranWordsBank[s]
except KeyError,e:
rst=s
return rst
def _transDiv(i):
"除以1000"
v=int(i);
if v<0:
v=-v
return "%.2f"%(v/1000)
def _transDivOrWord(i):
"除以或者翻译"
try:
rst=_transDiv(i)
except ValueError:
rst=_transWord(i)
return rst
items=[
("installed","电池是否安装",_transBool),
("state","电池状态",_transWord),
("cycle_count","充电次数",None),
("current_now","当前电流",_transDiv),
("current_avg","平均电流(1分钟)",_transDiv),
("power_now","瞬时功率",_transDiv),
("power_avg","平均功率(1分钟)",_transDiv),
("last_full_capacity","实际容量",_transDiv),
("remaining_percent","剩余电量百分比",None),
("remaining_running_time","可用时间",_transDivOrWord),
("remaining_charging_time","剩余充电时间",_transDivOrWord),
("remaining_capacity","剩余容量",_transDiv),
("design_capacity","设计容量",_transDiv),
("voltage","实际电压",_transDiv),
("design_voltage","设计电压",_transDiv),
("manufacturer","制造商",None),
("model","model",None),
("barcoding","barcoding",None),
("chemistry","介质",None),
("serial","序列号",None),
("manufacture_date","生产日期",None),
("first_use_date","首次启用",None),
("temperature","温度",_transDiv),
("start_charge_thresh","起始充电阀",None),
("stop_charge_thresh","停止充电阀",None)]
def listState(i):
rst=""
item=items[i];
stateName=item[0];
try:
f=open(smapiPath+stateName,'r')
rst=f.readline();
rst=rst.replace('\n', '');
except IOError,e:
print "IOError:",e
finally:
f.close()
if item[2] != None:
rst=item[2](rst)
print item[1],":",rst
return rst;
def listAllState():
if listState(0)!="否":
for i in range(1,len(items)):
listState(i)
listAllState()