En mi investigación hasta ahora, he notado que hay dos enfoques para activar un temporizador de vigilancia en frambuesa: usar systemd o instalar watchdog. Todo se explica bien aquí: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#
Y he logrado que funcione en ambos sentidos, pero no durante el reinicio / apagado. Utilicé una bifurcación para probarlo y reacciona a eso, sin embargo, cuando intento:
sudo poweroff
Simplemente se queda abajo. Entonces, ¿creo que hay alguna forma de obligar a watchdog a seguir ejecutándose durante el reinicio / apagado para que se restablezca después de unos segundos si no se inicia correctamente?
La mayoría de los enfoques inician watchdog durante el arranque, pero ¿qué pasa si necesita que se ejecute todo el tiempo? Mi frambuesa una vez se detuvo al reiniciar y tuve que desconectarlo / enchufarlo manualmente para que funcione.
ACTUALIZAR:
Algunas cosas me son mucho más claras ahora. Hay 3 cosas a considerar:
- temporizador de vigilancia
- demonio de vigilancia
- servicio de vigilancia demonio
temporizador de vigilancia: un registro que desencadena un reinicio cuando se desborda, cada ciclo de RPI que se incrementa, debe borrarse (patearse) regularmente para evitar el reinicio
Para ejecutarlo en el arranque, agregue lo siguiente a /boot/config.txt :
dtparam=watchdog=on
watchdog daemon: un proceso responsable de limpiar (patear) el temporizador watchdog regularmente
Instalarlo:
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 configurarlo, agregue lo siguiente a /etc/modprobe.d/watchdog.conf :
options bcm2835_wdt nowayout=1 heartbeat=10
referencia: http://vk5tu.livejournal.com/35721.html
El parámetro heartbeat para el módulo del kernel es el espacio máximo entre los heartbeats que ve el dispositivo antes de que se reinicie el hardware.
El parámetro nowayout determina qué sucede cuando el dispositivo / dev / watchdog está cerrado: ¿todavía se espera un latido o no? Un valor de 1 dice que la cuenta regresiva para reiniciar sigue ejecutándose y si el dispositivo no se vuelve a abrir y se escribe un latido, la máquina se reiniciará.
Habilítelo (si esto no funciona, primero cuide de watchdog.service e intente nuevamente):
sudo systemctl enable watchdog
Vigilarlo:
sudo systemctl status watchdog
Demonio de servicio de vigilancia: se activa cuando el daemon de vigilancia falla / se detiene, por lo general ejecuta un demonio de keepalive que patea al perro guardián regularmente
Configure /lib/systemd/system/watchdog.service :
# OnFailure=wd_keepalive.service
- Al comentar esto, se desactiva el demonio keepalive, por lo que una vez que el demonio watchdog falla / se detiene, nada detendrá el reinicio del temporizador watchdog.
[Install]
WantedBy=multi-user.target
- arreglo del fallo
Finalmente:
Reiniciar RPI. Una vez que se reinicia la frambuesa, todo debería comenzar (temporizador de vigilancia y demonio de vigilancia). Para verificar este uso:
cat /var/log/syslog | grep watchdog
Rendimiento esperado:
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.
Y:
ps aux|grep watchdog
Rendimiento esperado:
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
PRUEBA :
Mata al demonio guardián, ejecuta:
ps aux|grep watchdog
Ver ID de proceso y matarlo:
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
Prueba clásica de forkbomb, ejecute:
: (){ :|:& };:
Para probar, se restablecerá la frambuesa si falla el proceso de reinicio, ejecute:
sudo poweroff
- con este he tenido algunos problemas
La frambuesa debería reiniciarse después de cca 15s.
sudo poweroff
. A veces funciona, a veces no: Ssystemctl status watchdog.service
. Matarwatchdog
NO causará un reinicio, ya quewatchdog.service
comienzawd_keepalive.service
en el cierre, lo que como su nombre implica PREVIENE reiniciar.# OnFailure=wd_keepalive.service
- Al comentar esto, se desactiva el demonio keepalive, por lo que una vez que el demonio watchdog falla / no se detiene, nada detendrá el reinicio del temporizador watchdog"Power es un servicio de sistema / daemon en pi y es analizado en cadena por un IC directamente pin out / fanouted al Broadcom IC. El flujo de trabajo de la operación puede alterarse al referirse a los archivos del sistema, pero por lo que puedo decirle, está tratando de invocar periperhials en escenarios de regulación de energía personalizados dentro del concepto de interrupciones y temporizadores de vigilancia. Puede alterar una parte de este comportamiento repintando el IC de regulación y realizando una programación básica de prearranque. Echa un vistazo a estos y no dudes en ponerte en contacto conmigo si tienes algo en mente. consulte el conjunto de instrucciones de la línea de referencia de ensamblaje de ARM Corp., así como la documentación de arquitectura. Está en la 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
Por cierto, dile "hola" a tu profesor ...
fuente