#!/usr/bin/env bash # Kaisa:辅助开启 SOF IPC 观测并采集 dmesg(需在真机以 root 运行) # 详见 docs/linux-hdmi/OPERATION_Kaisa_SOF_HDMI_Trace.md set -euo pipefail if [[ "${EUID:-}" -ne 0 ]]; then echo "请使用 root 或 sudo 运行本脚本。" >&2 exit 1 fi DD_CTRL=/sys/kernel/debug/dynamic_debug/control if ! mountpoint -q /sys/kernel/debug 2>/dev/null; then mount -t debugfs none /sys/kernel/debug || { echo "无法挂载 debugfs,请检查内核 CONFIG_DEBUG_FS。" >&2 exit 1 } fi if [[ ! -w "$DD_CTRL" ]]; then echo "无法写入 $DD_CTRL" >&2 exit 1 fi # 与 6.17 树路径一致;若 Unknown,请 grep dynamic_debug/control 中实际 file 名 for f in \ sound/soc/sof/ipc3.c \ sound/soc/sof/ipc3-pcm.c \ sound/soc/sof/intel/hda-pcm.c \ sound/soc/sof/intel/hda-dai.c; do echo "file $f +p" >> "$DD_CTRL" || echo "警告: 未启用 $f(可能路径不同)" >&2 done echo "已写入 dynamic_debug(+p)。" echo "" if [[ -r /sys/module/snd_sof/parameters/sof_debug ]]; then echo "当前 snd_sof sof_debug=$(cat /sys/module/snd_sof/parameters/sof_debug)" echo "若需 IPC 载荷十六进制,/etc/modprobe.d 中设置 options snd_sof sof_debug=0x800 并重启(见文档)。" else echo "未加载 snd_sof 模块;加载后再 cat /sys/module/snd_sof/parameters/sof_debug" fi echo "" echo "下一步:speaker-test 或播放 HDMI,然后:" echo " TS=\$(date +%Y%m%d_%H%M%S); KR=\$(uname -r); dmesg -T > /tmp/dmesg_sof_TRACE_jack-Kaisa_\${KR}_\${TS}.txt" echo "将 /tmp 下文件复制到仓库 audio_topology/collected/"