更新 audio_topology/collect_chromeos_audio_topology.sh
This commit is contained in:
@@ -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/"
|
||||||
Reference in New Issue
Block a user