systemd 的哪一部分启动模块加载服务?

systemd 的哪一部分启动模块加载服务?

我试图了解 systemd 服务主要systemd-module-load.service是如何在 Linux 中启动的。我查看了main()例程(在 systemd 中src/core/main.c),但找不到任何对 systemd 单元/服务的直接引用。

答案1

systemd-modules-load.service被指定为 的依赖项sysinit.target。您可以搜索/确认此类依赖关系:

$ systemctl list-dependencies --reverse systemd-modules-load.service
systemd-modules-load.service
● └─sysinit.target
●   ├─abrt-ccpp.service
...

sysinit.target输出不一定很方便,因为它会按字母顺序列出大量依赖于 的单位。至少这表明这sysinit.target是相当重要的:)。我们可以询问 systemd 的哪一部分启动sysinit.target,我认为这个参考文献会回答你的问题 -

当 systemd 启动系统时,它将激活所有依赖的单元default.target(以及递归地激活这些依赖的所有依赖)。通常,default.target只是图形.目标或多用户.目标的别名,具体取决于系统是配置为图形用户界面还是仅配置为文本控制台。为了在引入的单元之间强制执行最小排序,可以使用许多众所周知的目标单元,如上所列systemd.特殊(7)

- 这句话后面是一个图表,它说明了sysinit.target的间接依赖multi-user.target,因此也是 的间接依赖graphical.target

请参阅:man bootuphttps://www.freedesktop.org/software/systemd/man/bootup.html


我查看了 main() 例程(在 systemd 的 src/core/main.c 中),但找不到任何对 systemd 单元/服务的直接引用

内有对特定单位的引用src/core/。它们通过SPECIAL_来自 的定义间接进行src/basic/special.h。这包括:

#define SPECIAL_DEFAULT_TARGET "default.target"

答案2

我不清楚你到底在寻找什么。

该二进制文件/lib/systemd/systemd-modules-load是由systemd-modules-load.service实际加载内核的程序运行的。

相关内容