![systemd 的哪一部分启动模块加载服务?](https://linux22.com/image/136059/systemd%20%E7%9A%84%E5%93%AA%E4%B8%80%E9%83%A8%E5%88%86%E5%90%AF%E5%8A%A8%E6%A8%A1%E5%9D%97%E5%8A%A0%E8%BD%BD%E6%9C%8D%E5%8A%A1%EF%BC%9F.png)
我试图了解 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 bootup
或https://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
实际加载内核的程序运行的。