blob: 806d90ad8754846ca00cee825d1e0cca8ab20461 [file] [log] [blame]
#!/usr/bin/env bash
# Copyright 2017 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
# Dump information about this host that may help with development efforts.
set -u -e
LSPCI_FILE_PREFIX="lspci"
LSUSB_FILE_PREFIX="lsusb"
CPUID_FILE_PREFIX="cpuid"
CPUINFO_FILE="cpuinfo.txt"
ACPI_FILE="acpidump"
MSR_FILE="msr.txt"
# If this is non-zero, unload the msr kmod when exiting
UNLOAD_MSR_MOD=0
function print_usage() {
echo "Usage: $0 <machine_name>"
echo "machine_name: A string identifying the hardware"
echo
echo "This will output a file named 'system_info.<machine_name>.tar.bz2'"
}
function check_utility() {
if ! which "$1" &> /dev/null; then
echo "Please install '$1' (Ubuntu package '$2')"
exit
fi
}
function dump_pci() {
echo "Dumping PCI..."
sudo lspci -v > "$DIR/${LSPCI_FILE_PREFIX}-v.txt"
sudo lspci -vv > "$DIR/${LSPCI_FILE_PREFIX}-vv.txt"
sudo lspci -n > "$DIR/${LSPCI_FILE_PREFIX}-n.txt"
}
function dump_usb() {
echo "Dumping USB..."
sudo lsusb -t > "$DIR/${LSUSB_FILE_PREFIX}-t.txt"
sudo lsusb -v > "$DIR/${LSUSB_FILE_PREFIX}-v.txt"
}
function dump_acpi() {
echo "Dumping ACPI..."
sudo acpidump -o "$DIR/${ACPI_FILE}"
}
function dump_cpuinfo() {
echo "Dumping CPU info..."
cat /proc/cpuinfo > "$DIR/${CPUINFO_FILE}"
}
function dump_cpuid() {
echo "Dumping CPUID tables..."
cpuid > "$DIR/${CPUID_FILE_PREFIX}.txt"
cpuid -r > "$DIR/${CPUID_FILE_PREFIX}.raw"
}
function dump_msrs() {
if ! lsmod | grep "^msr " &> /dev/null; then
UNLOAD_MSR_MOD=1
echo "Loading MSR kmod..."
sudo modprobe msr
fi
echo "Dumping useful MSRs..."
for msr in 480 481 482 483 484 485 486 487 488 489 \
48a 48b 48c 48d 48e 48f 490 491; do
(echo -n "$msr: "; sudo rdmsr -0 "0x$msr" 2>/dev/null || echo unavailable) >> "$DIR/$MSR_FILE"
done
}
if [ $# -lt 1 ]; then
print_usage
exit 1
fi
MACHINE_NAME="$1"
BUNDLE_DIR="system_info.${MACHINE_NAME}"
BUNDLE_TAR="${BUNDLE_DIR}.tar.bz2"
if [ -e "$BUNDLE_TAR" ]; then
echo "$BUNDLE_TAR already exists. Please delete before running."
exit 1
fi
check_utility lspci pciutils
check_utility lsusb usbutils
check_utility acpidump acpica-tools
check_utility cpuid cpuid
check_utility rdmsr msr-tools
TMPDIR="$(mktemp -d)"
function on_exit() {
rm -rf "$TMPDIR"
if [ "$UNLOAD_MSR_MOD" -ne 0 ]; then
echo "Unloading MSR kmod..."
sudo modprobe -r msr || echo "Failed to unload msr kmod!"
fi
}
trap on_exit EXIT
DIR="$TMPDIR/${BUNDLE_DIR}"
mkdir "$DIR"
dump_pci
dump_usb
dump_acpi
dump_cpuinfo
dump_cpuid
dump_msrs
tar -C "$TMPDIR" -cjf "$BUNDLE_TAR" "$BUNDLE_DIR"
echo "Finished building $BUNDLE_TAR"