blob: cc52b6c439dae8ee35d33631551ed043fb75a294 [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Script run from a DUT to report broad summary of characteristics and state
# Example usage: ssh $DUT <device_summary.sh
keyval() {
# Pads keys with whitespace to align output
KEY_FIELD_LENGTH=20
printf "%-${KEY_FIELD_LENGTH}s: %s\n" "$1" "$2"
}
usage-error() {
2>&1 echo "This device doesn't appear to be a ChromeOS DUT."
2>&1 echo "Run this script on the DUT, not on the host."
2>&1 echo "To execute remotely, try 'ssh \$DUT <${0}'"
exit 1
}
# Detect host machine inside chroot
if [ -f /etc/cros_chroot_version ]; then
usage-error
fi
HWID="$(crossystem hwid)"
keyval "HWID" "${HWID}"
SERIAL="$(vpd -g serial_number)"
keyval "Serial" "${SERIAL}"
echo
echo "#Software"
BOARD="$(grep CHROMEOS_RELEASE_BOARD </etc/lsb-release)"
# Detect host machine outside chroot
if [ -z "${BOARD}" ]; then
usage-error
fi
keyval "Board" "${BOARD:23}"
MODEL="$(cros_config / name)"
keyval "Model" "${MODEL}"
OS="$(grep CHROMEOS_RELEASE_VERSION </etc/lsb-release)"
MILESTONE="$(grep CHROMEOS_RELEASE_CHROME_MILESTONE </etc/lsb-release)"
keyval "ChromeOS" "${OS:25} (M${MILESTONE:34})"
BROWSER="$(/opt/google/chrome/chrome --version)"
keyval "Chrome Browser" "${BROWSER}"
KERNEL="$(uname -r)"
keyval "Kernel" "${KERNEL}"
FW_ACTIVE="$(crossystem fwid)"
keyval "Firmware (active)" "${FW_ACTIVE}"
FW_RO="$(crossystem ro_fwid)"
keyval "Firmware (read-only)" "${FW_RO}"
EC="$(ectool version 2>&1 | grep 'Build info' | awk '{ print $3 }')"
keyval "EC" "${EC}"
# Features that might vary by SKU
echo
echo "#Hardware characteristics"
SKU= # appease shellcheck
eval "$(crosid)" # sets SKU
keyval "Firmware SKU ID" "${SKU}"
CPU_MODEL="$(grep "^model name" /proc/cpuinfo | head -n1)"
keyval "CPU" "${CPU_MODEL:13}"
CORES="$(nproc --all)"
keyval "CPU cores" "${CORES}"
MEM_KB="$(grep '^MemTotal:' /proc/meminfo | awk '{ print $2 }')"
MEM_CHANNELS="$(dmidecode -t memory | grep Locator | grep -c Channel)"
keyval "Memory" "$((MEM_KB / 1024))M, ${MEM_CHANNELS} channels"
# Heuristic - storage size based on largest lsblk output
STORAGE="$(lsblk -x SIZE -o SIZE | tail -n1)"
keyval "Storage" "${STORAGE}"
# Drivers
echo
echo "#Drivers"
MEDIA="$(vainfo 2>/dev/null | grep 'Driver version' \
| awk -F : '{ print $3 }' | sed 's/^\s//')"
keyval "Media" "${MEDIA}"
LIBVA="$(vainfo 2>/dev/null | grep 'vainfo: VA-API version' \
| awk -F : '{ print $3 }' | sed 's/^\s//')"
keyval "VA API" "${LIBVA}"
MESA="$(wflinfo -p null -a gles2 2>/dev/null | grep -E -o 'Mesa (\.?[[:digit:]]+)*')"
keyval "Mesa" "${MESA}"