最早什么时候可以在 Linux 中启动程序?

最早什么时候可以在 Linux 中启动程序?

我知道 init 进程是第一个运行的,所有进程都从它启动,但是是否可以在 init 之前启动任何程序? (可能编写一个在启动序列早期执行的内核驱动程序?)

该程序将测试其自身硬件的各个部分,并将文本文件写入根文件系统以中继其状态。如果可以在启动序列期间启动程序,那么考虑到我正在执行的程序必须在硬件其检查已经在启动早期初始化之后发生,那么执行此操作的最佳方法是什么?

我希望在计算机开启几秒钟后启动此程序,而整个系统需要大约 13 秒才能完全启动。这是必要的,因为该应用程序是针对辐射测试的。在辐射测试期间,光束会向计算机发出重离子、质子、中子等脉冲,这些脉冲间隔几秒钟。我需要在光束重新打开之前启动一个程序,并可能导致计算机崩溃并导致再次重新启动。

答案1

有一些方法可以做到这一点,但是......

不要那样做。

如果您有安全应用程序,请不要完全依赖基于 Linux 的计算机来控制它。你确实应该有某种基于硬件的看门狗来为你管理这个。

请。

答案2

如果我很了解您的情况,您的计算机由于定期发生的辐射束而无法启动,并且您希望在其中两个事件之间启动计算机以进行检查。因此,您的计算机最终启动并不重要,对吗?

你可以这样做:

  • 构建静态程序(即静态链接,不依赖于磁盘上的库)
  • 把它放在你的initrd图像上
  • 在 Linux 启动提示符处(使用菜单grub更改它),添加init=/path/to/your/program

你的程序将开始反而标准的init,所以你的机器不会再启动,但你的程序会运行。

我希望你不需要标准 Linux 安装提供的任何东西(除了/守护进程、远程访问、串行控制台等之外的安装点),因为你当然不会有任何这些,因为你的系统根本没有启动。

请注意,如果您需要机器正常启动您的代码已经运行,您可以exec /sbin/init作为最后一条指令。

相关内容