Включение сторожевого таймера BeagleBone Black, который работает даже если os не может загрузиться

Мы знаем, что при открытии /dev/watchdog активируется сторожевой таймер и, отправив символ менее чем через минуту, он сбросится. инструкции находятся здесь.

Процессор, используемый для BBB AM335x, по умолчанию включает свой внутренний сторожевой таймер. Но когда запускается U-Boot или Ubuntu, этот сторожевой таймер отключается. и после загрузки ОС можно использовать /dev/watchdog.

Я хочу убедиться, что сторожевой таймер работает, даже когда U-Boot или ядро не могут загрузиться. Как это можно сделать?

  • Ядро и U-Boot не должны отключать сторожевой таймер.
  • Таймаут сторожевого таймера по умолчанию должен быть больше минуты до запуска ядра U-Boot, чтобы ОС могла полностью загрузиться

Я должен упомянуть, что изменение некоторых частей кода U-Boot или ядра Linux допустимо. но внешний сторожевой таймер - не вариант.

0
08.09.2016, 09:29
1 ответ

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

После этого ответа для этого вопроса от man proc :

/ proc / sys / kernel / panic

Этот файл дает read / доступ на запись к переменной ядра panic_timeout. Если он равен нулю, ядро ​​зациклится при панике; если ненулевое значение, это означает, что ядро ​​должно автоматически перезагрузиться через это количество секунд

. Очевидно, что в этот файл должно быть передано ненулевое значение. Согласно этот ответ , чтобы передать значение в / proc / sys / kernel / panic , мы должны изменить /etc/sysctl.conf и добавить параметр kernel.panic = 3 в течение 3 секунд ожидания перед перезапуском после возникновения паники ядра.

Но это не решило мою проблему. Изучая другие проблемы, связанные с паникой, я нашел из man proc :

/ proc / sys / kernel / panic_on_oops (начиная с Linux 2.5.68)

Этот файл управляет поведением ядра при возникновении ошибки или ошибки. встречается. Если в этом файле содержится 0, система пытается продолжить работу. Если он содержит - 1, то система задерживается на несколько секунд (чтобы дать klogd время для записи вывода oops), а затем паникует. Если файл / proc / sys / kernel / panic также ненулевой, то машина будет перезагружена.

И моя проблема была не в панике, а в ядре! Итак, добавив kernel.panic_on_oops = 1 на /etc/sysctl.conf , / proc / sys / kernel / panic_on_oops флаг изменен на 1. и теперь, когда ядро ​​останавливается, оно перезапускается после 3 секунды.

0
28.01.2020, 04:50

Теги

Похожие вопросы