LINUX.ORG.RU

watchdog на MB77.07

 ,


0

1

В инструкции по эксплуатации указан функционал:

− Блок синхронизации и сброса CRG: 

• Управляемый программным обеспечением сброс; 
• Генерация сброса  watchdog по внешнему запросу.

Первое если я правильно понимаю это реализация программного сброса с настройкой ядра и , например, запуском модуля как в raspberry. Второе просто нога сброса (40) на разъеме X9.

Правильно ли я понимаю ? Подскажите, пожалуста, как правильно осуществить работу watchdog на данном устройстве.


Насколько я помню всё как обычно, грузишь модуль, натравливаешь watchdog на устройство и если его вовремя из userspace не покормят, то он дёрнет сброс.

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

Так и есть. Надо периодически дергать ногой.

aol ★★★★★
()

Дергать ногой с помощью модуля - это, я так понимаю, про «Управляемый программным обеспечением сброс».
А еще на разъеме X.9 есть нога 40 - «Сигнал сброса платы». Она, вероятно, может пригодится в том числе и для внешних устройств типа watchdog ?

Что ж, покопаем сначала в сторону модуля...

edu08
() автор топика

Это видимо кусок копипасты из доки на сам блок CRG. Внутри чипа в него заходит ресет от вочдога, на практике это выливается в следующее.

1. Есть ресет из чипа, можно дергать кнопочкой, можно пином на Х9. (3.3 вольта логика!)

2. Есть вочдог, sp805 wdt. Драйвер стандартный в ядре - только поставь юзерспейсный пакет или пиши в /dev/watchdog из своей апликухи. Все.

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

Пробую без юзерспейсного пакета.

Сделал так:

root@shadow:~# dmesg | grep sp805                                               
[    7.010000] sp805-wdt 20025000.wd: registration successful                   
root@shadow:~# 

Потом вот так:

root@shadow:~# echo "start" > /dev/watchdog; Count=0; while true; do sleep 1; Co
unt=$((Count+1)); echo $Count; done                                             
[  163.800000] watchdog watchdog0: watchdog did not stop!                       
1                                                                               
2                  
....
57                                                                              
58 

MBOOT (K1879 and friends): Version mboot-00063-g9302e24-dirty (Built Thu Aug 21 
17:10:13 MSK 2014)                                                              
OTP info: boot_source 2 jtag_stop 0 words_len 1024                              
Maximum bank size: 0x10000000 bytes                                             
Detected 134217728 bytes of EM0 memory                                          
MEMORY: 40000000 -> 48000000                                                                                                      

И как видно выше получил ребут через 58 секунд без «дерганий» значения в файле. Только вот не пойму где этот таймер ожидания настраивать ...

Почитал это https://static.docs.arm.com/ddi0270/b/DDI0270.pdf

Не дошло ...

В регистрах ? Не пойму как до них добраться ?

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

юзай программу стандартную watchdog из пакетов, так как пинать нужно правильными ioctl'ками. Дока на регистры нужна только если будешь общаться напрямую с вотчдогом, без стандартного драйвера.

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

Первое.

После установки пакета watchdog появляется проблема с reboot и пока не разбирался как ее решить:

...
[info] Will now restart.                                                        
[57760.530000] Restarting system.                                               
[57760.540000] platform: Requested system restart                               
[57761.550000] Reboot failed -- System halted
Все! Дальше система виснет и перегрузить можно только кнопкой на плате, либо питанием, но при этом по fork-бомбе перезагрузку отрабатывает .

Почему клинит reboot - не понятно. Может еще что вылезет в дальнейшем? Посмотрим.

Второе.

А правильным системным вызовом ioctl - это каким?

Пытаюсь посмотреть watchdog интервал из своего софта ioctl-test на Си:

   /* Display current watchdog interval */
   if (ioctl(fd, WDIOC_GETTIMEOUT, &interval) == 0) {
      fprintf(stdout, "Current watchdog interval is %d\n", interval);
   } else {       
      fprintf(stderr, "\n Error: Cannot read watchdog interval\n");
      exit(EXIT_FAILURE);
   }

Получаю


root@shadow:~# ./ioctl-test                                                     
                                                                                
 [   90.980000] watchdog watchdog0: watchdog did not stop!                      
Error: Cannot read watchdog interval 
root@shadow:~#  

Какие же вызовы ioctl ему нужны ?

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

