#!/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 " echo "machine_name: A string identifying the hardware" echo echo "This will output a file named 'system_info..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"