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