Files
Sebastian Czapla bd5158f19e osfv: Extend Audio tests
Signed-off-by: Sebastian Czapla <sebastian.czapla@3mdeb.com>
2025-04-11 12:21:00 +02:00

326 lines
13 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2024 3mdeb <contact@3mdeb.com>
#
# SPDX-License-Identifier: Apache-2.0
# ---Help Function---
show_help() {
echo "Usage: $0 [OPTIONS]"
echo
echo "Options:"
echo " -p Print all collected hardware information."
echo " -h Display this help message."
echo
echo "Example:"
echo " $0 -p # Run the script and print the hardware information."
echo " $0 -h # Show this help message."
}
# Parse command-line arguments
while getopts ":ph" opt; do
case ${opt} in
p )
PRINT=true
;;
h )
show_help
exit 0
;;
\? )
echo "Invalid option: -$OPTARG" 1>&2
show_help
exit 1
;;
: )
echo "Invalid option: -$OPTARG requires an argument" 1>&2
show_help
exit 1
;;
esac
done
# Collect WiFi card information using lspci command
WIFI_CARD_UBUNTU="$(lspci | grep "Network controller:" | awk -F ": " '{print $2}')"
# Collect Webcam information using lsusb command
WEBCAM_UBUNTU="$(lsusb | grep "Cam" | awk '{for (i=7; i<=NF; i++) printf $i" "; print ""}')"
# Collect Bluetooth card information using lsusb command
BLUETOOTH_CARD_UBUNTU="$(lsusb | grep "Bluetooth" | awk '{for (i=7; i<=NF; i++) printf $i" "; print ""}')"
# Collect USB keyboard information using lsusb command
DEVICE_USB_KEYBOARD="$(lsusb | grep -iE "Keyboard|Nano" | awk '{for (i=7; i<=NF; i++) printf $i" "; print ""}')"
# Collect NVMe disk information using lspci command
DEVICE_NVME_DISK="$(lspci | grep "Non-Volatile"| awk -F ": " '{print $2}')"
# Collect eMMC information from sysfs
EMMC_PATH="/sys/class/block/mmcblk0/device/name"
if [ -f "${EMMC_PATH}" ]; then
E_MMC_NAME="$(cat ${EMMC_PATH})"
fi
# Collect LTE card information
LTE_CARDS=$(lsusb | grep -iv 'wired\|hub\|bluetooth\|ethernet\|dock\|camera\|receiver\|audio\|usb3' | awk '{print $NF}')
NMCLI_OUTPUT=$(nmcli | grep -iv '${LTE_CARDS}')
for LTE_CARD in ${LTE_CARDS}; do
MATCHED_LINES=$(echo "${NMCLI_OUTPUT}" | grep "${LTE_CARD}")
done
LTE_CARD=$(echo "${MATCHED_LINES}" | awk -F'"' '{if (NF>2) print $2; else print $0}')
# Function to get the minimum and maximum CPU frequencies
get_cpu_frequencies() {
local min_freq
min_freq=$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq)
local max_freq
max_freq=$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)
echo $((min_freq / 1000)) $((max_freq / 1000))
}
# Function to get the initial CPU frequency
get_initial_cpu_frequency() {
if [ -f /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq ]; then
local initial_freq
initial_freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq)
echo "$((initial_freq / 1000))"
elif command -v cpufreq-info &> /dev/null; then
local initial_freq
initial_freq=$(cpufreq-info --min | awk '{print $NF}')
echo "$((initial_freq / 1000))"
else
local initial_freq
initial_freq=$(sudo lshw -C processor | grep "capacity" | head -1 | awk '{print $2}')
echo "$initial_freq"
fi
}
# Function to get the platform CPU speed
get_platform_cpu_speed() {
local cpu_speed
cpu_speed=$(lscpu | grep "CPU max MHz:" | awk '{print $4}')
if [ -z "$cpu_speed" ]; then
echo "No data"
return 1
fi
local cpu_speed_ghz
cpu_speed_ghz=$(awk -v speed="$cpu_speed" 'BEGIN {printf "%.2f", speed / 1000}')
echo "$cpu_speed_ghz"
}
# Function to get RAM information
get_ram_info() {
sudo dmidecode --type memory | awk -F": " '
/Speed:/ {
match($2, /[0-9]+/);
speed = substr($2, RSTART, RLENGTH)
}
/Size:/ {
match($2, /[0-9]+/);
size = substr($2, RSTART, RLENGTH);
size_mb = size * 1024
}
END { print speed, size_mb }
'
}
# Collecting CPU information
CPU=$(grep -m 1 "model name" /proc/cpuinfo | awk -F": " '{print $2}')
DEF_CORES_PER_SOCKET=$(lscpu | grep "Core(s) per socket:" | awk '{print $4}')
DEF_THREADS_PER_CORE=$(lscpu | grep "Thread(s) per core:" | awk '{print $4}')
DEF_THREADS_TOTAL=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
DEF_SOCKETS=$(lscpu | grep "Socket(s):" | awk '{print $2}')
DEF_ONLINE_CPU="0-$((DEF_THREADS_TOTAL - 1))"
INITIAL_CPU_FREQUENCY=$(get_initial_cpu_frequency)
PLATFORM_CPU_SPEED=$(get_platform_cpu_speed)
read CPU_MIN_FREQUENCY CPU_MAX_FREQUENCY < <(get_cpu_frequencies)
read PLATFORM_RAM_SPEED PLATFORM_RAM_SIZE < <(get_ram_info)
# Collecting Manufacturer information
DMIDECODE_MANUFACTURER=$(sudo dmidecode -t baseboard | grep "Manufacturer:" | awk -F": " '{print $2}')
DMIDECODE_SERIAL_NUMBER=$(sudo dmidecode -t baseboard | grep "Serial Number:" | awk -F": " '{print $2}')
DMIDECODE_PRODUCT_NAME=$(sudo dmidecode -t baseboard | grep "Product Name:" | awk -F": " '{print $2}')
DMIDECODE_FAMILY=$(sudo dmidecode -t system | grep Family | awk -F ":" '{print $2}')
DMIDECODE_TYPE=$(sudo dmidecode -t chassis | grep Type | awk -F ":" '{print $2}')
# cbmem and TPM detection variables
CBMEM_BINARY_PATH="/usr/local/bin/cbmem"
CBMEM_EXPECTED_HASH="169c5a5a63699cb37cf08d1eff83e59f146ffa98cf283145f27adecc081ac3f6"
CBMEM_URL="https://cloud.3mdeb.com/index.php/s/C6LJMi4bWz3wzR9/download"
TPM_VER_PATH="/sys/class/tpm/tpm0/tpm_version_major"
ensure_valid_cbmem() {
if [[ -f "$CBMEM_BINARY_PATH" ]]; then
local current_hash
current_hash=$(sha256sum "$CBMEM_BINARY_PATH" | awk '{print $1}')
if [[ "$current_hash" == "$CBMEM_EXPECTED_HASH" ]]; then
sudo chmod 777 "$CBMEM_BINARY_PATH"
return 0
fi
else
echo "Fetching cbmem from cloud..."
sudo curl -o "$CBMEM_BINARY_PATH" "$CBMEM_URL"
if [[ $? -eq 0 ]]; then
echo "Success!"
sudo chmod 777 "$CBMEM_BINARY_PATH"
else
echo "Failed..."
return 1
fi
fi
}
ensure_valid_cbmem
if [ -f ${TPM_VER_PATH} ]; then
TPM_SUPPORTED_VERSION=$(cat ${TPM_VER_PATH})
else
TPM_SUPPORTED_VERSION=\$\{None\}
fi
if [ -f ${CBMEM_BINARY_PATH} ]; then
TPM_EXPECTED_CHIP=$(sudo ${CBMEM_BINARY_PATH} -1 | grep "Found TPM" | awk 'NR==1{print $6}');
else
TPM_EXPECTED_CHIP="Unknown"
fi
# Print collected information if -p is provided
if [ "$PRINT" = true ]; then
echo "-----------------------WiFi-------------------------"
echo "\${WIFI_CARD_UBUNTU}= ${WIFI_CARD_UBUNTU}"
echo
echo "-----------------------Webcam-----------------------"
echo "\${WEBCAM_UBUNTU}= ${WEBCAM_UBUNTU}"
echo
echo "-----------------------Bluetooth--------------------"
echo "\${BLUETOOTH_CARD_UBUNTU}= ${BLUETOOTH_CARD_UBUNTU}"
echo
echo "-----------------------Keyboard---------------------"
echo "\${DEVICE_USB_KEYBOARD}= ${DEVICE_USB_KEYBOARD}"
echo
echo "-----------------------NVMe Disk--------------------"
echo "\${DEVICE_NVME_DISK}= ${DEVICE_NVME_DISK}"
echo
echo "-----------------------eMMC-------------------------"
echo "\${E_MMC_NAME}= ${E_MMC_NAME}"
echo
echo "-----------------------LTE Card---------------------"
echo "\${LTE_CARD}= ${LTE_CARD}"
echo
echo "-----------------------CPU---------------------------"
echo "\${CPU}= ${CPU}"
echo "\${INITIAL_CPU_FREQUENCY}= ${INITIAL_CPU_FREQUENCY} MHz"
echo "\${PLATFORM_CPU_SPEED}= ${PLATFORM_CPU_SPEED} GHz"
echo "\${CPU_MIN_FREQUENCY}= ${CPU_MIN_FREQUENCY} MHz"
echo "\${CPU_MAX_FREQUENCY}= ${CPU_MAX_FREQUENCY} MHz"
echo "\${PLATFORM_RAM_SPEED}= ${PLATFORM_RAM_SPEED} MHz"
echo "\${PLATFORM_RAM_SIZE}= ${PLATFORM_RAM_SIZE} MB"
echo
echo "-----------------------DMIDECODE---------------------"
echo "\${DMIDECODE_MANUFACTURER}= ${DMIDECODE_MANUFACTURER}"
echo "\${DMIDECODE_SERIAL_NUMBER}= ${DMIDECODE_SERIAL_NUMBER}"
echo "\${DMIDECODE_PRODUCT_NAME}= ${DMIDECODE_PRODUCT_NAME}"
echo "\${DMIDECODE_FAMILY}= ${DMIDECODE_FAMILY}"
echo "\${DMIDECODE_TYPE}= ${DMIDECODE_TYPE}"
echo
echo "-----------------------Defaults----------------------"
echo "\${DEF_THREADS_TOTAL}= ${DEF_THREADS_TOTAL}"
echo "\${DEF_THREADS_PER_CORE}= ${DEF_THREADS_PER_CORE}"
echo "\${DEF_CORES_PER_SOCKET}= ${DEF_CORES_PER_SOCKET}"
echo "\${DEF_SOCKETS}= ${DEF_SOCKETS}"
echo "\${DEF_ONLINE_CPU}= ${DEF_ONLINE_CPU}"
fi
# Create Robot Framework file
output_dir="."
if [[ -n "$DMIDECODE_MANUFACTURER" && -n "$DMIDECODE_PRODUCT_NAME" ]]; then
output_file="${DMIDECODE_MANUFACTURER}-${DMIDECODE_PRODUCT_NAME}.robot"
else
output_file="sample-config.robot"
fi
get_unique_filename() {
local file=$1
local base_name=${file%.*}
local extension=${file##*.}
local counter=1
while [[ -e "${base_name}.${extension}" ]]; do
base_name="${file%.*}-${counter}"
((counter++))
done
echo "${base_name}.${extension}"
}
output_file=$(get_unique_filename "${output_dir}/${output_file}")
# Check if default.robot exists
default_robot_file="../platform-configs/include/default.robot"
if [[ -f "$default_robot_file" ]]; then
default_robot_content=$(sed '1,6d' "$default_robot_file")
else
default_robot_content="" # Set empty content if file not found
fi
{
echo "*** Variables ***"
echo
echo "# Automatically found variables"
[[ -n "$INITIAL_CPU_FREQUENCY" ]] && echo "\${INITIAL_CPU_FREQUENCY}= $INITIAL_CPU_FREQUENCY"
[[ -n "$PLATFORM_CPU_SPEED" ]] && echo "\${PLATFORM_CPU_SPEED}= $PLATFORM_CPU_SPEED"
[[ -n "$CPU_MIN_FREQUENCY" ]] && echo "\${CPU_MIN_FREQUENCY}= $CPU_MIN_FREQUENCY"
[[ -n "$CPU_MAX_FREQUENCY" ]] && echo "\${CPU_MAX_FREQUENCY}= $CPU_MAX_FREQUENCY"
[[ -n "$PLATFORM_RAM_SPEED" ]] && echo "\${PLATFORM_RAM_SPEED}= $PLATFORM_RAM_SPEED"
[[ -n "$PLATFORM_RAM_SIZE" ]] && echo "\${PLATFORM_RAM_SIZE}= $PLATFORM_RAM_SIZE"
[[ -n "$WIFI_CARD_UBUNTU" ]] && echo "\${WIFI_CARD_UBUNTU}= $WIFI_CARD_UBUNTU"
[[ -n "$WEBCAM_UBUNTU" ]] && echo "\${WEBCAM_UBUNTU}= $WEBCAM_UBUNTU"
[[ -n "$BLUETOOTH_CARD_UBUNTU" ]] && echo "\${BLUETOOTH_CARD_UBUNTU}= $BLUETOOTH_CARD_UBUNTU"
[[ -n "$DEVICE_USB_KEYBOARD" ]] && echo "\${DEVICE_USB_KEYBOARD}= $DEVICE_USB_KEYBOARD"
[[ -n "$DEVICE_NVME_DISK" ]] && echo "\${DEVICE_NVME_DISK}= $DEVICE_NVME_DISK"
[[ -n "$E_MMC_NAME" ]] && echo "\${E_MMC_NAME}= $E_MMC_NAME"
[[ -n "$CPU" ]] && echo "\${CPU}= $CPU"
[[ -n "$DMIDECODE_MANUFACTURER" ]] && echo "\${DMIDECODE_MANUFACTURER}= $DMIDECODE_MANUFACTURER"
[[ -n "$DMIDECODE_SERIAL_NUMBER" ]] && echo "\${DMIDECODE_SERIAL_NUMBER}= $DMIDECODE_SERIAL_NUMBER"
[[ -n "$DMIDECODE_PRODUCT_NAME" ]] && echo "\${DMIDECODE_PRODUCT_NAME}= $DMIDECODE_PRODUCT_NAME"
[[ -n "$DMIDECODE_FAMILY" ]] && echo "\${DMIDECODE_FAMILY}= $DMIDECODE_FAMILY"
[[ -n "$DMIDECODE_TYPE" ]] && echo "\${DMIDECODE_TYPE}= $DMIDECODE_TYPE"
[[ -n "$DEF_THREADS_TOTAL" ]] && echo "\${DEF_THREADS_TOTAL}= $DEF_THREADS_TOTAL"
[[ -n "$DEF_THREADS_PER_CORE" ]] && echo "\${DEF_THREADS_PER_CORE}= $DEF_THREADS_PER_CORE"
[[ -n "$DEF_CORES_PER_SOCKET" ]] && echo "\${DEF_CORES_PER_SOCKET}= $DEF_CORES_PER_SOCKET"
[[ -n "$DEF_SOCKETS" ]] && echo "\${DEF_SOCKETS}= $DEF_SOCKETS"
[[ -n "$DEF_ONLINE_CPU" ]] && echo "\${DEF_ONLINE_CPU}= $DEF_ONLINE_CPU"
[[ -n "$TPM_SUPPORTED_VERSION" ]] && echo "\${TPM_SUPPORTED_VERSION}= $TPM_SUPPORTED_VERSION"
[[ -n "$TPM_EXPECTED_CHIP" ]] && echo "\${TPM_EXPECTED_CHIP}= $TPM_EXPECTED_CHIP"
echo
echo "# Default variables"
awk -v keys="\
INITIAL_CPU_FREQUENCY PLATFORM_CPU_SPEED CPU_MIN_FREQUENCY CPU_MAX_FREQUENCY \
PLATFORM_RAM_SPEED PLATFORM_RAM_SIZE WIFI_CARD_UBUNTU WEBCAM_UBUNTU \
BLUETOOTH_CARD_UBUNTU DEVICE_USB_KEYBOARD DEVICE_NVME_DISK E_MMC_NAME CPU \
DMIDECODE_MANUFACTURER DMIDECODE_SERIAL_NUMBER DMIDECODE_PRODUCT_NAME \
DMIDECODE_FAMILY DMIDECODE_TYPE \
DEF_THREADS_TOTAL DEF_THREADS_PER_CORE DEF_CORES_PER_SOCKET DEF_SOCKETS \
DEF_ONLINE_CPU" \
'
BEGIN { split(keys, arr); for (i in arr) exclude[arr[i]] = 1 }
!/^(\$\{.*)=/ { print; next }
{
split($1, a, "}")
if (!(a[1] in exclude)) print
}' <<< "$default_robot_content"
} > "$output_file"
echo "Data has been written to ${output_file}"