我之前看过嵌入式主板有一个像心跳一样闪烁的LED,表明主板仍在执行代码。我想在我正在研究的嵌入式Linux主板上做类似的事情。鉴于它是一个相当简单的代码,似乎有人已经为Linux编写了一个守护进程,但是我找不到任何证据。
请注意,OS X Server的心跳和高可用性Linux heartbeat daemon并不是我想要的 - 它们都通过IP网络协调系统可用性,或类似的东西。
假设我正在寻找的东西不存在,我也对如何编写一个可以在最小化资源使用情况下切换引脚的守护进程的建议感兴趣。以什么更新率,cron成为一个愚蠢的想法?
(如果出于某种原因看起来似乎相关,我也不愿听到睡在MacBook Pro上的LED。)
感谢。
答案 0 :(得分:4)
LED心跳是内置的核心功能。假设你的LED有一个设备驱动程序,那么打开心跳是这样的:
$ echo "heartbeat" > /sys/class/leds/MyLed/trigger
查看触发器列表(MMC活动,心跳等)
$ cat /sys/class/leds/MyLed/trigger
请参阅drivers/leds/ledtrig-heartbeat.c
和http://www.avrfreaks.net/wiki/index.php/Documentation:Linux/LEDs
关于心跳的有趣之处在于模式是动态的。基本模式是砰砰砰砰的停顿,就像人的心跳一样。但心跳的率由负载平均值控制!轻负荷以每分钟约50次的速度击败。较重的负载会导致更快的跳动,直到它以大约180 bpm的速度达到最大值。
答案 1 :(得分:0)
我不会使用cron。它不是正确的工具。一个非常简单的解决方案就是运行一个 来自inittab的shell脚本。
示例:
#!/bin/sh
while [ true ];
do
logger "blink!" # to be replaced
sleep 1
done
将其保存到/bin/blink.sh,将以下行添加到inittab并让init重新读取运行init q的选项卡。
bl:2345:respawn:/bin/blink.sh
当然,您必须将blink.sh脚本调整到您的环境。它高度依赖于 特定板如何从用户空间切换LED(设备驱动程序文件,sysfs条目......)。
如果你需要更高效的东西,你可以在C中重做一下,但这可能不值得付出努力。
要考虑的一件事是你想用脉冲LED发出信号。通过上面概述的方法,我们只能显示电路板仍处于活动状态(内核正在运行,执行blink.sh的进程正在调度,blink.sh正在执行它应该执行的操作)。对于某些用例,这可能没什么问题,但更多时候你实际上想要发信号通知嵌入式主板上运行的应用程序仍然正常(不挂起,没有崩溃,......)。要实现此类功能,您需要集成将LED切换到应用程序主循环的代码。