Na minha pesquisa até agora, notei que existem duas abordagens para ativar um timer de watchdog no raspberry: usar systemd ou instalar watchdog. Está tudo bem explicado aqui: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#
E eu consegui fazê-lo funcionar nos dois sentidos, mas não durante a reinicialização / desligamento. Eu usei um forkbomb para testá-lo e ele reage a isso, no entanto, quando tento:
sudo poweroff
Apenas fica no chão. Então, eu estou pensando que existe uma maneira de forçar o cão de guarda a continuar em execução durante a reinicialização / desligamento, para que ele seja redefinido após alguns segundos se não inicializar corretamente?
A maioria das abordagens inicia o watchdog durante a inicialização, mas e se você precisar dela em execução o tempo todo? Meu framboesa parou uma vez na reinicialização e eu tive que desconectá-lo / plugá-lo manualmente para fazê-lo funcionar.
ATUALIZAR:
Algumas coisas estão muito mais claras para mim agora. Há três coisas a considerar:
- watchdog timer
- daemon de cão de guarda
- daemon de serviço de watchdog
watchdog timer: um registro que aciona uma redefinição quando ela transborda, a cada ciclo de RPI incrementado, precisa ser limpo (chutado) regularmente para evitar a redefinição
Para executá-lo na inicialização, adicione o seguinte a /boot/config.txt :
dtparam=watchdog=on
watchdog daemon: um processo responsável por limpar (chutar) o timer do watchdog regularmente
Instale-o:
sudo modprobe bcm2835_wdt
echo "bcm2835_wdt" | sudo tee -a /etc/modules
sudo apt-get install watchdog
sudo update-rc.d watchdog defaults
Configure /etc/watchdog.conf :
watchdog-device = /dev/watchdog
watchdog-timeout = 14
realtime = yes
priority = 1
max-load-1 = 24
Configure / etc / default / watchdog :
watchdog_module="bcm2835_wdt"
Para configurá-lo, adicione o seguinte ao /etc/modprobe.d/watchdog.conf :
options bcm2835_wdt nowayout=1 heartbeat=10
referência: http://vk5tu.livejournal.com/35721.html
O parâmetro de pulsação para o módulo do kernel é o intervalo máximo entre pulsações visto pelo dispositivo antes da reinicialização do hardware
O parâmetro nowayout determina o que acontece quando o dispositivo / dev / watchdog é fechado: um batimento cardíaco ainda é esperado ou não? Um valor 1 diz que a contagem regressiva para uma reinicialização continua em execução e se o dispositivo não for reaberto e uma pulsação gravada, a máquina será reinicializada.
Habilite-o (se isso não funcionar, primeiro cuide de watchdog.service e tente novamente):
sudo systemctl enable watchdog
Monitore:
sudo systemctl status watchdog
daemon de serviço watchdog: ativa quando o daemon watchdog falha / para, geralmente executa um daemon keepalive que ativa o watchdog regularmente
Configure /lib/systemd/system/watchdog.service :
# OnFailure=wd_keepalive.service
- Comentar isso desativa o daemon keepalive; assim, quando o daemon watchdog falha / para, nada impede o cronômetro watchdog de reiniciar o RPI
[Install]
WantedBy=multi-user.target
- correção de bug
Finalmente:
Reinicie o RPI. Depois que o raspberry é reiniciado, tudo deve começar (watchdog timer e watchdog daemon). Para verificar este uso:
cat /var/log/syslog | grep watchdog
Saída esperada:
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.
E:
ps aux|grep watchdog
Saída esperada:
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
TESTE :
Mate o daemon watchdog, execute:
ps aux|grep watchdog
Veja o ID do processo e mate-o:
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
Teste de forkbomb clássico, execute:
: (){ :|:& };:
Para testar a redefinição do raspberry se o processo de reinicialização falhar, execute:
sudo poweroff
- com este eu tive alguns problemas
Framboesa deve reiniciar após 15s cca.
sudo poweroff
. Às vezes funciona, às vezes não: Ssystemctl status watchdog.service
. O assassinatowatchdog
NÃO causará uma reinicialização, pois owatchdog.service
início é iniciadowd_keepalive.service
, o que, como o próprio nome indica, impede a reinicialização.# OnFailure=wd_keepalive.service
- Comentando isso desativa o daemon keepalive assim uma vez watchdog daemon falhar / pára nada vai impedi watchdog timer de reiniciar RPI"Power é um serviço / daemon do sistema em pi e é uma sequência de caracteres analisada por um IC diretamente conectado / conectado ao Broadcom IC. O fluxo de trabalho da operação pode ser alterado consultando os arquivos do sistema, mas pelo que posso dizer, você está tentando invocar periperiais em cenários de regulação de energia personalizados, dentro do conceito de interrupções e temporizadores de vigilância. Você pode alterar parte desse comportamento repinindo o IC regulador e executando alguma programação bare metal pré-inicialização. Confira estes e não hesite em contactar-me se você tem algo em mente. confira o conjunto de instruções da linha de referência ARM Corp., bem como a documentação da arquitetura. Está na web.
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
Aliás, diga "oi" ao seu professor ...
fonte