#!/bin/bash # # Chromebox 10 代 - 原生 ChromeOS 音频硬件拓扑收集脚本 # 用于 C1c 任务:在原生 ChromeOS 下收集硬件拓扑,供与 Coreboot+Linux/Windows 对比 # # 用法(在 ChromeOS 上): # 1. 打开 crosh:浏览器按 Ctrl+Alt+T # 2. 输入 shell 进入 bash # 3. 将本脚本传到设备后运行,或把下面整段复制粘贴到 shell 中执行 # # 输出:默认写入 /tmp/audio_topology_chromeos_$(hostname)_$(date).txt # 请用 文件 应用打开 /tmp 复制到下载目录,或 cat 该文件复制内容到电脑 # # 注意:ChromeOS 使用 CRAS,无 PulseAudio;部分信息需在浏览器打开 chrome://system # 在「audio」一节可复制粘贴到本输出文件末尾作为补充 set -e OUTPUT_DIR="${OUTPUT_DIR:-/tmp}" OUTPUT="${1:-${OUTPUT_DIR}/audio_topology_chromeos_$(hostname)_$(date +%Y%m%d_%H%M%S).txt}" log() { echo "[$(date +%H:%M:%S)] $*"; } section() { echo "" >> "$OUTPUT" echo "========================================" >> "$OUTPUT" echo "### $1" >> "$OUTPUT" echo "========================================" >> "$OUTPUT" echo "" >> "$OUTPUT" } run_cmd() { local desc="$1" shift echo "# $desc" >> "$OUTPUT" echo '```' >> "$OUTPUT" "$@" >> "$OUTPUT" 2>&1 || echo "(command failed or not available)" >> "$OUTPUT" echo '```' >> "$OUTPUT" echo "" >> "$OUTPUT" } log "Collecting ChromeOS audio topology..." log "Output: $OUTPUT" : > "$OUTPUT" echo "# Chromebox 10 - ChromeOS (native) audio topology" >> "$OUTPUT" echo "# Collected: $(date -Iseconds 2>/dev/null || date)" >> "$OUTPUT" echo "# Host: $(hostname)" >> "$OUTPUT" echo "# Note: Add content from chrome://system -> audio section manually if needed." >> "$OUTPUT" echo "" >> "$OUTPUT" # --- System --- section "System" run_cmd "uname -a" uname -a run_cmd "Release (if exists)" cat /etc/lsb-release 2>/dev/null || true # --- ALSA (kernel layer, CRAS sits on top) --- 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/pcm" cat /proc/asound/pcm 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 [ -d "$card_dir" ] || continue card=$(basename "$card_dir") echo "# $card dir:" >> "$OUTPUT" echo '```' >> "$OUTPUT" ls -la "$card_dir" 2>/dev/null >> "$OUTPUT" || true echo '```' >> "$OUTPUT" done # --- Codec (HDA) --- section "HDA Codec" for codec in /proc/asound/card*/codec*; do [ -f "$codec" ] || continue echo "# $codec" >> "$OUTPUT" echo '```' >> "$OUTPUT" cat "$codec" 2>/dev/null >> "$OUTPUT" || true echo '```' >> "$OUTPUT" done # --- HDMI ELD --- section "HDMI ELD" for eld in /proc/asound/card*/eld*; do [ -f "$eld" ] || continue echo "# $eld" >> "$OUTPUT" echo '```' >> "$OUTPUT" cat "$eld" 2>/dev/null >> "$OUTPUT" || true echo '```' >> "$OUTPUT" done # --- sysfs sound --- section "/sys/class/sound" run_cmd "ls -la /sys/class/sound" ls -la /sys/class/sound 2>/dev/null || true # --- PCI (if available) --- section "PCI audio (if lspci exists)" if command -v lspci &>/dev/null; then run_cmd "lspci -nn | grep -i audio" bash -c "lspci -nn | grep -i audio || echo '(none)'" else echo "# lspci not available on this ChromeOS image" >> "$OUTPUT" echo "" >> "$OUTPUT" fi # --- CRAS / ALSA utils (if present) --- section "Audio tools (optional)" run_cmd "which cras_test aplay amixer" bash -c "which cras_test aplay amixer 2>/dev/null || true" 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 fi # --- DMI / board (if readable) --- 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 [ -f "$f" ] && echo "$f: $(cat "$f" 2>/dev/null)" >> "$OUTPUT" done log "Done. Output: $OUTPUT" log "Copy this file to your PC and save under audio_topology/collected/"