Estabilizando e detectando erros na Raspberry PI

keep-calm-and-debug-raspberry-pi

Depois de utlizar a raspberry pi por um longo período, começei a notar alguns travamentos, pricipalmente nas transferências via wifi.

Com muitas pesquisas, lendo sobre os parâmetros do kernel e dos drivers da raspberry pi, consegui estabilizar o sistema.

Vou compartilhar com vocês o que achei mais relevante, no quesito estabilidade.

Auto-reboot kernel panic

Caso ocorra um kernel panic, reincia a placa.

Sintaxe: kernel.panic=<segundos>

kernel.panic=5  # reincia em 5 segundos

Erros com alto tráfego na rede

Quando o tráfego é muito alto (por exemplo, downloads) a memória pode ser esgotada causando falhas / travamentos. (Crashes com alta carga de rede também pode está relacionado com a sua fonte de alimentação).

Adicionando os parâmetros abaixo, perceberá uma queda na transferência, porém, maior estabilidade.

smsc95xx.turbo_mode=N
dwc_otg.dma_enable=1
dwc_otg.dma_burst_size=256
dwc_otg.lpm_enable=0
dwc_otg.fiq_fix_enable=1

Reparando partição ext4 automaticamente

Repara as partições do cartão de memória e reinicia em 5 segundos.

fsck.mode=force
fsck.repair=yes

Verificando baixa tensão 

Sabe aquele retângulo colorido que aparece no topo, lado direito? É um indicador de baixa tensão.

Verifique regularmente o pino 35 (modo BCM).

Considerações finais

Todos os parâmetros citados acima, deve ser incluso no /boot/cmdline.txt.

Exemplo:

smsc95xx.turbo_mode=N kernel.nohalt kernel.panic=5 logo.nologo selinux=0 dwc_otg.dma_enable=1 dwc_otg.dma_burst_size=256 dwc_otg.lpm_enable=0 dwc_otg.fiq_fix_enable=1 plymouth.enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait ro fsck.mode=force fsck.repair=yes

O watchdog também é uma boa opção para auxiliar na estabilidade do sistema, porém, possui um problema. Quando a placa está com baixa tensão, o watchdog pode desligar a placa, então, certifique-se de utilizar uma boa fonte de energia. Dexei algumas verificações básicas no seu arquivo de configuração, fiz um script a parte para verificar outros erros.

#!/bin/bash

ANALYZELOG="/var/log/kern.log"
ERRORS_LOG="/var/log/errors.log"
# errors
hub_error="disabled by hub (EMI?), re-enabling..."
eth_error="smsc95xx 1-1.1:1.0 eth0: Failed to write reg index"
badcable_error="Maybe the USB cable is bad"
bcmv4l2_failed_enable="v4l2: Failed to enable camera"
bcmv4l2_failed_setFps="v4l2: Failed to set fps ret"

function checkErrors() {
        if [ ! -w "/var/log" ]; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] /var/log read-only. rebooting..." >> "$ERRORS_LOG"
                return 1
        fi

        if grep -iq "$hub_error" "$ANALYZELOG" ; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] HUB disabled. rebooting..." >> "$ERRORS_LOG"
                return 1
        fi

        if grep -iq "$eth_error" "$ANALYZELOG" ; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] eth0 failure in communication. rebooting..." >> "$ERRORS_LOG"
                return 1
        fi

        if grep -iq "$badcable_error" "$ANALYZELOG" ; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] bad USB device / bad cable. rebooting..." >> "$ERRORS_LOG"
                return 1
        fi
        
        if grep -iq "$bcmv4l2_failed_enable" "$ANALYZELOG" ; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] $bcmv4l2_failed_enable rebooting..." >> "$ERRORS_LOG"
                return 1
        fi
        
        if grep -iq "$bcmv4l2_failed_setFps" "$ANALYZELOG" ; then
                echo "$(date +"%Y-%m-%d %H:%M:%S") [CRITICAL] $bcmv4l2_failed_setFps rebooting..." >> "$ERRORS_LOG"
                return 1
        fi
        return 0
}

while true; do
    checkErrors || { 
        >$ANALYZELOG
    }
    sleep 60
done &
log_end_msg 0

 

Que tal nos encontrar no SeuTubo para ver dicas, tutoriais e Reviews de placas? Canal Sistemas Embarcados

Que tal na página do Facebook?

 

Ou Instagram?

 

Quem sabe Google Plus?

 

Que tal no Pinterest?

 

Ou talvez nos encontrar no Twitter para receber as ultimas noticias quentinhas: @SEmbarcados

 

E não esqueça que também tem o email, contato@sistemasembarcados.org

 

Conheça também nossos grupos do Facebook:

Forte abraço a todos e até a próxima!