TERES/SOFTWARE/A64-TERES/scripts/platform-scripts/a64_health.sh
Dimitar Gamishev 17f94ebf3a stuff
2017-10-13 14:07:48 +03:00

143 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
#
# Simple script to print some health data for Pine64. Some details were
# shamelessly stolen from http://pastebin.com/bSTYCQ5u. Thanks tkaiser.
#
# Run this script like `sudo watch -n2 pine64_health.sh` for a 2 sec update
# or call `sudo pine64_health.sh -w` to get updates every 0.5 seconds (default).
#
set -e
if [ "$(id -u)" -ne "0" ]; then
echo "This script requires root."
exit 1
fi
GPU_ADDR="1c40000.gpu"
print() {
printf "%-15s: %s %s\n" "$1" "$2 $3" "$4"
}
cpu_frequency() {
local cur=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq)
local mhz=$(awk "BEGIN {printf \"%.2f\",$cur/1000}")
print "CPU freq" $mhz "MHz"
}
scaling_govenor() {
local gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
print "Governor" $gov
}
cpu_count() {
local cpus=$(grep -c processor /proc/cpuinfo)
print "CPU count" $cpus
}
vcore_voltage() {
local uv=$(cat /sys/devices/platform/axp81x_board/axp-regulator.41/regulator/regulator.2/microvolts)
local v=$(awk "BEGIN {printf \"%.2f\",$uv/1000000}")
print "Core voltage" $v "V"
}
soc_temp() {
local temp=$(cat /sys/devices/virtual/thermal/thermal_zone0/temp)
print "SOC Temp" $temp "C"
}
pmic_temp() {
local pmictemp=$(cat /sys/class/axppower/ic_temp 2>/dev/null)
if [ "X$pmictemp" != "X" ]; then
print "PMIC Temp" $pmictemp "C"
fi
}
bat_capacity() {
local bat_capacity=$(cat /sys/class/power_supply/battery/capacity 2>/dev/null)
if [ "X$bat_capacity" != "X" ]; then
print "Battery" $bat_capacity '%'
fi
}
cooling_state() {
local state=$(cat /sys/devices/virtual/thermal/cooling_device0/cur_state)
print "Cooling state" $state
}
cooling_limit() {
local budget=$(ls -1 -d /sys/devices/soc.0/cpu_budget_cool.* |head -n1)
local limit=$(cat $budget/roomage)
print "Cooling limit" $limit
}
gpu_frequency() {
if [ ! -e /sys/devices/$GPU_ADDR/dvfs/manual ]; then
return
fi
local cur=$(cat /sys/devices/$GPU_ADDR/dvfs/manual|awk '{print $1}')
local mhz=$(awk "BEGIN {printf \"%.2f\",$cur}")
print "GPU freq" $mhz MHz
}
gpu_temp() {
if [ ! -e /sys/devices/$GPU_ADDR/dvfs/tempctrl ]; then
return
fi
local temp=$(cat /sys/devices/$GPU_ADDR/dvfs/tempctrl|awk '{print $6}')
print "GPU Temp" $temp "C"
}
gpu_voltage() {
if [ ! -e /sys/devices/$GPU_ADDR/dvfs/voltage ]; then
return
fi
local mv=$(cat /sys/devices/$GPU_ADDR/dvfs/voltage|awk '{print $1}')
local v=$(awk "BEGIN {printf \"%.2f\",$mv/1000}")
print "GPU voltage" $v "V"
}
all() {
cpu_frequency
gpu_frequency
cpu_count
scaling_govenor
vcore_voltage
gpu_voltage
soc_temp
gpu_temp
pmic_temp
cooling_state
cooling_limit
bat_capacity
}
usage() {
echo "Usage: $0 [-w] [-h]"
}
WATCH=""
for i in "$@"; do
case $i in
-w)
WATCH=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
usage
exit 1
;;
esac
done
if [ -n "$WATCH" ]; then
exec watch -n0.5 "$0"
else
all
fi