Default Ubuntu source tree (not in git): ../../kernel-src/linux-hwe-6.17-6.17.0/ 当前仓库补丁: 0001-ASoC-SOF-ipc3-pcm-await-DSP-reply-for-FREE-and-trigger.patch 修改 sound/soc/sof/ipc3-pcm.c:PCM FREE 与 trigger 使用 sof_ipc_tx_message() + struct sof_ipc_reply(对齐 ChromiumOS 5.15;原 Ubuntu 使用 no_reply)。 0002-ASoC-SOF-ipc3-pcm-dump-STREAM_PCM_PARAMS-fields.patch 修改 sound/soc/sof/ipc3-pcm.c:在 STREAM_PCM_PARAMS 发送前,当 sof_debug 含 SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD(bit 11,十进制 2048)时 spcm_dbg 打印字段摘要(诊断,不改载荷)。 0003-ASoC-SOF-hda-dai-dev_dbg-hda_link_dma_hw_params.patch 修改 sound/soc/sof/intel/hda-dai.c:hda_link_dma_hw_params 内 set_stream_id 前 dev_dbg(诊断,不改行为; 需 dynamic_debug +p)。 应用:先 0001 再 0002;0003 可选且独立 PATCH=$PWD/patches/ubuntu-hwe-6.17/0001-....patch ../scripts/ubuntu-hwe-617-build.sh apply PATCH=$PWD/patches/ubuntu-hwe-6.17/0002-....patch ../scripts/ubuntu-hwe-617-build.sh apply # PATCH=$PWD/patches/ubuntu-hwe-6.17/0003-....patch ../scripts/ubuntu-hwe-617-build.sh apply 补丁应在细读 ChromeOS 5.15 与 6.17 差异后再写(本 0001 为对照 ipc3-pcm 后的最小移植)。 API 备忘(阅读 ChromeOS 树时仍有用) ==================================== - ChromeOS 5.15 的 struct snd_soc_dai_link 使用 dpcm_playback / dpcm_capture。 - Ubuntu HWE 6.17(上游)已改名为 playback_only / capture_only(见 include/sound/soc.h)。 - ChromeOS set_idisp_hdmi_link 里用 dpcm_playback=1;6.17 对应语义为 playback_only=1。 不要把 0001 那类「写回 dpcm_playback」应用到 6.17。 新补丁设计策略 ============== 1. 拉长 ChromeOS 内核历史:chromiumos_kernel/v5.15 若曾为浅克隆,需 git fetch --unshallow(见 docs/kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md)。 2. 优先对照与 STREAM_PCM_PARAMS / hw_params 相关的文件(相对 6.17 源码树): - sound/soc/sof/ipc3.c - sound/soc/sof/pcm.c - sound/soc/sof/intel/hda-dai.c 3. 全目录差异规模与优先文件列表:docs/meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md;一键统计:scripts/diff-chromeos-ubuntu-sound.sh 4. 导出三文件 unified diff:scripts/export-chromeos-ubuntu-sound-file-diffs.sh(输出默认在 reference/,已 gitignore) 5. 板级 sof_rt5682 / sof_board_helpers:scripts/export-boards-chrome-ubuntu-diff.sh(同上 reference/) 6. link 层时序(ftrace):scripts/collect-hda-link-ftrace.sh(root,见 STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md §6.1) 7. 两棵树预检并一键跑 3+4:scripts/preflight-chromeos-ubuntu-diff.sh Smoke-test(对象文件级) ==================================================================== cd kernel-src/linux-hwe-6.17-6.17.0 # 若 make prepare 报缺少 dwarf.h:sudo apt install libdw-dev(已列入 scripts/ubuntu-hwe-617-deps-packages.txt # 与 scripts/ubuntu-hwe-617-build.sh 的 deps 命令) # 可选:cp /boot/config-$(uname -r) .config && make olddefconfig make x86_64_defconfig && make prepare SKIP_STACK_VALIDATION=1 make sound/soc/sof/ipc3-pcm.o # 其它候选(与 HDMI/SOF IPC 链相关,按需选用): # make sound/soc/sof/ipc3.o sound/soc/sof/pcm.o sound/soc/sof/intel/hda-dai.o # 单独 make sound/soc/sof/snd-sof.ko 在无完整 vmlinux/modpost 链时通常会失败;要可加载 .ko 请走 make modules 或 debian/rules。 全量 Ubuntu 包:fakeroot debian/rules binary-generic(需 apt build-dep、大盘与时间)。 Kaisa 真机验证(安装 deb 并重启后) ------------------------------------ 1. uname -r 2. aplay -L | head -80 3. speaker-test -D plughw:卡号,设备号 -c 2 -l 1 4. sudo dmesg | grep -iE 'sof|STREAM_PCM|ipc failed|pcm[0-9]' | tail -60 5. 输出保存到 audio_topology/collected/ 补丁验收流程(简图) -------------------- unshallow -> git log (sound paths) -> diff ipc3/pcm/hda-dai -> 最小假设 -> 新补丁 -> make *.o -> binary-generic STREAM_PCM_PARAMS 专项(Chrome 5.15 vs 6.17) --------------------------------------------- - 详细对照与可移植假设:同目录 STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md(**§6**:下一处优先 **调用路径** = hda-dai.c 中 link DMA / snd_hdac_ext_bus_link_set_stream_id;**可实验字段** = hda-pcm.c 中 hstream->format_val 与 dspless 分支) - 摘要:ipc3-pcm.c 的 hw_params 载荷填充与 5.15 语义一致;hda-pcm.c 有 dspless/format_val 分支差异; hda-dai.c 整文件架构差异大,不宜无依据移植。 - 0002 为诊断补丁(STREAM_PCM_PARAMS 字段 spcm_dbg),0003 为 hda-dai link 层 dev_dbg;见同目录 README.md。 - 板级 diff:reference/diff-u_sound_soc_intel_boards_sof_rt5682.c.txt 等(export-boards-chrome-ubuntu-diff.sh)。 - 行为性修复与上游投递仍见 docs/linux-hdmi/UPSTREAM_SOF_Kaisa_HDMI_REPRO.md;就绪清单见 audio_topology/collected/UPSTREAM_REPRO_PACKAGE_INDEX.md。