4

ボードがまだコードを実行していることを示すためにハートビートのように点滅するLEDを備えた組み込みボードを見たことがあります。作業中の組み込みLinuxボードで同様のことをしたいと思います。かなり些細なコードであることを考えると、誰かがこれを行うLinux用のデーモンをすでに作成しているように思われますが、証拠を見つけることができませんでした。

OSXServerのハートビートと高可用性Linuxハートビートデーモンは私が探しているものではないことに注意してください。どちらもIPネットワークなどでシステムの可用性を調整します。

私が探しているものが存在しないと仮定して、リソースの使用を最小限に抑えながらピンを切り替えるデーモンを作成する方法についてのアドバイスにも興味があります。cronはどの更新レートで愚かなアイデアになりますか?

(それが何らかの理由で関連していると思われる場合は、眠っているMacBook ProのLEDについての噴出も聞きたくない。)

ありがとう。

4

2 に答える 2

5

LEDハートビートは組み込みのカーネル関数です。LED用のデバイスドライバーがあるとすると、ハートビートをオンにするには次のようにします。

$ echo "heartbeat" > /sys/class/leds/MyLed/trigger

トリガー(MMCアクティビティ、ハートビートなど)のリストを表示するには

$ cat /sys/class/leds/MyLed/trigger

http://www.avrfreaks.net/wiki/index.php/Documentation:Linux/LEDsを参照drivers/leds/ledtrig-heartbeat.cしてください。

ハートビートの興味深い点は、パターンが動的であるということです。基本的なパターンは、人間の心拍のように、thump-thump-pauseです。しかし、心拍数は負荷平均によって制御されます!軽い負荷は毎分約50ビートでビートします。負荷が重いと、約180bpmで最大になるまでビートが速くなります。

于 2010-12-10T23:23:31.500 に答える
0

cronは使用しません。それはちょうど適切なツールではありません。非常に簡単な解決策は、inittabからシェルスクリプトを実行することです。

例:

#!/bin/sh

while [ true ];
do
    logger "blink!" # to be replaced
    sleep 1
done

これを/bin/blink.shに保存し、次の行をinittabに追加して、initqを実行しているタブをinitに再読み取りさせます。

bl:2345:respawn:/bin/blink.sh

もちろん、blink.shスクリプトを環境に合わせて調整する必要があります。LEDをユーザースペースからどのように切り替えることができるかは、特定のボードに大きく依存していました(デバイスドライバーファイル、sysfsエントリなど)。

より効率的なものが必要な場合は、Cでwhileをやり直すこともできますが、努力する価値はないかもしれません。

考えるべきことの1つは、パルスLEDで信号を送りたいことです。上で概説したアプローチでは、ボードがまだ生きていることを示すことしかできません(カーネルが実行され、blink.shを実行するプロセスがスケジュールされ、blink.shが想定どおりに実行されます)。一部のユースケースではこれで問題ない場合がありますが、多くの場合、組み込みボードで実行されているアプリケーションがまだ問題ないことを通知する必要があります(ハングしない、クラッシュしていないなど)。このような機能を実装するには、LEDをアプリケーションのメインループに切り替えるコードを統合する必要があります。

于 2010-11-06T14:14:38.797 に答える