更新 audio_topology/collect_chromeos_audio_topology.sh

This commit is contained in:
2026-02-14 03:09:56 +00:00
parent 43be2cfce6
commit 87e034d23e

View File

@@ -1,22 +1,60 @@
#!/bin/bash #!/bin/bash
# #
# Chromebox 10 代 - 原生 ChromeOS 音频硬件拓扑收集脚本 # Chromebox 10 代 - 原生 ChromeOS 音频硬件拓扑收集脚本(增强版)
# 用于 C1c 任务:在原生 ChromeOS 下收集硬件拓扑,供与 Coreboot+Linux/Windows 对比 # 用于 C1c 任务:在原生 ChromeOS 下收集硬件拓扑,供与 Coreboot+Linux/Windows 对比
# #
# 用法(在 ChromeOS 上): # 用法(在 ChromeOS 上):
# 1. 打开 crosh浏览器按 Ctrl+Alt+T # 1. 打开 crosh浏览器按 Ctrl+Alt+T
# 2. 输入 shell 进入 bash # 2. 输入 shell 进入 bash(如果提示符是 crosh>,输入 shell 后回车)
# 3. 将本脚本传到设备后运行,或把下面整段复制粘贴到 shell 中执行 # 3. 将本脚本保存到 Downloads 目录(通常路径为 /home/user/xxxxxxxx/MyFiles/Downloads/
# 4. 在 shell 中执行bash 脚本文件名.sh
# 5. 执行完成后,在同目录生成 audio_topology_chromeos_*.txt 文件
# #
# 输出:默认写入 /tmp/audio_topology_chromeos_$(hostname)_$(date).txt # 示例:
# 请用 文件 应用打开 /tmp 复制到下载目录,或 cat 该文件复制内容到电脑 # Welcome to crosh, the ChromeOS developer shell.
# If you got here by mistake, don't panic! Just close this tab and carry on.
# Type 'help' for a list of commands.
# If you want to customize the look/behavior, you can use the options page.
# Load it by using the Ctrl-Shift-P keyboard shortcut.
# crosh> shell
# Sudo commands will not succeed by default.
# If you want to use sudo commands, use the VT-2 shell
# (Ctrl-Alt-{F2/Right arrow/Refresh}) or build the image with the
# login_enable_crosh_sudo USE flag:
# $ USE=login_enable_crosh_sudo emerge-$BOARD chromeos-login
# or
# $ USE=login_enable_crosh_sudo cros build-packages --board=$BOARD
# chronos@kaisa-rev4 / $ cd /home/user/
# chronos@kaisa-rev4 /home/user $ ls
# 214dee0ea6dfb3392dcd2f8a1e3299338445715b
# chronos@kaisa-rev4 /home/user $ cd 214dee0ea6dfb3392dcd2f8a1e3299338445715b/MyFiles/Downloads/
# chronos@kaisa-rev4 /home/user/214dee0ea6dfb3392dcd2f8a1e3299338445715b/MyFiles/Downloads $ bash collect_chromeos_audio_topology.sh
# #
# 注意ChromeOS 使用 CRAS无 PulseAudio部分信息需在浏览器打开 chrome://system # 输出文件位置:
# 在「audio」一节可复制粘贴到本输出文件末尾作为补充 # 脚本所在目录(通常是 /home/user/xxxxxxxx/MyFiles/Downloads/
# 文件名audio_topology_chromeos_$(hostname)_$(date).txt
#
# 查看结果:
# cat audio_topology_chromeos_*.txt # 直接查看
# 或用 ChromeOS 的文件应用打开 Downloads 目录找到该文件
#
# 注意:
# - ChromeOS 使用 CRAS 音频服务器,无 PulseAudio
# - 部分信息需在浏览器打开 chrome://system找到「audio」一节点击 Expand
# - 将展开的内容复制粘贴到输出文件末尾的指定位置
# - 脚本需要 bash如果提示 bash 不存在,用 sh 执行即可
set -e set -e
OUTPUT_DIR="${OUTPUT_DIR:-/tmp}" # 获取脚本所在目录(通常是 Downloads
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OUTPUT_DIR="${OUTPUT_DIR:-$SCRIPT_DIR}"
OUTPUT="${1:-${OUTPUT_DIR}/audio_topology_chromeos_$(hostname)_$(date +%Y%m%d_%H%M%S).txt}" OUTPUT="${1:-${OUTPUT_DIR}/audio_topology_chromeos_$(hostname)_$(date +%Y%m%d_%H%M%S).txt}"
log() { echo "[$(date +%H:%M:%S)] $*"; } log() { echo "[$(date +%H:%M:%S)] $*"; }
@@ -39,11 +77,15 @@ run_cmd() {
log "Collecting ChromeOS audio topology..." log "Collecting ChromeOS audio topology..."
log "Output: $OUTPUT" log "Output: $OUTPUT"
log "Script directory: $SCRIPT_DIR"
log ""
log "提示:文件生成后可以用 cat $OUTPUT 查看,或在文件管理器 Downloads 目录中找到"
: > "$OUTPUT" : > "$OUTPUT"
echo "# Chromebox 10 - ChromeOS (native) audio topology" >> "$OUTPUT" echo "# Chromebox 10 - ChromeOS (native) audio topology (Enhanced Collection)" >> "$OUTPUT"
echo "# Collected: $(date -Iseconds 2>/dev/null || date)" >> "$OUTPUT" echo "# Collected: $(date -Iseconds 2>/dev/null || date)" >> "$OUTPUT"
echo "# Host: $(hostname)" >> "$OUTPUT" echo "# Host: $(hostname)" >> "$OUTPUT"
echo "# Script directory: $SCRIPT_DIR" >> "$OUTPUT"
echo "# Note: Add content from chrome://system -> audio section manually if needed." >> "$OUTPUT" echo "# Note: Add content from chrome://system -> audio section manually if needed." >> "$OUTPUT"
echo "" >> "$OUTPUT" echo "" >> "$OUTPUT"
@@ -51,11 +93,14 @@ echo "" >> "$OUTPUT"
section "System" section "System"
run_cmd "uname -a" uname -a run_cmd "uname -a" uname -a
run_cmd "Release (if exists)" cat /etc/lsb-release 2>/dev/null || true run_cmd "Release (if exists)" cat /etc/lsb-release 2>/dev/null || true
run_cmd "CPU Info" cat /proc/cpuinfo | grep -E "model name|processor" | head -10 2>/dev/null || true
run_cmd "Memory Info" cat /proc/meminfo | grep -E "MemTotal|MemFree" 2>/dev/null || true
# --- ALSA (kernel layer, CRAS sits on top) --- # --- ALSA (kernel layer, CRAS sits on top) ---
section "ALSA /proc/asound" section "ALSA /proc/asound"
run_cmd "cat /proc/asound/cards" cat /proc/asound/cards 2>/dev/null || echo "(no /proc/asound/cards)" >> "$OUTPUT" run_cmd "cat /proc/asound/cards" cat /proc/asound/cards 2>/dev/null || echo "(no /proc/asound/cards)" >> "$OUTPUT"
run_cmd "cat /proc/asound/pcm" cat /proc/asound/pcm 2>/dev/null || true run_cmd "cat /proc/asound/pcm" cat /proc/asound/pcm 2>/dev/null || true
run_cmd "cat /proc/asound/version" cat /proc/asound/version 2>/dev/null || true
run_cmd "ls -la /proc/asound" ls -la /proc/asound 2>/dev/null || true run_cmd "ls -la /proc/asound" ls -la /proc/asound 2>/dev/null || true
for card_dir in /proc/asound/card[0-9]*; do for card_dir in /proc/asound/card[0-9]*; do
@@ -91,27 +136,184 @@ done
section "/sys/class/sound" section "/sys/class/sound"
run_cmd "ls -la /sys/class/sound" ls -la /sys/class/sound 2>/dev/null || true run_cmd "ls -la /sys/class/sound" ls -la /sys/class/sound 2>/dev/null || true
# 更详细的sysfs信息
section "Sound device sysfs details"
for sound_dev in /sys/class/sound/card*; do
[ -d "$sound_dev" ] || continue
echo "# $sound_dev:" >> "$OUTPUT"
echo '```' >> "$OUTPUT"
ls -la "$sound_dev/" 2>/dev/null >> "$OUTPUT" || true
echo '```' >> "$OUTPUT"
done
# --- PCI (if available) --- # --- PCI (if available) ---
section "PCI audio (if lspci exists)" section "PCI audio (if lspci exists)"
if command -v lspci &>/dev/null; then if command -v lspci &>/dev/null; then
run_cmd "lspci -nn | grep -i audio" bash -c "lspci -nn | grep -i audio || echo '(none)'" run_cmd "lspci -nn | grep -i audio" bash -c "lspci -nn | grep -i audio || echo '(none)'"
run_cmd "lspci -v -s $(lspci | grep -i audio | cut -d' ' -f1)" bash -c "lspci -v -s $(lspci | grep -i audio | head -1 | cut -d' ' -f1) 2>/dev/null || true"
else else
echo "# lspci not available on this ChromeOS image" >> "$OUTPUT" echo "# lspci not available on this ChromeOS image" >> "$OUTPUT"
echo "" >> "$OUTPUT" echo "" >> "$OUTPUT"
fi fi
# --- 新增: SOF 固件和拓扑信息 ---
section "SOF Firmware and Topology"
run_cmd "SOF firmware directory" ls -la /lib/firmware/intel/sof/ 2>/dev/null || echo "# SOF firmware directory not found" >> "$OUTPUT"
run_cmd "SOF topology directory" ls -la /lib/firmware/intel/sof-tplg/ 2>/dev/null || echo "# SOF topology directory not found" >> "$OUTPUT"
# 查找具体的拓扑文件
if [ -d /lib/firmware/intel/sof-tplg ]; then
run_cmd "SOF topology files detail" ls -la /lib/firmware/intel/sof-tplg/ | grep -i rt5682 2>/dev/null || true
fi
# SOF内核日志
run_cmd "SOF kernel log (last 20)" dmesg | grep -i sof | tail -20 2>/dev/null || true
run_cmd "SOF firmware version" dmesg | grep -i "firmware.*version" | grep -i sof | tail -5 2>/dev/null || true
# --- 新增: CRAS 音频服务器信息 ---
section "CRAS Audio Server"
if command -v cras_test_client &>/dev/null; then
run_cmd "CRAS server info" cras_test_client --dump_server_info 2>/dev/null || echo "# cras_test_client --dump_server_info failed" >> "$OUTPUT"
run_cmd "CRAS I/O devices" cras_test_client --dump_iodev_list 2>/dev/null || true
run_cmd "CRAS audio thread info" cras_test_client --dump_a 2>/dev/null || true
else
echo "# cras_test_client not available" >> "$OUTPUT"
# 尝试查找cras_test
run_cmd "Find cras_test" find /usr/bin -name "*cras*" 2>/dev/null | head -10 || true
fi
# --- 新增: ALSA 控制信息 ---
section "ALSA Controls"
run_cmd "amixer contents" amixer contents 2>/dev/null || echo "# amixer not available" >> "$OUTPUT"
run_cmd "amixer info" amixer info 2>/dev/null || true
run_cmd "amixer scontrols" amixer scontrols 2>/dev/null || true
# --- 新增: aplay/arecord设备列表 ---
section "Audio Devices"
if command -v aplay &>/dev/null; then
run_cmd "aplay -l (playback devices)" aplay -l 2>/dev/null || true
run_cmd "aplay -L (playback device names)" aplay -L 2>/dev/null | head -30 || true
fi
if command -v arecord &>/dev/null; then
run_cmd "arecord -l (capture devices)" arecord -l 2>/dev/null || true
fi
# --- 新增: PCI设备详细信息 ---
section "PCI Audio Device Details"
if [ -d /sys/bus/pci/devices/0000:00:1f.3 ]; then
run_cmd "PCI audio class" cat /sys/bus/pci/devices/0000:00:1f.3/class 2>/dev/null || true
run_cmd "PCI audio device" cat /sys/bus/pci/devices/0000:00:1f.3/device 2>/dev/null || true
run_cmd "PCI audio vendor" cat /sys/bus/pci/devices/0000:00:1f.3/vendor 2>/dev/null || true
run_cmd "PCI audio subsystem device" cat /sys/bus/pci/devices/0000:00:1f.3/subsystem_device 2>/dev/null || true
run_cmd "PCI audio subsystem vendor" cat /sys/bus/pci/devices/0000:00:1f.3/subsystem_vendor 2>/dev/null || true
run_cmd "PCI audio IRQ" cat /sys/bus/pci/devices/0000:00:1f.3/irq 2>/dev/null || true
run_cmd "PCI audio driver" ls -la /sys/bus/pci/devices/0000:00:1f.3/driver 2>/dev/null || true
else
# 尝试查找其他音频PCI设备
audio_pci=$(lspci | grep -i audio | head -1 | cut -d' ' -f1)
if [ -n "$audio_pci" ] && [ -d "/sys/bus/pci/devices/0000:$audio_pci" ]; then
run_cmd "PCI audio details (from lspci)" ls -la "/sys/bus/pci/devices/0000:$audio_pci/" 2>/dev/null | head -20 || true
fi
fi
# --- 新增: ACPI设备信息 ---
section "ACPI Audio Devices"
if [ -d /sys/bus/acpi/devices ]; then
run_cmd "ACPI devices with audio" ls -la /sys/bus/acpi/devices/ | grep -i audio 2>/dev/null | head -10 || echo "# No ACPI audio devices found" >> "$OUTPUT"
fi
# --- 新增: 音频模块信息 ---
section "Audio Kernel Modules"
run_cmd "Loaded audio modules" lsmod | grep -E "snd|sof|hda" 2>/dev/null | head -30 || true
run_cmd "Module parameters" modinfo snd_sof_pci 2>/dev/null | head -15 || true
# --- 新增: /dev/snd 设备 ---
section "/dev/snd devices"
run_cmd "ls -la /dev/snd" ls -la /dev/snd 2>/dev/null || echo "# /dev/snd not found" >> "$OUTPUT"
# --- 新增: 音频相关服务 ---
section "Audio Services"
# Check CRAS process
run_cmd "CRAS process info" ps aux | grep -E "[c]ras" || echo "# CRAS process not found" >> "$OUTPUT"
# Check CRAS via dbus (if available)
if command -v dbus-send &>/dev/null; then
run_cmd "CRAS volume via dbus" dbus-send --system --print-reply --dest=org.chromium.cras /org/chromium/cras org.chromium.cras.Control.GetVolume 2>/dev/null || true
run_cmd "CRAS output devices via dbus" dbus-send --system --print-reply --dest=org.chromium.cras /org/chromium/cras org.chromium.cras.Control.GetOutputDevices 2>/dev/null | head -20 || true
else
echo "# dbus-send not available" >> "$OUTPUT"
fi
# Check if CRAS is responding to test client
if command -v cras_test_client &>/dev/null; then
run_cmd "CRAS client test" cras_test_client --dump_server_info 2>/dev/null | head -10 || true
else
echo "# cras_test_client not available" >> "$OUTPUT"
fi
# List all audio-related processes
run_cmd "Audio-related processes" ps aux | grep -E "cras|alsa|snd|sof|pulse" | grep -v grep 2>/dev/null | head -20 || true
# Check systemd services (if any - some ChromeOS builds have limited systemd)
if command -v systemctl &>/dev/null; then
run_cmd "Systemd audio services" systemctl list-units --type=service | grep -E "cras|alsa|sound|audio" 2>/dev/null | head -10 || true
else
echo "# systemctl not available on this ChromeOS build" >> "$OUTPUT"
fi
# Check init scripts (traditional SysV init)
if [ -d /etc/init ]; then
run_cmd "Upstart audio jobs" ls -la /etc/init/ | grep -E "cras|alsa" 2>/dev/null || true
fi
# --- 新增: 音频配置文件 ---
section "Audio Configuration Files"
run_cmd "ASoC machine driver" dmesg | grep -i "asoc.*machine" | tail -5 2>/dev/null || true
run_cmd "CRAS config" ls -la /etc/cras/ 2>/dev/null || echo "# No CRAS config directory" >> "$OUTPUT"
# --- CRAS / ALSA utils (if present) --- # --- CRAS / ALSA utils (if present) ---
section "Audio tools (optional)" section "Audio tools (optional)"
run_cmd "which cras_test aplay amixer" bash -c "which cras_test aplay amixer 2>/dev/null || true" run_cmd "which cras_test aplay amixer cras_test_client" bash -c "which cras_test aplay amixer cras_test_client 2>/dev/null || true"
if command -v cras_test &>/dev/null; then if command -v cras_test &>/dev/null; then
run_cmd "cras_test --help 2>&1 | head -5" bash -c "cras_test --help 2>&1 | head -5" || true run_cmd "cras_test --help 2>&1 | head -5" bash -c "cras_test --help 2>&1 | head -5" || true
fi fi
# --- DMI / board (if readable) --- # --- DMI / board (if readable) ---
section "Board (DMI-like)" section "Board (DMI-like)"
for f in /sys/class/dmi/id/board_name /sys/class/dmi/id/product_name /sys/class/dmi/id/sys_vendor; do for f in /sys/class/dmi/id/board_name /sys/class/dmi/id/product_name /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/board_version /sys/class/dmi/id/bios_version; do
[ -f "$f" ] && echo "$f: $(cat "$f" 2>/dev/null)" >> "$OUTPUT" [ -f "$f" ] && echo "$f: $(cat "$f" 2>/dev/null)" >> "$OUTPUT"
done done
log "Done. Output: $OUTPUT" # --- 新增: 收集时间戳和文件信息 ---
log "Copy this file to your PC and save under audio_topology/collected/" section "Collection Info"
echo "Script: $0" >> "$OUTPUT"
echo "Script directory: $SCRIPT_DIR" >> "$OUTPUT"
echo "Output file: $OUTPUT" >> "$OUTPUT"
echo "File size: $(du -h "$OUTPUT" 2>/dev/null | cut -f1)" >> "$OUTPUT"
echo "Line count: $(wc -l < "$OUTPUT" 2>/dev/null)" >> "$OUTPUT"
# --- 最终提示 ---
section "Next Steps"
echo "1. Open chrome://system in Chrome browser" >> "$OUTPUT"
echo "2. Find 'audio' section and click 'Expand'" >> "$OUTPUT"
echo "3. Copy all the expanded content" >> "$OUTPUT"
echo "4. Paste it below this line:" >> "$OUTPUT"
echo "" >> "$OUTPUT"
echo "--- PASTE chrome://system AUDIO SECTION HERE ---" >> "$OUTPUT"
echo "" >> "$OUTPUT"
echo "" >> "$OUTPUT"
echo "--- END OF chrome://system AUDIO SECTION ---" >> "$OUTPUT"
log "Done! Enhanced collection complete."
log "Output file: $OUTPUT"
log "File is in the same directory as this script: $SCRIPT_DIR"
log ""
log "Next steps:"
log "1. Open chrome://system in Chrome browser"
log "2. Find 'audio' section and click 'Expand'"
log "3. Copy all the expanded content"
log "4. Edit $OUTPUT and paste at the marked location"
log ""
log "To view the file: cat $OUTPUT"
log "To copy to Downloads: cp $OUTPUT ~/Downloads/"