Files
hpr_website/www/eps/hpr2496/hpr2496_what_pi

198 lines
6.4 KiB
Bash
Executable File

#!/bin/bash -
#===============================================================================
#
# FILE: what_pi
#
# USAGE: ./what_pi
#
# DESCRIPTION: To be run on a RPi. Reports back what model it is. Uses info
# from /proc/cpuinfo and a lookup table from
# http://elinux.org/RPi_HardwareHistory
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
# VERSION: 0.0.2
# CREATED: 2016-06-17 18:17:47
# REVISION: 2017-04-10 14:45:32
#
#===============================================================================
set -o nounset # Treat unset variables as an error
SCRIPT=${0##*/}
#=== FUNCTION ================================================================
# NAME: network_info
# DESCRIPTION: Reports some basic network information in a (hopefully)
# generalised way.
# TODO: Make it deal with multiple interfaces properly
# PARAMETERS: None
# RETURNS: Nothing
#===============================================================================
network_info () {
local d dev mac
echo "Network information:"
printf " %-11s: %s\n" "Hostname" "$(hostname -f)"
printf " %-11s: %s\n" "IP" "$(hostname -I)"
for d in /sys/class/net/*/address; do
dev="${d%/*}"
dev="${dev##*/}"
if [[ $dev != 'lo' ]]; then
mac="$(cat "$d")"
printf " %-11s: %s (%s)\n" "MAC" "$mac" "$dev"
fi
done
}
#=== FUNCTION ================================================================
# NAME: settings_info
# DESCRIPTION: Reports stuff about settings and config file elements
# PARAMETERS: None
# RETURNS: Nothing
#===============================================================================
settings_info () {
local codec
#
# Is the user in the 'video' group?
#
if id -Gn | grep -q 'video'; then
echo "Various configuration and other settings:"
echo "CPU $(vcgencmd measure_temp)"
for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9; do
echo -e "$codec:\t$(vcgencmd codec_enabled $codec)"
done
vcgencmd get_config sdtv_mode
vcgencmd get_config sdtv_aspect
else
echo "Can't run 'vgencmd'; you're not in the 'video' group"
fi
}
#=== FUNCTION ================================================================
# NAME: cleanup_temp
# DESCRIPTION: Cleanup temporary files in case of a keyboard interrupt
# (SIGINT) or a termination signal (SIGTERM) and at script
# exit
# PARAMETERS: * - names of temporary files to delete
# RETURNS: Nothing
#===============================================================================
function cleanup_temp {
for tmp in "$@"; do
[ -e "$tmp" ] && rm --force "$tmp"
done
exit 0
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Are we on a Pi at all?
# TODO: Check this. It works on all my machines, but may not work everywhere
#
model=$(grep -m 1 '^model name' /proc/cpuinfo | cut -f2 -d:)
re="ARMv[0-9]"
if [[ ! $model =~ $re ]]; then
echo "This doesn't seem to be a Raspberry Pi"
exit 1
fi
#
# Make temporary files and set traps to delete them
#
TMP1=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; }
TMP2=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; }
trap 'cleanup_temp $TMP1 $TMP2' SIGHUP SIGINT SIGPIPE SIGTERM EXIT
#
# Create a table of Pi stuff. Copied from http://elinux.org/RPi_HardwareHistory
# using simple cut and paste. The result is a table separated by tabs, and
# this script relies on this fact.
# You will have to refresh this every time a new Pi model is released. This
# version is dated Q1 2017 and includes the Pi Zero W
#
cat > "$TMP1" <<'ENDTABLE'
Revision Release Date Model PCB Revision Memory Notes
Beta Q1 2012 B (Beta) ? 256 MB Beta Board
0002 Q1 2012 B 1.0 256 MB
0003 Q3 2012 B (ECN0001) 1.0 256 MB Fuses mod and D14 removed
0004 Q3 2012 B 2.0 256 MB (Mfg by Sony)
0005 Q4 2012 B 2.0 256 MB (Mfg by Qisda)
0006 Q4 2012 B 2.0 256 MB (Mfg by Egoman)
0007 Q1 2013 A 2.0 256 MB (Mfg by Egoman)
0008 Q1 2013 A 2.0 256 MB (Mfg by Sony)
0009 Q1 2013 A 2.0 256 MB (Mfg by Qisda)
000d Q4 2012 B 2.0 512 MB (Mfg by Egoman)
000e Q4 2012 B 2.0 512 MB (Mfg by Sony)
000f Q4 2012 B 2.0 512 MB (Mfg by Qisda)
0010 Q3 2014 B+ 1.0 512 MB (Mfg by Sony)
0011 Q2 2014 Compute Module 1 1.0 512 MB (Mfg by Sony)
0012 Q4 2014 A+ 1.1 256 MB (Mfg by Sony)
0013 Q1 2015 B+ 1.2 512 MB ?
0014 Q2 2014 Compute Module 1 1.0 512 MB (Mfg by Embest)
0015 ? A+ 1.1 256 MB / 512 MB (Mfg by Embest)
a01040 Unknown 2 Model B 1.0 1 GB (Mfg by Sony)
a01041 Q1 2015 2 Model B 1.1 1 GB (Mfg by Sony)
a21041 Q1 2015 2 Model B 1.1 1 GB (Mfg by Embest)
a22042 Q3 2016 2 Model B (with BCM2837) 1.2 1 GB (Mfg by Embest)
900021 Q3 2016 A+ 1.1 512 MB (Mfg by Sony)
900092 Q4 2015 Zero 1.2 512 MB (Mfg by Sony)
900093 Q2 2016 Zero 1.3 512 MB (Mfg by Sony)
920093 Q4 2016? Zero 1.3 512 MB (Mfg by Embest)
9000C1 Q1 2017 Zero W 1.1 512 MB (Mfg by Sony)
a02082 Q1 2016 3 Model B 1.2 1 GB (Mfg by Sony)
a020a0 Q1 2017 Compute Module 3 (and CM3 Lite) 1.0 1 GB (Mfg by Sony)
a22082 Q1 2016 3 Model B 1.2 1 GB (Mfg by Embest)
a32082 Q4 2016 3 Model B 1.2 1 GB (Mfg by Sony Japan)
ENDTABLE
#
# Grab two values from the /proc/cpuinfo file
#
REV="$(grep '^Revision' /proc/cpuinfo | awk '{print $3}' | sed 's/^1000//')"
SER="$(grep '^Serial' /proc/cpuinfo | awk '{print $3}')"
#
# Make an Awk script which finds the details in the above table and displays
# them
#
cat > "$TMP2" <<'ENDPROG'
tolower($0) ~ rev {
printf "%-13s: %s\n%-13s: %s\n%-13s: %s\n%-13s: %s\n%-13s: %s\n%-13s: %s\n%-13s: %s\n",
"Revision",$1,
"Release date",$2,
"Model",$3,
"PCB Revision",$4,
"Memory",$5,
"Notes",$6,
"Serial no",serial
}
ENDPROG
#
# Run Awk on the table with the above script, passing the revision number as
# a regular expression for searching, and the serial number as a simple
# string.
#
awk -v "rev=^$REV" -v "serial=$SER" -F" *\t *" -f "$TMP2" "$TMP1"
#
# Report various settings and parameters
#
echo
settings_info
#
# Report network information
#
echo
network_info
exit
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21