2

也许这不是一个编程问题,即。有一个非编程的解决方案。我正在开发使用嵌入式 linux 的第一代产品。我正在努力寻找系统启动、关闭和完整性监控的最佳解决方案。目前有一个自制的解决方案,它是一段复杂的 c 代码,它启动其他进程,然后监控它们的健康状况以及其他几个不相关的功能。有没有人对一个简单、健壮的方式来处理嵌入式设备的启动、关闭和完整性监控有什么建议?发行版并不重要,它使用的是busybox,我可以添加我们需要的任何其他内容。我正在寻找提示/智慧之言 - 或 rtfm 和一些指针,或将我指向其他地方。

谢谢。

4

2 回答 2

1

如果您正在寻找过程监视器来替换您的内部版本,我使用PCD - 过程控制守护程序取得了巨大成功。

于 2012-09-14T00:34:13.250 回答
1

我正在努力寻找系统启动的最佳解决方案,

你没有提供任何标准来决定什么是“最好的”。

... 一种简单、稳健的方式来处理嵌入式设备的启动、关闭和完整性监控?

如果“简单”和“最佳”是您的标准,那么您正在寻找的内容已经是 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 站点注册。

于 2012-09-13T22:07:37.703 回答