diff --git a/audio_topology/collect_chromeos_audio_topology.sh b/audio_topology/collect_chromeos_audio_topology.sh index 6e0d5769bb..d1d6609966 100644 --- a/audio_topology/collect_chromeos_audio_topology.sh +++ b/audio_topology/collect_chromeos_audio_topology.sh @@ -1,22 +1,60 @@ #!/bin/bash # -# Chromebox 10 代 - 原生 ChromeOS 音频硬件拓扑收集脚本 +# Chromebox 10 代 - 原生 ChromeOS 音频硬件拓扑收集脚本(增强版) # 用于 C1c 任务:在原生 ChromeOS 下收集硬件拓扑,供与 Coreboot+Linux/Windows 对比 # # 用法(在 ChromeOS 上): # 1. 打开 crosh:浏览器按 Ctrl+Alt+T -# 2. 输入 shell 进入 bash -# 3. 将本脚本传到设备后运行,或把下面整段复制粘贴到 shell 中执行 +# 2. 输入 shell 进入 bash(如果提示符是 crosh>,输入 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 -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}" log() { echo "[$(date +%H:%M:%S)] $*"; } @@ -39,11 +77,15 @@ run_cmd() { log "Collecting ChromeOS audio topology..." log "Output: $OUTPUT" +log "Script directory: $SCRIPT_DIR" +log "" +log "提示:文件生成后可以用 cat $OUTPUT 查看,或在文件管理器 Downloads 目录中找到" : > "$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 "# Host: $(hostname)" >> "$OUTPUT" +echo "# Script directory: $SCRIPT_DIR" >> "$OUTPUT" echo "# Note: Add content from chrome://system -> audio section manually if needed." >> "$OUTPUT" echo "" >> "$OUTPUT" @@ -51,11 +93,14 @@ echo "" >> "$OUTPUT" section "System" run_cmd "uname -a" uname -a 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) --- 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 "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 for card_dir in /proc/asound/card[0-9]*; do @@ -91,27 +136,184 @@ done section "/sys/class/sound" 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) --- 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)'" + 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 echo "# lspci not available on this ChromeOS image" >> "$OUTPUT" echo "" >> "$OUTPUT" 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) --- 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 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 +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" 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/" \ No newline at end of file