首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当运行halt时,如何使linux关闭?

当运行halt时,如何使linux关闭?
EN

Stack Overflow用户
提问于 2017-01-11 17:05:50
回答 2查看 2.3K关注 1票数 5

我已经成功地使用了pm_power_off函数指针,使我的自定义Linux板通过i2c调用其电源管理芯片(关闭电源)。

我希望Linux halt命令也关闭电源。

我怎样才能做到这一点?

machine_halt的(ARM)代码没有类似于machine_power_offpm_power_off的指针。

arch/arm/内核/reboot.c:

代码语言:javascript
复制
/*
 * Halting simply requires that the secondary CPUs stop performing any
 * activity (executing tasks, handling interrupts). smp_send_stop()
 * achieves this.
 */
void machine_halt(void)
{
    local_irq_disable();
    smp_send_stop();

    local_irq_disable();
    while (1);
}

/*
 * Power-off simply requires that the secondary CPUs stop performing any
 * activity (executing tasks, handling interrupts). smp_send_stop()
 * achieves this. When the system power is turned off, it will take all CPUs
 * with it.
 */
void machine_power_off(void)
{
    local_irq_disable();
    smp_send_stop();

    if (pm_power_off)
        pm_power_off();
}

显然,我可以直接黑掉machine_halt,但如果可能的话,我想“正确”地做这件事。

我是否遗漏了一些可能导致halt命令执行"power“的东西(可能在用户空间中)?

更新:谢谢你的回答和你的评论,他们帮助我意识到实际问题是什么。

我的问题是:

我有一个输入边,可自定义电源管理单元。把它看作是一个开始按钮,没有停止或重置功能。我完全控制PMU代码(它是作为i2c从站运行的ATMEGA )。

  1. 如果Linux内核正在运行,我希望忽略边缘。
  2. 如果CPU是关闭的,我想要边缘电源-在CPU上。
  3. 如果Linux内核被暂停,我希望edge重置CPU。

例1很容易,没什么可做的。

案例2很简单,在我的驱动程序中定义pm_power_off以向PMU发送i2c消息。幸运的是,当调用i2c时,pm_power_off子系统仍然处于工作状态。

案例3是问题所在--我正在寻找一个要定义的pm_halt,向PMU发送一个i2c消息。

也许还有另外一种方式,就像我的评论一样?

内核中是否有一个位置可以在几赫兹范围内用i2c消息来激励PMU,除非机器是halt编辑的?

答案是:https://unix.stackexchange.com/a/42576/17288读到:

"*这些天来,如果启用了ACPI,暂停就会自动关闭。事实上,它们现在在功能上是等价的。“

也许有某种方式提供或连接到ACPI -我将不得不阅读它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 19:00:50

您应该使用poweroff命令或halt -p。根据男子8停halt命令(没有参数)不能保证关闭计算机。说明了这里的原因

halt是在ACPI之前使用的(今天将为您关闭电源)*。它将停止系统,然后打印一条信息,其结果是“现在关闭电源是可以的”。当时有物理开关,而不是现代计算机的组合式ACPI控制电源按钮。 *这些天来,halt已经足够聪明,如果启用了ACPI,就可以自动调用poweroff。事实上,它们现在在功能上是等价的。

正如您从halt工具源代码中看到的,它使用cmd = RB_POWER_OFF = LINUX_REBOOT_CMD_POWER_OFF发出重新启动()系统调用。

在内核中,系统调用是实现这里的,在cmd = LINUX_REBOOT_CMD_POWER_OFF上,它调用:

亚基-> 取消()

亚基-> 取消()

亚基-> pm_power_off()

票数 2
EN

Stack Overflow用户

发布于 2018-11-14 11:58:25

在Debian/Ubuntu系统上(我不知道在其他Linux系统中是否可以这样做),如果您想让OSes命令启动,您可以创建这个文件:

代码语言:javascript
复制
/etc/default/halt

编写该文件的以下内容:

代码语言:javascript
复制
# Default behaviour of shutdown -h / halt. Set to "halt" or "poweroff".
HALT=poweroff

正如评论所述,您现在可以设置set应该如何工作。如果您将其设置为“停止”,则只会关闭计算机而不关机。如果您设置了断电,它的工作方式就像关闭所有的计算机之后关闭计算机的电源关闭命令一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41596661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档