当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-11-25 10:42 

注册: 2008-11-19 18:27
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
我给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
pt2.png [ 143.01 KiB | 被浏览 3421 次 ]

tp_smapi-0.39.tar.gz [39.06 KiB]
被下载 111 次


最后由 the_Fm 编辑于 2008-12-15 22:38,总共编辑了 4 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-11-25 17:00 
头像

注册: 2008-08-01 16:03
帖子: 284
地址: 宁波
送出感谢: 0 次
接收感谢: 0 次
:em11 谢谢楼主!
用T40的路过。


_________________
T400S ,SP9400, 64G SSD+500G HDD, 2G+4G ROM,1440*900 LED, GOBI1000 WWAN


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-11-25 22:22 

注册: 2008-11-19 18:27
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
脚本运行需要python支持。


最后由 the_Fm 编辑于 2008-12-06 12:46,总共编辑了 1 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-11-28 8:48 

注册: 2008-10-23 23:39
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
关注ing


页首
 用户资料  
 
5 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-01 9:08 

注册: 2008-10-10 21:19
帖子: 20
送出感谢: 0 次
接收感谢: 0 次
关注中,LZ使用情况怎样,清问生效么??
楼主在最后以红字提示的没有装的模块,指的是哪个模块,我现在用LINUX都不敢插电源又插电池,感觉没有电池阀会损害电池~~
希望此方法能被牛人研究成功然后公布出来方便广大的TP粉丝~~~~~~~~
等待楼主的回复~~~~~~~~


最后由 mzwhben 编辑于 2014-01-03 11:46,总共编辑了 1 次

页首
 用户资料  
 
6 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-06 12:38 

注册: 2008-11-19 18:27
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
最后红字提示模块的是硬盘保护的驱动,需要自己编译内核安装。我没装所以可以无视他。
使用情况如图,嘎嘎,看到么,不充电了。

上面那个脚本,将他保存到自己目录下的bin/ibmbattery,并且用chmod +x ibmbattery设置为可执行。利用他可以看到电池是否充电。


附件:
pt2.png
pt2.png [ 143.01 KiB | 被浏览 3378 次 ]

页首
 用户资料  
 
7 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-08 16:00 

注册: 2008-11-26 12:46
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
学习了。。
:em11


页首
 用户资料  
 
8 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-14 21:12 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
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[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:
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


页首
 用户资料  
 
9 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-15 9:35 

注册: 2008-12-12 12:09
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
3q!


_________________
少吹牛B多做事,
少生孩子快致富。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2008-12-15 22:39 

注册: 2008-11-19 18:27
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
确实是有问题,python我也是新手。就是bool 翻译的地方没有正确。
现在修改,没有电池的时候会提示否。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2009-05-14 23:30 
头像

注册: 2009-05-06 0:36
帖子: 990
送出感谢: 1
接收感谢: 11
头晕,哈哈


页首
 用户资料  
 
12 楼 
 文章标题 : Re: ThinkPad电池管理 for 2.6.27-7-g
帖子发表于 : 2010-10-31 1:00 

注册: 2008-10-11 18:32
帖子: 12
送出感谢: 0 次
接收感谢: 0 次
不错。 这个在10.10 下应该还是可以把 , 我准备独立一个 ubuntu 了 谢谢楼主, 到时候试试


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译