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