Встраиваемый Linux-демон мигания светодиодов: существует ли он? - PullRequest
3 голосов
/ 16 октября 2010

Я уже видел встроенные платы, у которых есть светодиод, который мигает, как сердцебиение, чтобы показать, что плата все еще выполняет код.Я хотел бы сделать нечто подобное на встроенной плате Linux, над которой я работаю.Учитывая, что это довольно тривиальный фрагмент кода, мне кажется, что кто-то уже написал демон для Linux, который делает это, но я не смог найти никаких доказательств.

Обратите внимание, что OS XСердцебиение сервера и демон сердечного ритма Linux с высокой доступностью - это не то, что мне нужно - они оба координируют доступность системы по IP-сетям или что-то в этом роде.

Предполагая, что яя ищу, не существует, я также заинтересован в совете о том, как написать демон, который переключает булавку, минимизируя использование ресурсов.С какой частотой обновления cron становится глупой идеей?

(я бы тоже не услышал хрипов о светодиодном индикаторе на спящем MacBook Pro, если по какой-то причине это кажется актуальным).

Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 декабря 2010

Светодиодный пульс является встроенной функцией ядра. Предполагая, что у вас есть драйвер устройства для вашего светодиода, включение сердцебиения выполняется следующим образом:

$ 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 ударах в минуту.

0 голосов
/ 06 ноября 2010

Я бы не использовал cron.Это просто не правильный инструмент.Очень простое решение - просто запустить скрипт оболочки из вашего inittab.

Пример:

#!/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 в соответствии со своей средой.Это сильно зависит от конкретной платы, как светодиод может переключаться из пространства пользователя (файл драйвера устройства, запись sysfs, ....).

Если вам нужно что-то более эффективное, вы можете переделать какое-то время в Cно это может не стоить усилий.

Одна вещь, о которой стоит подумать, это то, что вы хотите сигнализировать с помощью пульсирующего светодиода.С помощью подхода, описанного выше, мы можем только показать, что плата все еще жива (ядро работает, процесс, выполняющий blink.sh, запланирован, а blink.sh делает то, что должен).В некоторых случаях это может быть хорошо, но чаще вы действительно хотите сигнализировать, что приложение, работающее на встроенной плате, все еще в порядке (не зависает, не аварийно завершается, ...).Для реализации такой функциональности вам необходимо интегрировать код, который переключает светодиод, в основной цикл вашего приложения.

...