#!/bin/sh # board-info.sh 1.0.0 - AppGoBox - MIT License # Read-only: prints board model, SoC compatible strings, OS, kernel, boot device, # storage, memory and temperature. No network access, writes nothing, needs no root. set -u say() { printf '%-14s %s\n' "$1" "$2"; } dt_read() { [ -r "$1" ] && tr '\000' ' ' < "$1" | sed 's/ *$//'; } dt=/proc/device-tree [ -d "$dt" ] || dt=/sys/firmware/devicetree/base model=$(dt_read "$dt/model") say "Model:" "${model:-unknown (no device tree; x86 PC or VM?)}" compat=$(dt_read "$dt/compatible") [ -n "$compat" ] && say "Compatible:" "$compat" if [ -r /etc/os-release ]; then os=$(. /etc/os-release 2>/dev/null; printf '%s' "${PRETTY_NAME:-unknown}") say "OS:" "$os" fi say "Kernel:" "$(uname -srm)" root=$(awk '$2 == "/" { print $1 }' /proc/mounts 2>/dev/null | tail -n 1) say "Root on:" "${root:-unknown}" for t in /sys/block/mmcblk*/device/type; do [ -r "$t" ] || continue dev=${t#/sys/block/}; dev=${dev%%/*} say "$dev:" "$(cat "$t") (SD = memory card, MMC = eMMC)" done if command -v lsblk >/dev/null 2>&1; then printf '\nStorage:\n' lsblk -d -o NAME,SIZE,TYPE,TRAN,MODEL 2>/dev/null fi mem=$(awk '/^MemTotal:/ { printf "%.0f MiB", $2 / 1024 }' /proc/meminfo 2>/dev/null) printf '\n'; say "Memory:" "${mem:-unknown}" for z in /sys/class/thermal/thermal_zone*/temp; do [ -r "$z" ] || continue name=$(cat "${z%/temp}/type" 2>/dev/null) say "Temp:" "$(awk '{ printf "%.1f C", $1 / 1000 }' "$z") ${name:+($name)}" done