LINUX.ORG.RU

про сторожевой таймер (watchdog)

 


1

3

На материнке есть аппаратный watchdog (iTCO_wdt собран как часть ядра). Хочется немного странного — стартовать watchdog при инициализации его драйвера (т.е. не из юзерспейсной программы типа sys-apps/watchdog). Цель — тестирование свежесобранного ядра на удаленной системе (собрал и установил ядро, передал ему управление через kexec, если оно запаниковало/не нашло rootfs/случилось что-то еще — тут сработал wdt и ребутнул все со старым ядром).

В Documentation есть параметр watchdog, только не очень понял, за что он отвечает?

★★★★★

iTCO_wdt - это же не только ценный мех^W^Wдрайвер ядра, но и файл в /dev

может, попробовать как-то udev уговорить? дальше несложно было бы..

или при kexec вообще ничего не происходит, кроме нового ядра? я, честно говоря, не в курсе…

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от demidrol

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

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

aol ★★★★★
()

у меня, кстати, обратная проблема.. я в биосе активировал вочдог, таймаут задал, модуль iTCO_wdt всю аппаратуру нашел, но демон-обновлятор не обновляет таймаут и …

в общем, я потыкался и забил пока, но хотелось бы добиться работоспособного решения..

aol ★★★★★
()
Ответ на: комментарий от aol

неа. Линуксовые драйверы watchdog'ов устроены так, что после создания устройства они останавливаются. Вот кусок из iTCO_wdt.c

static int iTCO_wdt_probe(struct platform_device *pdev)
{
....
        /* Make sure the watchdog is not running */
        iTCO_wdt_stop(&p->wddev);
....
}

demidrol ★★★★★
() автор топика
Ответ на: комментарий от demidrol

я реальный опыт свой рассказал выше:

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

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

aol ★★★★★
()
Ответ на: комментарий от aol

да я тебя понял — wdt у тебя стартовал прям аппаратно, при выполнении кода BIOS/EFI. Да, и такие приколы возможны.

demidrol ★★★★★
() автор топика
Ответ на: комментарий от aol

в общем, сделал так:

diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
index c559f70..8ca7cd3 100644
--- a/drivers/watchdog/iTCO_wdt.c
+++ b/drivers/watchdog/iTCO_wdt.c
@@ -127,6 +127,11 @@ module_param(turn_SMI_watchdog_clear_off, int, 0);
 MODULE_PARM_DESC(turn_SMI_watchdog_clear_off,
        "Turn off SMI clearing watchdog (depends on TCO-version)(default=1)");
 
+static bool start_on_load = 0;
+module_param(start_on_load, bool, 0);
+MODULE_PARM_DESC(start_on_load,
+       "Start watchdog on probe (default=1)");
+
 /*
  * Some TCO specific functions
  */
@@ -548,8 +553,12 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
                return ret;
        }
 
-       pr_info("initialized. heartbeat=%d sec (nowayout=%d)\n",
-               heartbeat, nowayout);
+       if (start_on_load) {
+               iTCO_wdt_start(&p->wddev);
+       }
+
+       pr_info("initialized. heartbeat=%d sec (nowayout=%d, started=%d)\n",
+               heartbeat, nowayout, start_on_load);
 
        return 0;
 }

и добавил в параметры ядра iTCO_wdt.start_on_load=1

demidrol ★★★★★
() автор топика
Ответ на: комментарий от demidrol

Шота непонятное… У тебя вочдог изначально неактивен на железке чтоль? А тайм-аут откуда берется при указании впиленного тобой параметра?

aol ★★★★★
()
Ответ на: комментарий от aol

ну да, неактивен

причем в настройках биоса нигде нет опции его включить.

И потом, мне ж так удобнее (чтобы wdt тикал именно после старта линуксового ядра). К примеру, загружаешь ты такой failsafe-образ с флешки, чего-то там делаешь в grub, а оно берет и перезагружается.

demidrol ★★★★★
() автор топика
Ответ на: комментарий от aol

да, таймаут по умолчанию в линуксе — 60 секунд.

demidrol ★★★★★
() автор топика
Ответ на: комментарий от aol

дык после старта системы сказать «echo 'v' >/dev/watchdog» и оно вырубит его...

или запустить watchdog, предварительно настроив /etc/watchdog.conf

vel ★★★★★
()
Ответ на: комментарий от vel

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

или запустить watchdog,

вот, так и делал, /etc/watchdog.conf крутил, но как-то не в коня корм вышел. всё равно она ребутилась по таймеру, а демон, будто, ничего не делал..

aol ★★★★★
()
Ответ на: комментарий от aol

вот, так и делал, /etc/watchdog.conf крутил, но как-то не в коня корм вышел. всё равно она ребутилась по таймеру, а демон, будто, ничего не делал..

гм, а он в нужный watchdog писал ?

Получить более 1 watchdog-а не сложно :)

vel ★★★★★
()
Ответ на: комментарий от vel

так точно! после загрузки модуля появлялся /dev/watchdog1, на него и натравливал демона..

// до загрузки модуля был еще /dev/watchdog. он мне, как я понимаю, не интересен

aol ★★★★★
()
Ответ на: комментарий от aol

A в sysfs не посмотреть о watchdog ?

ls /sys/class/watchdog/watchdog*/device/driver/

запросто можно получить soft-watchdog в /dev/watchdog1, a iTCO_wdt в /dev/watchdog0

vel ★★★★★
()
Ответ на: комментарий от vel

это, конечно, мысль, спасибо ) что-то я проперся с этим..

aol ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.