Как сохранить сторожевой таймер во время перезагрузки / выключения

10

В своем исследовании я заметил, что есть два подхода к активации сторожевого таймера на RasPberry: использование systemd или установка сторожевого таймера. Здесь все хорошо объяснено: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#

И мне удалось заставить его работать в обоих направлениях, но не во время перезагрузки / выключения. Я использовал вилку для проверки, и она реагирует на это, однако, когда я пытаюсь:

sudo poweroff

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

Большинство подходов запускает сторожевой таймер во время загрузки, но что, если он вам нужен постоянно? Однажды моя малина остановилась при перезагрузке, и мне пришлось вручную отключить / подключить ее, чтобы она заработала.


ОБНОВИТЬ:

Некоторые вещи теперь намного понятнее для меня. Есть 3 вещи для рассмотрения:

  1. сторожевой таймер
  2. сторожевой демон
  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 секунд.

Duje
источник

Ответы:

5

sudo poweroffзначит выключиться и остаться выключенным. Сторожевой таймер не перехватывает и не должен перехватывать это. Поведение, которое вы испытываете, является правильным, и вы не должны ожидать, что сторожевой таймер перезапустит выключенную систему.

Я не думаю, что это то, что вы хотите сделать, хотя. Если вы хотите перезапустить пи. Вы должны использовать команду sudo rebootвместо этого. И в этом случае, если что-то зависает во время последовательности выключения - запуска, которая rebootзапускается, сторожевой таймер должен вступить во владение.

nickcrabtree
источник
4

Я не прошел через все разговоры, которые вы связали, но автор, похоже, не понимает сторожевого пса.

Существует аппаратный сторожевой таймер BCM; Если вы хотите запустить аппаратный сторожевой таймер, включите dtparam=watchdog=onв/boot/config.txt

Само по себе это мало что делает, хотя и должно регулярно перезагружать систему, если не «пнуть». Вы можете написать код, который открывается, /dev/watchdogчтобы начать его.

Существует также, watchdog daemonкоторый вы можете настроить, чтобы активировать сторожевой таймер; Вы должны быть в состоянии начать сsudo systemctl enable watchdog

ПРИМЕЧАНИЕ. Ошибка, упомянутая ниже, была в Jessie и исправлена ​​в Stretch.
К сожалению, в скрипте systemd есть известная ошибка, которую легко исправить. См. Http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdog

Milliways
источник
Спасибо за ответ, я добавил обновление в исходное сообщение, чтобы показать мой прогресс. Тем не менее, у меня все еще есть проблемы с получением WDT для перезапуска RPI при запуске sudo poweroff. Иногда это работает, иногда нет: S
Duje
1
К сожалению, вы, кажется, смешали много разных идей. Я не претендую на звание эксперта по сторожевой тайме, но я проверяю, работает ли она systemctl status watchdog.service. Убийство watchdog НЕ приведет к перезагрузке, потому что watchdog.serviceзапускается wd_keepalive.serviceпри закрытии, что, как следует из названия, ПРЕДОТВРАЩАЕТ перезагрузку.
Milliways
Нет, если вы отключите wd_keepalive.service. Примерно так: «Настроить /lib/systemd/system/watchdog.service: # OnFailure=wd_keepalive.service- Комментирование этого отключает демон keepalive, поэтому при сбое / остановке сторожевого демона ничто не остановит сторожевой таймер от перезагрузки RPI»
Duje
2

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

Кстати, скажите «привет» своему профессору ...

Йигит Тургут
источник