Кто обновляет аппаратный сторожевой таймер в Linux?

У меня есть процессор AT91SAM9G20, выполняющий 2,6 ядра. Сторожевой таймер включен на уровне начальной загрузки и настроен в течение 16 секунд. Регистр режима Watchdog может быть настроен только однажды. Когда код зависает или в начальной загрузке, загрузчике или в ядре, перезагрузках платы. Но после того как ядро подходит даже при том, что сторожевой таймер не обновляется ни в одном из приложений, плата не сбрасывается после 16 секунд, но 15 минут.

Кто обновляет сторожевой таймер?

В нашем случае сторожевой таймер должен быть под влиянием приложений, так, чтобы плата могла сбросить, если наше приложение зависает.

Это рабочие процессы:

1 root     init
2 root     [kthreadd]
3 root     [ksoftirqd/0]
4 root     [watchdog/0]
5 root     [events/0]
6 root     [khelper]
63 root     [kblockd/0]
72 root     [ksuspend_usbd]
78 root     [khubd]
85 root     [kmmcd]
107 root     [pdflush]
108 root     [pdflush]
109 root     [kswapd0]
110 root     [aio/0]
740 root     [mtdblockd]
828 root     [rpciod/0]
982 root     [jffs2_gcd_mtd10]
1003 root     /sbin/udevd -d
1145 daemon   portmap
1158 dbus     dbus-daemon --system
1178 root     /usr/sbin/ifplugd -i eth0 -fwI -u0 -d5 -l -q
1190 root     /usr/sbin/ifplugd -i eth1 -fwI -u0 -d5 -l -q
1221 default  avahi-daemon: running [SP14.local]
1226 root     /usr/sbin/dropbear
1246 root     /root/bin/host_app
1254 root     /root/bin/mini_httpd -c *.cgi -d /root/bin -u root -E /root/bin/
1256 root     -sh
1257 root     /sbin/syslogd -n -m 0
1258 root     /sbin/klogd -n
1259 root     /usr/bin/tail -f /var/log/messages
1265 root     ps -e

Мы используем сторожевой таймер для мягких тупиков, доступных в kernel-2.6.25-ts.at91sam9g20/kernel/softlockup.c

17
задан Ender 9 July 2014 в 00:38
поделиться

3 ответа

Если в Вашем ядре включен драйвер сторожевого таймера, то драйвер сторожевого таймера устанавливает таймер ядра, отвечающий за сброс сторожевого таймера. Соответствующий код здесь . Таким образом, он работает следующим образом:

Если ни одно приложение не открывает файл /dev/watchdog, то ядро позаботится о сбросе сторожевого таймера. Так как это таймер, он не будет отображаться как выделенный поток ядра, а будет обрабатываться мягким потоком IRQ. Теперь, если приложение открывает этот файл, оно становится ответственным за сторожевой таймер, и может сбросить его, записав в этот файл, как описано в документации, связанной с постом Ричарда.

Настроен ли сторожевой таймер в вашем ядре? Если нет, то вы должны настроить его и посмотреть, происходит ли перезагрузка. Если это все еще происходит, то вероятно, что ваш сброс происходит откуда-то еще.

Если ваше ядро слишком старо для того, чтобы иметь соответствующий сторожевой драйвер (отсутствующий в 2.6.25), то вы должны перенести его из 2.6.28. Или попробуйте отключить сторожевой таймер в системном загрузчике и посмотреть, не происходит ли сброс.

.
18
ответ дан 30 November 2019 в 12:13
поделиться

Разве ядро не будет освежать сторожевой таймер? Сторожевой таймер предназначен для сброса платы, если вся система зависает, а не только одно приложение

.
0
ответ дан 30 November 2019 в 12:13
поделиться

Это может дать вам подсказку: http://www.mjmwired.net/kernel/Documentation/watchdog/watchdog-api.txt

Имеет смысл иметь демон пользовательского пространства, управляющий сторожевым псом. Вероятно, по умолчанию установлен тайм-аут 15 минут.

6
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

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