这个问题是出于好奇,也是因为我自己无法找到明确的答案。
我读过了这个答案解释了内核如何关闭系统。总的来说,我觉得很清楚。查看reboot.c
LXR 中的代码,kernel_power_off
函数在reboot.c中激起了我的好奇心。不幸的是,LXR 在定位时似乎遇到了困难机器相关代码为了machine_power_off
,我不清楚这个函数的作用是什么,或者它是如何做到的。
问题: 是函数定义通常machine_power_off
基于特定类别的机器(或制造商)特有的某些二进制 blob(也许是专有固件?),或者通常是用汇编程序甚至 C 语言编写的?
现在从 2014 年 4 月快进到 2021 年 7 月——现在。 2014 年 4 月的答案对我来说很有意义,但自从准备好这个答案以来,发生了很多变化:对内核进行了多次修订,并systemd
已成为许多/大多数 Linux 发行版的默认部分。
据我了解,halt
/shutdown
现在由systemd
登录经理(?!):systemd-logind.service
。查看man logind.conf
并man systemd-logind.service
揭示HandlePowerKey=
、 HandleLidSwitchExternalPower=
选项和相关poweroff
操作 - 这些选项名称表明与 相似reboot.c
,但情况明显不同。进一步关注上游的实施建议systemd-logind 的 D-Bus 接口现在在系统关闭中发挥着重要作用。此时此刻,我正在努力“将点连接”之间。reboot.c
systemd-logind.service
同时,我的发行版似乎保留了reboot.c
代码。假设代码得到维护只是因为它仍然在我的systemd
操作系统上使用,这引出了我的另一个问题:
问题:systemd
用于关闭系统电源的基于选项最终是否以执行结束reboot.c
?如果不是的话, 的作用是什么reboot.c
?