当 System 5 init 被 systemd 取代时,BeagleBone Black Linux 引导程序如何变化?

当 System 5 init 被 systemd 取代时,BeagleBone Black Linux 引导程序如何变化?

我们有基于 BBB 的定制 Linux 板,运行 Linux 3.12。

我们当前使用 SysV init 进行引导。据我所知,启动按以下顺序发生:

  1. ROM 代码根据引导引脚配置查找引导设备。
  2. ROM 代码将第一阶段引导加载程序(SPL/X-loader)加载到内部 SRAM 并对其进行控制。
  3. SPL 会像 DDR 一样进行一些初始化,然后将 U-Boot 加载到 RAM。
  4. U-Boot 执行其他外设初始化,即 NAND/eMMC/以太网并加载内核+dtb。
  5. 内核执行初始化,根据 dtb 配置不同的硬件/外设并初始化所有驱动程序。
  6. 内核运行第一个进程,即 init (/sbin/init在我们的例子中,但可以在内核命令行参数中设置)。
  7. 基于inittab(配置文件)的init应用程序运行inittab文件中指定的启动脚本,例如::sysinit:/etc/init.d/rcS
  8. /etc/init.d/rcS将运行文件夹中放置的所有初始化脚本/etc/init.d/

这就是主板通过 SysV init 启动的方式。 (至少这是我的理解,如果有错误的地方请指正。)

现在在某个时刻我们想要评估 systemd 引导是如何发生的。我们必须进行 POC 并查看系统启动和流程维护的任何改进或降级。

我们知道一些基础知识:systemd 在 cgroup 上工作,并且可以并行启动进程,但像 monit 一样处理进程。

然而我们不知道 systemd 的实际启动过程。

当使用 systemd 而不是 System 5 init 时,BeagleBoneBlack Linux 的引导过程是怎样的?它与我上面概述的现有启动过程有何不同?

答案1

它的工作原理完全相同,只是 systemd 的 init 二进制文件不使用 inittab 或 rcS 脚本;相反,它使用不同的逻辑来决定如何启动守护进程。

然而,它的核心部分仍然是相同的。

如果你想要更多,你就必须更具体......

相关内容