ThinkPad电池管理 for 2.6.27-7-g

笔记本/便携移动设备,手机平板等软硬件
回复
the_Fm
帖子: 13
注册时间: 2008-11-19 18:27

ThinkPad电池管理 for 2.6.27-7-g

#1

帖子 the_Fm » 2008-11-25 10:42

我给T60 装了下电池阀,具体操作如下。
安装前请先阅读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.

在 /etc/modules中添加一行tp_smapi

代码: 全选

sudo gedit /etc/modules
rebuild ramfs

代码: 全选

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
可以将上述代码添加到/etc/rc.local这样每次启动的时候,都会设置电池阀门。
注意:此模块会和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()
晚些时候我会写个gnome的applet用来查看电池信息。
附件
pt2.png
tp_smapi-0.39.tar.gz
(39.06 KiB) 已下载 129 次
上次由 the_Fm 在 2008-12-15 22:38,总共编辑 4 次。
头像
C.MyDogs
帖子: 284
注册时间: 2008-08-01 16:03
来自: 宁波

Re: ThinkPad电池管理 for 2.6.27-7-g

#2

帖子 C.MyDogs » 2008-11-25 17:00

:em11 谢谢楼主!
用T40的路过。
T400S ,SP9400, 64G SSD+500G HDD, 2G+4G ROM,1440*900 LED, GOBI1000 WWAN
the_Fm
帖子: 13
注册时间: 2008-11-19 18:27

Re: ThinkPad电池管理 for 2.6.27-7-g

#3

帖子 the_Fm » 2008-11-25 22:22

脚本运行需要python支持。
上次由 the_Fm 在 2008-12-06 12:46,总共编辑 1 次。
fbi
帖子: 5
注册时间: 2008-10-23 23:39

Re: ThinkPad电池管理 for 2.6.27-7-g

#4

帖子 fbi » 2008-11-28 8:48

关注ing
mzwhben
帖子: 20
注册时间: 2008-10-10 21:19

Re: ThinkPad电池管理 for 2.6.27-7-g

#5

帖子 mzwhben » 2008-12-01 9:08

关注中,LZ使用情况怎样,清问生效么??
楼主在最后以红字提示的没有装的模块,指的是哪个模块,我现在用LINUX都不敢插电源又插电池,感觉没有电池阀会损害电池~~
希望此方法能被牛人研究成功然后公布出来方便广大的TP粉丝~~~~~~~~
等待楼主的回复~~~~~~~~
上次由 mzwhben 在 2014-01-03 11:46,总共编辑 1 次。
the_Fm
帖子: 13
注册时间: 2008-11-19 18:27

Re: ThinkPad电池管理 for 2.6.27-7-g

#6

帖子 the_Fm » 2008-12-06 12:38

最后红字提示模块的是硬盘保护的驱动,需要自己编译内核安装。我没装所以可以无视他。
使用情况如图,嘎嘎,看到么,不充电了。

上面那个脚本,将他保存到自己目录下的bin/ibmbattery,并且用chmod +x ibmbattery设置为可执行。利用他可以看到电池是否充电。
附件
pt2.png
MetaLionel
帖子: 5
注册时间: 2008-11-26 12:46

Re: ThinkPad电池管理 for 2.6.27-7-g

#7

帖子 MetaLionel » 2008-12-08 16:00

学习了。。
:em11
头像
star
帖子: 76
注册时间: 2007-01-16 21:27
来自: 上海
联系:

Re: ThinkPad电池管理 for 2.6.27-7-g

#8

帖子 star » 2008-12-14 21:12

lz的脚本ms有点问题 我没有装电池, 但是它还是说“是”
#!/usr/bin/env python
#_*_ coding:utf-8 _*_
import string
smapiPath="/sys/devices/platform/smapi/BAT0/"
def _transBool(b):
"将BOOL值转换为str"
if b:
return "是"
else:
return "否"
_tranWordsBank={
"idle":"空闲",
"charging":"充电",
"discharging":"放电",
"not_discharging":"未放电",
"not_charging":"未充电"}
def _transWord(s):
"翻译 s"
try:
rst=_tranWordsBank
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;
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:
print item[1],":",rst
else:
print item[1],":",item[2](rst)
def listAllState():
for i in range(len(items)):
listState(i)
listAllState()
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life
fecasmoy123
帖子: 6
注册时间: 2008-12-12 12:09

Re: ThinkPad电池管理 for 2.6.27-7-g

#9

帖子 fecasmoy123 » 2008-12-15 9:35

3q!
少吹牛B多做事,
少生孩子快致富。
the_Fm
帖子: 13
注册时间: 2008-11-19 18:27

Re: ThinkPad电池管理 for 2.6.27-7-g

#10

帖子 the_Fm » 2008-12-15 22:39

确实是有问题,python我也是新手。就是bool 翻译的地方没有正确。
现在修改,没有电池的时候会提示否。
头像
ahwad
帖子: 1112
注册时间: 2009-05-06 0:36

Re: ThinkPad电池管理 for 2.6.27-7-g

#11

帖子 ahwad » 2009-05-14 23:30

头晕,哈哈
zhou1226wei
帖子: 12
注册时间: 2008-10-11 18:32

Re: ThinkPad电池管理 for 2.6.27-7-g

#12

帖子 zhou1226wei » 2010-10-31 1:00

不错。 这个在10.10 下应该还是可以把 , 我准备独立一个 ubuntu 了 谢谢楼主, 到时候试试
回复