+ -
当前位置:首页 → 问答吧 → 关机不能断电

关机不能断电

时间:2003-10-21

来源:互联网

我在turbolinux8.0wks下halt能断电,slackware9.1下不能,why?

作者: hj_18   发布时间: 2003-10-21

因为默认的内核里没有开启apm和acpi的选项。重新编译内核,增加这两个选项即可。

作者: windrose   发布时间: 2003-10-21

谢谢

作者: hj_18   发布时间: 2003-10-21

引用:
最初由 windrose 发表
因为默认的内核里没有开启apm和acpi的选项。重新编译内核,增加这两个选项即可。
不用重新编译内核吧,修改/etc/rc.d/rc.modules,片断如下:
#### APM support ###
# APM is a BIOS specification for saving power using several different
# techniques. This is mostly useful for battery powered laptops.
/sbin/modprobe apm

作者: kite   发布时间: 2003-10-21

谢谢

作者: hj_18   发布时间: 2003-10-22

引用:
最初由 kite 发表
不用重新编译内核吧,修改/etc/rc.d/rc.modules,片断如下:
#### APM support ###
# APM is a BIOS specification for saving power using several different
# techniques. This is mostly useful for battery powered laptops.
/sbin/modprobe apm
p

我确定我已经按你说的修改了/etc/rc.d/rc.modules文件里面的这段!!!

但是还是无法自动断电。(顺便提下,我用的时DELL 2650的的本本)

还有其他可行的方法么?

我现在可不想只因为这个而重新编译内核^_^

谢谢

作者: AJoe   发布时间: 2004-11-11

你的内核和你的电脑应该支持apm吧?两个都必须要求。我不知道你的本本是什么时候出的,所以我也不敢判断。

作者: kite   发布时间: 2004-11-11

这个有用吗?
好像没用。呵呵。

作者: osfans   发布时间: 2004-11-11

看内核的配置文件,我的是2.6.7tgz内核
#
# APM (Advanced Power Management) BIOS Support
#
CONFIG_APM=y
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
# CONFIG_APM_CPU_IDLE is not set
# CONFIG_APM_DISPLAY_BLANK is not set
# CONFIG_APM_RTC_IS_GMT is not set
# CONFIG_APM_ALLOW_INTS is not set
# CONFIG_APM_REAL_MODE_POWER_OFF is not set


#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
所以都编入内核了,就不需要加module了

作者: dyte100   发布时间: 2004-11-12

看了apm和acpi都编入,那么系统会默认用acpi,那么你要确认acpid十分启动,首先确认你的本本不是太老可以支持acpi。用ls -l /etc/rc.d/rc.acpid 看看是不是可执行,若不可执行就以root身份加执行权限 chmod +x /etc/rc.d/rc.acpid , 也可以手动启动acpid: sh /etc/rc.d/rc.acpid start

若不行可以在lilo里关掉acpi(如果你用lilo的话),改用apm来管理电源,在/etc/lilo.conf开头部分加入:
append="acpi=off"
然后执行lilo -v , 看看没有错误的话,重启系统看看是否可以自动关闭电源。。。

作者: kite   发布时间: 2004-11-12

用这个命令看看

halt -p

作者: jhuangjiahua   发布时间: 2004-11-12

dell 的本本只能用acpi吧,我是8500

作者: yangtou   发布时间: 2004-11-12

上面时我第一次发贴(在LinuxSir上面),谢谢大家都我这么热心的帮助!

综合kite的说法,以及自个在google上的搜索。我把自己的理解总结如下:

pc机两种电源管理标准:apm和acpi

一、关于apm 和 acpi的一些概念

1)、apm:Advanced Power Management 是一种基于 bios 的电源管理标准,这种电源管理方式主要由bios实现。
2)、acpi:Advaned Configuration and Power Interface,是为了弥补apm的不足而产生的。它主要将电源管理的主要执行者由bios转换成为操作系统。它有以下几种模式:
S0 正常。
S1 CPU停止工作。
S2 CPU关闭。
S3 除了内存外的部件都停止工作。
S4 内存信息写入硬盘,所有部件停止工作。
S5 关闭

3)、apm 和 apm 的比较:
apm 1.0 & 1.1:由bios执行电源管理;
apm 1.2:由操作系统定义电源管理时间,由bios负责执行;
acpi:bios收集硬件信息,定义电源管理方案;由操作系统负责执行;
apm 是一种软件解决方案,因此与操作系统有关,而acpi是工业标准,包括了软件和硬件方面的规范。

