重启时系统关闭的实现与 systemd-logind 的比较

重启时系统关闭的实现与 systemd-logind 的比较

这个问题是出于好奇,也是因为我自己无法找到明确的答案。

我读过了这个答案解释了内核如何关闭系统。总的来说,我觉得很清楚。查看reboot.cLXR 中的代码,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.confman systemd-logind.service揭示HandlePowerKey=HandleLidSwitchExternalPower=选项和相关poweroff操作 - 这些选项名称表明与 相似reboot.c,但情况明显不同。进一步关注上游的实施建议systemd-logind 的 D-Bus 接口现在在系统关闭中发挥着重要作用。此时此刻,我正在努力“将点连接”之间。reboot.csystemd-logind.service

同时,我的发行版似乎保留了reboot.c代码。假设代码得到维护只是因为它仍然在我的systemd操作系统上使用,这引出了我的另一个问题:

问题:systemd用于关闭系统电源的基于选项最终是否以执行结束reboot.c?如果不是的话, 的作用是什么reboot.c

相关内容