В своем исследовании я заметил, что есть два подхода к активации сторожевого таймера на RasPberry: использование systemd или установка сторожевого таймера. Здесь все хорошо объяснено: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#
И мне удалось заставить его работать в обоих направлениях, но не во время перезагрузки / выключения. Я использовал вилку для проверки, и она реагирует на это, однако, когда я пытаюсь:
sudo poweroff
Это просто остается внизу. Поэтому я думаю, есть ли способ заставить сторожевой таймер продолжать работать во время перезагрузки / выключения, чтобы он сбрасывал его через несколько секунд, если он не загружается должным образом?
Большинство подходов запускает сторожевой таймер во время загрузки, но что, если он вам нужен постоянно? Однажды моя малина остановилась при перезагрузке, и мне пришлось вручную отключить / подключить ее, чтобы она заработала.
ОБНОВИТЬ:
Некоторые вещи теперь намного понятнее для меня. Есть 3 вещи для рассмотрения:
- сторожевой таймер
- сторожевой демон
- сторожевой демон службы
сторожевой таймер: регистр, который запускает сброс при переполнении, каждый цикл RPI, который он увеличивает, должен регулярно очищаться (удаляться), чтобы избежать сброса
Чтобы запустить его при загрузке, добавьте следующее в /boot/config.txt :
dtparam=watchdog=on
сторожевой демон: процесс, отвечающий за регулярную очистку (пинание) сторожевого таймера
Установите это:
sudo modprobe bcm2835_wdt
echo "bcm2835_wdt" | sudo tee -a /etc/modules
sudo apt-get install watchdog
sudo update-rc.d watchdog defaults
Настройте /etc/watchdog.conf :
watchdog-device = /dev/watchdog
watchdog-timeout = 14
realtime = yes
priority = 1
max-load-1 = 24
Настройте / etc / default / watchdog :
watchdog_module="bcm2835_wdt"
Для его настройки добавьте следующее в /etc/modprobe.d/watchdog.conf :
options bcm2835_wdt nowayout=1 heartbeat=10
ссылка: http://vk5tu.livejournal.com/35721.html
Параметр heartbeat для модуля ядра - это максимальный разрыв между пульсами, наблюдаемыми устройством до перезагрузки оборудования.
Параметр nowayout определяет, что происходит при закрытии устройства / dev / watchdog: все еще ожидается пульс или нет? Значение 1 говорит о том, что обратный отсчет до перезагрузки продолжается, и если устройство не будет вновь открыто и будет записано сердцебиение, то машина перезагрузится.
Включите его (если это не сработает, сначала позаботьтесь о watchdog.service и попробуйте снова):
sudo systemctl enable watchdog
Контролировать это:
sudo systemctl status watchdog
сервисный демон watchdog: активируется при сбое / остановке демона watchdog, обычно запускает демон keepalive , который регулярно пинает сторожевой таймер
Настройте /lib/systemd/system/watchdog.service :
# OnFailure=wd_keepalive.service
- Комментирование этого отключает демон keepalive , поэтому после сбоя / остановки сторожевого демона ничто не остановит сторожевой таймер от перезагрузки RPI.
[Install]
WantedBy=multi-user.target
- Исправлена ошибка
В заключение:
Перезагрузите RPI. После перезагрузки Raspberry все должно запуститься (сторожевой таймер и сторожевой демон). Чтобы проверить это используйте:
cat /var/log/syslog | grep watchdog
Ожидаемый результат:
Jun 14 12:09:08 raspberrypi systemd[1]: Starting watchdog daemon...
Jun 14 12:09:08 raspberrypi watchdog[813]: starting daemon (5.14):
Jun 14 12:09:08 raspberrypi watchdog[813]: int=1s realtime=yes sync=no soft=no mla=24 mem=0
Jun 14 12:09:08 raspberrypi watchdog[813]: ping: no machine to check
Jun 14 12:09:08 raspberrypi watchdog[813]: file: no file to check
Jun 14 12:09:08 raspberrypi watchdog[813]: pidfile: no server process to check
Jun 14 12:09:08 raspberrypi watchdog[813]: interface: no interface to check
Jun 14 12:09:08 raspberrypi watchdog[813]: temperature: no sensors to check
Jun 14 12:09:08 raspberrypi watchdog[813]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no
Jun 14 12:09:08 raspberrypi watchdog[813]: watchdog now set to 14 seconds
Jun 14 12:09:08 raspberrypi watchdog[813]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer
Jun 14 12:09:08 raspberrypi systemd[1]: Started watchdog daemon.
А также:
ps aux|grep watchdog
Ожидаемый результат:
root 813 0.0 0.2 1888 1760 ? SLs 12:09 0:00 /usr/sbin/watchdog
pi 900 0.0 0.2 4752 1992 pts/0 S+ 12:10 0:00 grep --color=auto watchdog
ТЕСТОВОЕ ЗАДАНИЕ :
Убей сторожевого демона, запусти:
ps aux|grep watchdog
Посмотрите идентификатор процесса и убейте его:
root 812 0.0 0.2 1888 1760 ? SLs 12:16 0:00 /usr/sbin/watchdog
pi 898 0.0 0.2 4752 1992 pts/0 S+ 12:16 0:00 grep --color=auto watchdog
sudo kill -9 812
Тест классической вилочной бомбы, запустить:
: (){ :|:& };:
Чтобы проверить, произойдет ли сброс малины в случае сбоя процесса перезагрузки, выполните
sudo poweroff
- с этим у меня были некоторые проблемы
Малина должна перезагрузиться через 15 секунд.
sudo poweroff
. Иногда это работает, иногда нет: Ssystemctl status watchdog.service
. Убийствоwatchdog
НЕ приведет к перезагрузке, потому чтоwatchdog.service
запускаетсяwd_keepalive.service
при закрытии, что, как следует из названия, ПРЕДОТВРАЩАЕТ перезагрузку.# OnFailure=wd_keepalive.service
- Комментирование этого отключает демон keepalive, поэтому при сбое / остановке сторожевого демона ничто не остановит сторожевой таймер от перезагрузки RPI»Power - это системный сервис / демон в pi, и строка анализируется IC, напрямую выводимой / разветвляющейся на Broadcom IC. Рабочий процесс можно изменить, обратившись к системным файлам, но из того, что я могу сказать, вы пытаетесь вызвать периферии в пользовательских сценариях регулирования мощности в рамках концепции прерываний и сторожевых таймеров. Вы можете изменить некоторую часть этого поведения, повторно установив регулирующую микросхему и выполнив некоторое предварительное программирование с нуля. Проверьте это и не стесняйтесь связаться со мной, если у вас есть что-то на уме. Ознакомьтесь с инструкцией по сборочной линии ARM Corp., а также с документацией по архитектуре. Это в сети.
http://infocenter.arm.com/help/topic/com.arm.doc.dui0489f/DUI0489F_arm_assembler_reference.pdf
https://www.arm.com/files/pdf/CortexM3_programming_for_ARM7_developers.pdf
Кстати, скажите «привет» своему профессору ...
источник