После установки пакета watchdog появляется проблема с reboot и пока не разбирался как ее решить.

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

Какие же вызовы ioctl ему нужны ?

см. https://elixir.bootlin.com/linux/v4.1/source/drivers/watchdog/watchdog_dev.c#...

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

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

Влил прошивку fw-raspbian-stable-19072017 и там нет конфликта, но отрабатывает watchdog очень долго . В терминал льется много типа:

......
[ 3115.108118] [ 2024]     0  2024      879       97       5        0           
  0 bash                                                                        
[ 3115.131715] [ 2025]     0  2025      878       96       5        0           
  0 bash                                                                        
[ 3115.155333] Out of memory: Kill process 666 (systemd-journal) score 10 or sac
rifice child                                                                    
[ 3115.179974] Killed process 666 (systemd-journal) total-vm:8020kB, anon-rss:24
4kB, file-rss:684kB                                                             
[ 3115.211221] UBI warning: ubi_io_read: error -4 while reading 108 bytes from P
EB 2579:52312, read only 0 bytes, retry                                         
[ 3123.679582] bash invoked oom-killer: gfp_mask=0xd0, order=2, oom_score_adj=0 
[ 3123.700875] bash cpuset=/ mems_allowed=0                                     
[ 3123.712793] CPU: 0 PID: 1942 Comm: bash Not tainted 3.10.90-shadow1-gcb7ec19 
#54                                                                             
[ 3123.735266] [<c0012474>] (unwind_backtrace+0x0/0x118) from [<c0010e60>] (show
_stack+0x10/0x14)                                                               
[ 3123.761768] [<c0010e60>] (show_stack+0x10/0x14) from [<c03943d8>] (dump_heade
r.isra.12+0x58/0x150)                                                           
[ 3123.789257] [<c03943d8>] (dump_header.isra.12+0x58/0x150) from [<c0069c48>] (
oom_kill_process+0x9c/0x354)                                                    
[ 3123.818132] [<c0069c48>] (oom_kill_process+0x9c/0x354) from [<c006a2f4>] (out
_of_memory+0x290/0x2c0)                                                         
[ 3123.845688] [<c006a2f4>] (out_of_memory+0x290/0x2c0) from [<c006d704>] (__all
oc_pages_nodemask+0x694/0x87c)                                          

....

И такак маслает минуты 3-4.

На старой прошивке fw-raspbian-wheezy-21012015 конфликтует reboot c watchdog, зато та же fork-бомба быстрее и корректнее отрабатывается.

Вообще, по моему, старая шустрее как-то работает. По крайней мере под мои задачи.

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

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

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

Вместе с watchdog-ом хотелось бы и визуально контролировать работоспособность платы, т.к. она находится у меня в корпусе и светодиод led1 (heartbeat) не видно.

Можно его как-то вывести на доступные GPIO ноги что бы подцепить на них свой светодиод ? В .dts прописать?

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

Во, нашел статью

https://habrahabr.ru/post/234541/

«Второй тип GPIO – более упрощенные, управляемые другим IP core, они не могут дергать прерывания. На эти GPIO заведены два наплатных светодиода, один из них регистрируется через LED framework ядра Linux как heartbeat и показывает Load Average. Полезно при дебаге визуально видеть, не зависло ли всё.»

Я так понимаю, что вывести heartbeat на свой светодиод не получится ?

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

Уважаемый ncrmnt !

Больше не знаю к кому обратиться за помощью с компиляцией ядра с гитхаба https://github.com/RC-MODULE/linux-3.10.x/tree/k1879-3.10.90. Когда я собираю скаченное ядро под свои нужды, я получаю нужные мне фитчи, но при этом перестает работать reboot.

Пробовал я его компилировать и с конфигом взятым из прошивки fw-raspbian-stable-19072017, но и это не помогает - reboot перестает работать (Reboot failed — System halted ).

При этом с родным ядром в самой прошивке fw-raspbian-stable-19072017 отрабатывается reboot как надо.

Делаю вывод что .config ни при чем.

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

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

см. https://github.com/RC-MODULE/linux-3.10.x/blob/k1879-3.10.90/arch/arm/mach-ue... Собственно вроде бы кусок кода перегружающий систему там есть.

Дока: https://static.docs.arm.com/ddi0270/b/DDI0270.pdf

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

Прошивки собирал jenkins из гита, так что маловероятно что это какой-то патч хитрый.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.