blob: e8b9aebdeff4a21101a5115a30d61496e2e97493 [file] [log] [blame]
Casey Bowmanad4362b2021-03-03 17:49:28 -08001#!/bin/bash
2# Copyright 2021 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6# Loads script libraries.
7CONTRIB_DIR=$(dirname "$(readlink -f "$0")")
8. "${CONTRIB_DIR}/common.sh" || exit 1
9
10assert_inside_chroot
11
12# Load remote library
13REMOTE_LIB="/home/$USER/trunk/src/scripts"
14. "${REMOTE_LIB}/remote_access.sh" || exit 1
15
16cf_help="Removes the headers from the output."
17
18DEFINE_boolean debug $FLAGS_FALSE "Enables debug logging."
19DEFINE_boolean copy_friendly $FLAGS_FALSE "${cf_help}"
20
21# Parse command line.
22FLAGS "$@" || exit 1
23eval set -- "${FLAGS_ARGV}"
24
25cleanup() {
26 logd "Activated trap card. Exiting..."
27 cleanup_remote_access
28 rm -rf "${TMP}"
29}
30
31# Removing leading and trailing whitespace.
32remove_whitespace() {
33 space_match=${1##*[! ]} # Match prefixed spaces.
34 trimmed=${1%"$space_match"} # Remove prefixed spaces.
35 space_match=${trimmed%%[! ]*} # Match postfixed spaces.
36 trimmed=${trimmed#"$space_match"} # Remove postfixed spaces.
37 printf "$trimmed"
38}
39
40# Generic debug logger.
41logd() {
42 if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then
43 printf "DEBUG: $1\n"
44 fi
45}
46
47# Debug 'start' function for a section type.
48log_status_start() {
49 if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then
50 printf "DEBUG: Getting ${1} information..."
51 fi
52}
53
54# Debug 'end' function for a section type.
55log_status_end() {
56 if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then
57 if [ ! -z "${1}" ]; then
58 printf "Complete!\n"
59 else
60 printf "Failed!\n"
61 fi
62 fi
63}
64
65# Uses remote_sh to pass a command, but acts like a try/fail
66# condition, returning an empty string upon failure.
67try_remote_command() {
68 remote_sh "${1} || printf ''"
69}
70
71main() {
72 trap cleanup EXIT
73
74 TMP=$(mktemp -d /tmp/get_dut_info.XXXX)
75
76 remote_access_init
77
78 log_status_start "Board Name"
79 try_remote_command "grep CHROMEOS_RELEASE_BOARD /etc/lsb-release"
80 if [ ! -z "${REMOTE_OUT}" ]; then
81 BOARD=$(printf "${REMOTE_OUT}" | cut -d '=' -f 2)
82 fi
83 log_status_end "${BOARD}"
84
85 log_status_start "OS Version"
86 command="awk -F = '\$1 ~ /CHROMEOS_RELEASE_DESCRIPTION/ \
87{print \$2}' /etc/lsb-release"
88 try_remote_command "${command}"
89 OS="${REMOTE_OUT}"
90 log_status_end "${OS}"
91
92 log_status_start "Chrome Browser"
93 try_remote_command "/opt/google/chrome/chrome --version"
94 CHROME="${REMOTE_OUT}"
95 log_status_end "${CHROME}"
96
97 log_status_start "Firmware"
98 try_remote_command "crossystem fwid"
99 FW="${REMOTE_OUT}"
100 if [[ -z "$FW" ]]; then
101 command="dmidecode | sed -n '/BIOS Information/,/Handle/p' \
102| grep \"Version\""
103 try_remote_command "${command}"
104 ver="${REMOTE_OUT}"
105 ver=$(remove_whitespace "$ver")
106 FW=$( printf "${ver}" | awk '{print $2}' )
107 fi
108 log_status_end "${FW}"
109
110 log_status_start "EC"
111 try_remote_command "(ectool version 2>&1 | grep 'Build info')"
112 EC=$(printf "${REMOTE_OUT}" | awk '{ print $3 }')
113 log_status_end "${EC}"
114
115 log_status_start "CPU"
116 command="awk -F : '\$1 ~ /model name/ {print \$2}' \
117/proc/cpuinfo | head -1"
118 try_remote_command "${command}"
119 CPU="${REMOTE_OUT}"
120 CPU=$(remove_whitespace "$CPU")
121 log_status_end "${CPU}"
122
123 log_status_start "Kernel"
124 try_remote_command "uname -smr"
125 KERNEL="${REMOTE_OUT}"
126 log_status_end "${KERNEL}"
127
128 log_status_start "Memory (Physical)"
129 try_remote_command "cat /proc/meminfo | grep MemTotal"
130 MEM="${REMOTE_OUT}"
131 MEM=$(printf "$MEM" | awk '{print $2}')
132 if [[ ! -z $MEM ]] && [[ $MEM == [0-9]* ]] && [ $MEM -ne 0 ]; then
133 # Conversion from system kB to manufactuer GB
134 MEM=$(($MEM * 1024 / 1000000000 ))
135 else
136 MEM=""
137 fi
138 log_status_end "${MEM}"
139
140 log_status_start "Memory Channels"
141 try_remote_command "dmidecode -t memory | grep Channel | wc -l"
142 MEM_CHANNELS="${REMOTE_OUT}"
143 log_status_end "${MEM_CHANNELS}"
144
145 log_status_start "Storage"
146 command="lsblk -o PKNAME,MOUNTPOINT \
147| grep \"/mnt/stateful_partition$\""
148 try_remote_command "${command}"
149 storage_type=$(printf "${REMOTE_OUT}" | awk '{print $1}')
150 try_remote_command "lsblk -b --nodeps | grep -w $storage_type"
151 STORAGE=$(printf "${REMOTE_OUT}" | awk '{print $4}')
152 if [[ ! -z "$STORAGE" ]]; then
153 # Conversion from system bytes to manufactuer GB
154 STORAGE=$(($STORAGE * 1024 / 1000000000000 ))
155 fi
156 log_status_end "${STORAGE}"
157
158 log_status_start "Core Number"
159 try_remote_command "nproc --all"
160 CORES="${REMOTE_OUT}"
161 log_status_end "${CORES}"
162
163 log_status_start "Media"
164 try_remote_command "vainfo 2>/dev/null | grep 'Driver version'"
165 MEDIA=$(printf "${REMOTE_OUT}" | awk -F : '{print $3}'| sed 's/^\s//')
166 log_status_end "${MEDIA}"
167
168 log_status_start "Libva"
169 try_remote_command "vainfo 2>/dev/null | grep 'vainfo: VA-API version'"
170 LIBVA=$(printf "${REMOTE_OUT}" | awk -F : '{print $3}'| sed 's/^\s//')
171 log_status_end "${LIBVA}"
172
173 log_status_start "Mesa"
174 try_remote_command "wflinfo -p null -a gles2 2>/dev/null | egrep -o '(Mesa [[:digit:]].*?)\s'"
175 MESA="${REMOTE_OUT}"
176 log_status_end "${MESA}"
177
178 logd "Information gathering complete!"
179
180 mem_message="${MEM:-(unknown) }GB (physical), \
181${MEM_CHANNELS:-(unknown)} channels"
182 if [ "${FLAGS_copy_friendly}" = "${FLAGS_TRUE}" ]; then
183 cat <<EOF
184${BOARD:-(unknown)}
185${OS:-(unknown)}
186${CHROME:-(unknown)}
187${FW:-(unknown)}
188${EC:-(unknown)}
189${CPU:-(unknown)} (${CORES:-(unknown)} cores)
190${KERNEL:-(unknown)}
191${mem_message}
192${STORAGE:-(unknown) }GB
193${MEDIA:-(unknown)}
194${LIBVA:-(unknown)}
195${MESA:-(unknown)}
196EOF
197
198 else
199 cat <<EOF
200 Board: ${BOARD:-(unknown)}
201 OS: ${OS:-(unknown)}
202 Chrome: ${CHROME:-(unknown)}
203 FW: ${FW:-(unknown)}
204 EC: ${EC:-(unknown)}
205 CPU: ${CPU:-(unknown)} (${CORES:-(unknown)} cores)
206 Kernel: ${KERNEL:-(unknown)}
207 Mem: ${mem_message}
208Storage: ${STORAGE:-(unknown) }GB
209 Media: ${MEDIA:-(unknown)}
210 Libva: ${LIBVA:-(unknown)}
211 Mesa: ${MESA:-(unknown)}
212EOF
213 fi
214}
215
216main "$@"