| #!/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" |