我正在努力寻找系统启动的最佳解决方案,
你没有提供任何标准来决定什么是“最好的”。
... 一种简单、稳健的方式来处理嵌入式设备的启动、关闭和完整性监控?
如果“简单”和“最佳”是您的标准,那么您正在寻找的内容已经是 Linux 操作系统不可或缺的一部分。它使用运行级别的概念。在启动时,会建立一个运行级别,并且可以启动一组进程。对另一个运行级别的任何更改都会停止一组进程并启动一组进程。在另一个运行级别关闭时,所有进程都将终止。
我不知道您所说的“完整性监控”是什么意思。如果一个系统进程终止,那么它可以被“重生”,如果它是这样指定的。proc伪文件系统可用于监视活动进程。您可能会设计和实施自己的完整性监控概念。
BusyBox 简化了标准(又名 SysV)初始化进程,大概是基于嵌入式进程在启动后运行一次或始终运行的假设。cron或自定义守护程序必须提供事件的进程启动。但你认为:
它没有运行级别的概念。
所以我们不能使用与全功能操作系统相同的启动机制。
不完全的。BusyBox 声明:
BusyBox init 不支持多个运行级别。BusyBox init 完全忽略了 /etc/inittab 文件的运行级别字段。
注意“多”这个词。BusyBox 的init将对等价于启动、关闭和重新启动的运行级别执行进程控制。有趣的是,BusyBox 甚至还有一个runlevel
命令!如果您想要比 BusyBox 提供的更多“运行级别”,那么
如果您想要运行级别,请使用 sysvinit。
SysV init源代码可从此处获得。BusyBox 是完全可配置的,它的init版本可以轻松替换。
Axis Communications 在 GPL 下为他们的 Etrax SoC 发布了一个迷你版的 SysV init 。轴/etc/inittab
是:`
# The runlevels used by axis are:
# 0 - Halt
# 1 - Single user mode
# 2 - Multiuser without network
# 3 - Full multiuser mode
# 4 - Upgrade
# 5 - unused
# 6 - Reboot
id:3:initdefault:
sh:1235:respawn:/bin/cttyhack /bin/sh
tnet:35:once:/usr/sbin/telnetd
# System initialization.
si::sysinit:/etc/init.d/rc sysinit
# The initscripts.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Add your own stuff below
当前源位于 中devboard-R2_20-distfiles.tar.gz
,其中包括 1.3.6 版init.c
和 initscript 包,需要在Axis 站点注册。