二、Linux 下的apm 和 acpi
针对APM和ACPI两种不同的标准,linux内核提供了两个不同的模块来实现电源管理功能,这就是apm和acpi。需要注意,apm和acpi是互相冲突的两个模块,用户在同一时间内只能加载其中之一,如果当他们在加载的时候发现二者之一已经加载,就会自动退出。

用户态Daemo
为了让linux内核中的电源管理功能够更好的被利用,我们还需要用户态daemon程序的配合。针对APM和ACPI,分别有apmd和acpid两个不同软件。他们实现的功能比较类似,都是允许用户预先定义某些策略,然后跟踪电源状态,执行特定的操作。

参考资料来自:
http://www.cfanclub.net/new_cnxy/200406/040603015.htm
http://www-900.ibm.com/developerWork...er/index.shtml


基于上面的理解,我做了下面的实验:(实验环境太坏了,因为公司的电脑基本都是1999年买的,你可以想像下:( CII400啊 )
1、打开 apm 电源管理模块,我是直接在/etc/rc.d/rc.modules里面打开/sbin/modprobe apm选项的。并且保证/etc/rc.d/rc.apmd可执行。重新启动后会看到
Starting APM daemon : /usr/sbin/apmd
这条启动信息,如果太会可以用dmesg来查看,此时用ps ax 可以看到apmd守护进程。
结果:可以关机,我是在字符下用shutdown -h now关机,X windows 没有试过。
(ps : 我发现我本本上也是同样的配置,我今天翻了下说明书,又上网查了下, 是DELL Inspiron 2650 NG2000T ,2002年出的,P4 1.8G ,我估计对acpi的支持可能没有。这个实验在她下面就是无法通过,shutdown -h now 之后会提示:Power off.必须手动关闭电源:(

2、关于kite说的在lilo.conf 里面关闭acpi的说法,我也试过(因为前面已经可以关机了,我就把apm现禁调的说──肯定不可以的啦,apm都关了你拿什么管理电源_0).我实在不知道在打开apm后在做这个实验可以说明什么,因为都是成功的。

3、osfans 说的 chmod +s /sbin/halt 是不行的。

还有一个问题:dyte100说的的那一段是不是/boot/config这个文件???
我在这个文件里面着到下面这段:

CONFIG_PM=y
CONFIG_APM=m
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
# CONFIG_APM_CPU_IDLE is not set
# CONFIG_APM_DISPLAY_BLANK is not set
# CONFIG_APM_RTC_IS_GMT is not set
# CONFIG_APM_ALLOW_INTS is not set
# CONFIG_APM_REAL_MODE_POWER_OFF is not set

#
# ACPI Support
#
# CONFIG_ACPI is not set

这一段是不是说明我的内核没有加入对acpi的支持,而且apm需要手工设置才能启用?

作者: AJoe   发布时间: 2004-11-12

是的,我查看的是/boot/config文件。内核装的是slackware编好的2.6.7包
# ll config
lrwxrwxrwx 1 root root 20 2004-10-25 00:58 config -> config-generic-2.6.7

# dmesg |grep apm
apm: BIOS version 1.2 Flags 0x07 (Driver version 1.16ac)
apm: overridden by ACPI.
# dmesg |grep acpi
#

作者: dyte100   发布时间: 2004-11-12

引用:
最初由 AJoe 发表
[
还有一个问题:dyte100说的的那一段是不是/boot/config这个文件???
我在这个文件里面着到下面这段:

CONFIG_PM=y
CONFIG_APM=m
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
# CONFIG_APM_CPU_IDLE is not set
# CONFIG_APM_DISPLAY_BLANK is not set
# CONFIG_APM_RTC_IS_GMT is not set
# CONFIG_APM_ALLOW_INTS is not set
# CONFIG_APM_REAL_MODE_POWER_OFF is not set

#
# ACPI Support
#
# CONFIG_ACPI is not set

这一段是不是说明我的内核没有加入对acpi的支持,而且apm需要手工设置才能启用? [/b]
你的内核没有编入acpi支持!所以肯定没有acpi可用。我想2002年的机器应该可以支持acpi吧?

作者: kite   发布时间: 2004-11-13