|
@@ -0,0 +1,127 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+#########################################################################
|
|
|
|
|
+# Script for check RPI hardware issues #
|
|
|
|
|
+# Created by Pavol Macko - DoIT #
|
|
|
|
|
+# ver 0.2 #
|
|
|
|
|
+#########################################################################
|
|
|
|
|
+
|
|
|
|
|
+#---------------------------- CHECK-TOOL -------------------------------#
|
|
|
|
|
+checktool(){
|
|
|
|
|
+if [ ! -f /usr/bin/vcgencmd ];
|
|
|
|
|
+then
|
|
|
|
|
+ echo "------------------------------------"
|
|
|
|
|
+ echo -e "! \e[1;31mNOT DETECETD\e[0m [\e[1;34mvcgencmd\e[0m] tool or \e[1;31mHW\e[0m"
|
|
|
|
|
+ echo "------------------------------------"
|
|
|
|
|
+ rm -rf /home/rpi_check.sh
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#------------------------------ MAPPING --------------------------------#
|
|
|
|
|
+mapping(){
|
|
|
|
|
+ISSUES_MAP=( \
|
|
|
|
|
+ [0]="Under-voltage detected" \
|
|
|
|
|
+ [1]="Arm frequency capped" \
|
|
|
|
|
+ [2]="Currently throttled"
|
|
|
|
|
+ [3]="Soft temperature limit active" \
|
|
|
|
|
+ [16]="Under-voltage has occurred" \
|
|
|
|
|
+ [17]="Arm frequency capping has occurred" \
|
|
|
|
|
+ [18]="Throttling has occurred" \
|
|
|
|
|
+ [19]="Soft temperature limit has occurred")
|
|
|
|
|
+HEX_BIN_MAP=( \
|
|
|
|
|
+ ["0"]="0000" \
|
|
|
|
|
+ ["1"]="0001" \
|
|
|
|
|
+ ["2"]="0010" \
|
|
|
|
|
+ ["3"]="0011" \
|
|
|
|
|
+ ["4"]="0100" \
|
|
|
|
|
+ ["5"]="0101" \
|
|
|
|
|
+ ["6"]="0110" \
|
|
|
|
|
+ ["7"]="0111" \
|
|
|
|
|
+ ["8"]="1000" \
|
|
|
|
|
+ ["9"]="1001" \
|
|
|
|
|
+ ["A"]="1010" \
|
|
|
|
|
+ ["B"]="1011" \
|
|
|
|
|
+ ["C"]="1100" \
|
|
|
|
|
+ ["D"]="1101" \
|
|
|
|
|
+ ["E"]="1110" \
|
|
|
|
|
+ ["F"]="1111" \
|
|
|
|
|
+)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#----------------------------- HARDWARE --------------------------------#
|
|
|
|
|
+hardware(){
|
|
|
|
|
+HOSTNAME=$(hostname -s | tr '[:lower:]' '[:upper:]')
|
|
|
|
|
+if [ -f /proc/device-tree/model ];
|
|
|
|
|
+then
|
|
|
|
|
+MOD=$(cat /proc/device-tree/model | awk '{print $1,$2,$3,$4,$5}' | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
|
|
|
|
|
+else
|
|
|
|
|
+MOD=$(cat /sys/devices/virtual/dmi/id/product_name | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
|
|
|
|
|
+fi
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+echo -e "\e[1;36mMODEL: $MOD\e[0m"
|
|
|
|
|
+echo -e "\e[1;36mHOSTNAME: $HOSTNAME\e[0m"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#------------------------------ EXTRACT --------------------------------#
|
|
|
|
|
+extract(){
|
|
|
|
|
+THROTTLED_OUTPUT=$(/usr/bin/vcgencmd get_throttled)
|
|
|
|
|
+IFS='x'
|
|
|
|
|
+read -a strarr <<< "$THROTTLED_OUTPUT"
|
|
|
|
|
+THROTTLED_CODE_HEX=${strarr[1]}
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#--------------------------- CHECK-CURRENT -----------------------------#
|
|
|
|
|
+checkcur(){
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+echo -e "\e[1;31m[CURRENT] HARDWARE DETECTED ISSUES:\e[0m"
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+CURRENT_HEX=${THROTTLED_CODE_HEX:4:1}
|
|
|
|
|
+CURRENT_BIN=${HEX_BIN_MAP[$CURRENT_HEX]}
|
|
|
|
|
+if [ "$CURRENT_HEX" == "0" ] || [ -z $CURRENT_HEX ];
|
|
|
|
|
+then
|
|
|
|
|
+ echo -e "- \e[1;32mNo issues detected\e[0m"
|
|
|
|
|
+else
|
|
|
|
|
+ bit_n=0
|
|
|
|
|
+ for (( i=${#CURRENT_BIN}-1; i>=0; i--));
|
|
|
|
|
+ do
|
|
|
|
|
+ if [ "${CURRENT_BIN:$i:1}" = "1" ];
|
|
|
|
|
+ then
|
|
|
|
|
+ echo -e "- \e[1;31m${ISSUES_MAP[$bit_n]}\e[0m"
|
|
|
|
|
+ bit_n=$((bit_n+1))
|
|
|
|
|
+ fi
|
|
|
|
|
+ done
|
|
|
|
|
+fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#--------------------------- CHECK-HISTORY -----------------------------#
|
|
|
|
|
+checkhis(){
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+echo -e "\e[1;33m[HISTORY] HARDWARE DETECTED ISSUES:\e[0m"
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+PAST_HEX=${THROTTLED_CODE_HEX:0:1}
|
|
|
|
|
+PAST_BIN=${HEX_BIN_MAP[$PAST_HEX]}
|
|
|
|
|
+if [ $PAST_HEX = "0" ];
|
|
|
|
|
+then
|
|
|
|
|
+ echo -e "- \e[1;32mNo issues detected\e[0m"
|
|
|
|
|
+else
|
|
|
|
|
+ bit_n=16
|
|
|
|
|
+ for (( i=${#PAST_BIN}-1; i>=0; i--));
|
|
|
|
|
+ do
|
|
|
|
|
+ if [ "${PAST_BIN:$i:1}" = "1" ];
|
|
|
|
|
+ then
|
|
|
|
|
+ echo -e "- \e[1;33m${ISSUES_MAP[$bit_n]}\e[0m"
|
|
|
|
|
+ bit_n=$((bit_n+1))
|
|
|
|
|
+ fi
|
|
|
|
|
+ done
|
|
|
|
|
+fi
|
|
|
|
|
+echo "------------------------------------"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#------------------------------- CORE ----------------------------------#
|
|
|
|
|
+clear
|
|
|
|
|
+hardware
|
|
|
|
|
+checktool
|
|
|
|
|
+mapping
|
|
|
|
|
+extract
|
|
|
|
|
+checkcur
|
|
|
|
|
+checkhis
|