也许这不是一个编程问题,例如。有一种非编程的解决方案。我正在开发使用嵌入式linux的第一代产品。我正在努力寻找系统启动、关闭和完整性监控的最佳解决方案。目前有一种自制的解决方案,它是一段复杂的c代码,它启动其他进程,然后监视它们的运行状况以及其他几个不相关的功能。有没有人有建议,用一种简单、健壮的方法来管理嵌入式设备的启动、关闭和完整性监控?发行版并不重要,它使用的是busybox,我可以添加任何我们需要的东西。我正在寻找智慧的提示/单词-或者rtfm和一些指针,或者给我指到其他地方。
谢谢。
发布于 2012-09-14 06:07:38
我正在努力寻找系统启动的最佳解决方案,
你没有提供任何标准来决定什么是“最好的”。
...一种简单、健壮的方法来管理嵌入式设备的启动、关闭和完整性监控?
如果“简单”和“最佳”是您的标准,那么您正在寻找的东西已经是Linux操作系统不可或缺的了。它使用运行级别的概念。在启动时,将建立一个运行级别,并且可以启动一组进程。对另一个运行级别的任何更改都将停止一组进程并启动一组进程。在关机时,这是另一个运行级别,所有进程都将终止。
我不知道你说的“诚信监控”是什么意思。如果一个系统进程终止,那么它可以被“重新生成”,如果它被指定的话。proc伪文件系统可用于监视活动进程。您可能已经设计并实现了您自己的完整性监控概念。
BusyBox简化了标准(又称SysV)初始化进程,假设嵌入式进程在启动后运行一次或始终运行。cron或自定义守护进程都必须在发生事件时提供进程启动。但你认为:
它没有运行级别的概念。
因此,我们无法使用与全功能操作系统相同的启动机制。
不完全是。BusyBox声明:
BusyBox init不支持多个运行级别。BusyBox初始化完全忽略了/etc/inittab文件的运行级别字段。
注意“多个”这个词。BusyBox的init将执行相当于启动、关闭和重启的运行级别的进程控制。有趣的是,BusyBox甚至有一个runlevel命令!如果您想要比BusyBox提供的更多的“运行级别”,那么
如果你想要运行级别,使用sysvinit。
here提供了SysV初始化源代码。BusyBox是完全可配置的,并且它的init版本可以很容易地被替换。
Axis Communications在GPL下为他们的SysV SoC发布了Etrax 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 site上注册。
发布于 2012-09-14 08:34:13
如果你正在寻找一个进程监控器来取代你的内部版本,我已经成功地使用了PCD - Process Control Daemon。
https://stackoverflow.com/questions/12399556
复制相似问题