修复Lenovo Legion Y9000P IAX10H 在Ubuntu26.04下的AW88399低音功放

适用机型:Lenovo Legion Y9000P IAX10H(DMI 83F5),同平台的 Legion Pro 7i 16IAX10H 也可参考。
验证环境:Ubuntu 26.04.1 LTS,原内核 7.0.0-38-generic,修复后 7.0.14-aw88399。
难度:中等偏上(需要编译内核)。
耗时:约 30–60 分钟,取决于 CPU 和网络。
风险提示:会安装自定义内核并修改 GRUB。请务必保留旧内核作为回退项,操作前备份重要数据。


1. 问题现象

这台机器的扬声器是 Realtek ALC287 + 两颗 Awinic AW88399 智能功放 的组合。AW88399 通过 I2C 挂在 ALC287 旁边,作为 HDA 的 side codec,负责驱动两个低音单元。

在 Ubuntu 26.04(内核 7.0.0-38)下,典型表现是:

  • 高音单元有声音,但低音炮完全不响;
  • 整体声音很小、很薄,像手机外放;
  • lsmod 只能看到 snd_soc_aw88399,看不到 snd_hda_scodec_aw88399;
  • dmesg 里没有 AW88399 Bound 之类的日志;
  • aplay -l 里只有普通的 ALC287 Analog,一切看起来“正常”,但就是没有低音。

声音本身没有坏,问题在于:低音功放没有被接入 HDA 声卡。


2. 硬件与根因

2.1 硬件拓扑

                    ┌─────────────────────────────┐
                    │  Intel HDA controller        │
                    │  80:1f.3 (800 Series ACE)    │
                    └──────────────┬──────────────┘
                                   │ HDA
                    ┌──────────────▼──────────────┐
                    │  Realtek ALC287              │
                    │  + Legion AW88399 fixup      │
                    └───────┬──────────────┬───────┘
                            │ I2C          │ audio
                  ┌─────────▼───┐    ┌─────▼─────┐
                  │ AW88399 #0  │    │ AW88399 #1 │
                  │ 0x34 / ch1  │    │ 0x35 / ch0 │
                  └─────────────┘    └───────────┘

本机关键 ID:

项目值
机型Legion Y9000P IAX10H
Board83F5
主 codecRealtek ALC287(10ec:0287)
PCI SSID17aa:3d6c
Codec SSID17aa:3906
功放2 × Awinic AW88399
ACPI HIDAWDZ8399
I2C 地址0x34 / 0x35
固件aw88399_acf.bin

2.2 为什么 7.0 内核不出声

  1. 只有 ASoC 驱动,没有 HDA side-codec 驱动
    内核里的 sound/soc/codecs/aw88399.c 是给 SoC I2S 拓扑用的,不能驱动“挂在 HDA codec 旁边”的 AW88399。

  2. ACPI 只枚举出一个功放实例
    AWDZ8399 没有加入 serial-multi-instantiate 的双实例表,旧内核只创建了一个 I2C client。

  3. ALC287 缺少 Legion fixup
    低音 pin 0x17 默认接到没有音量控制的 DAC 0x06;需要 Legion 专用 fixup 强制改到 DAC 0x02,并关闭未使用的 pin 0x1d。

  4. 缺少固件
    AW88399 需要 aw88399_acf.bin 做 DSP/保护参数初始化。该固件目前还没有进入 linux-firmware 主仓库,需要手动安装。

上游的修复补丁已经把这些问题都处理了:ACPI ignore、SMI 双实例、ALC287 fixup、HDA side-codec 驱动、per-SSID 声道交换等。


3. 方案选择

先看你的内核版本:

内核版本建议方案是否需要编译内核
7.3 及以上只安装固件,确认模块加载否
7.0 – 7.2安装固件 + 应用 backport 补丁 + 编译内核是
其他发行版若已带 7.3+,只需固件否

截至本文写作时,Ubuntu 26.04 仓库仍是 7.0.x,因此走“编译内核”路线。等 Ubuntu 提供 7.3+ HWE 内核后,可以只保留固件步骤。


4. 准备工作

4.1 确认机型

cat /sys/class/dmi/id/product_name
cat /sys/class/dmi/id/board_name

应看到类似:

Legion Y9000P IAX10H
83F5

4.2 确认声卡与 codec

uname -r
cat /proc/asound/card*/codec#0 | grep -E 'Codec:|Subsystem Id'

本机输出:

7.0.0-38-generic
Codec: Realtek ALC287
Subsystem Id: 0x17aa3906

4.3 关闭 Secure Boot 并准备回退

自定义内核默认没有签名。如果 Secure Boot 开着,启动时会报:

error: bad shim lock signature
error: you need to load the kernel first

处理方式二选一:

  • 进 BIOS/UEFI 关闭 Secure Boot(最简单);
  • 自己签名并注册 MOK(进阶,本文不展开)。

同时确认:

  • 笔记本接上电源;
  • 根分区至少留 20 GB;
  • 不要删除旧内核,后面要靠它回退;
  • 记录当前内核版本:
uname -r

5. 安装 AW88399 固件(所有方案都需要)

5.1 获取固件

上游修复项目:

最稳妥的方式是直接 clone 仓库:

git clone https://github.com/nadimkobeissi/16iax10h-linux-sound-saga.git
cd 16iax10h-linux-sound-saga

固件位于:

fix/firmware/aw88399_acf.bin

校验一下:

sha256sum fix/firmware/aw88399_acf.bin

本机使用的文件 SHA256:

1e927c9bca76d868181c0f81df2bccef3cf19c7d0910219f229360c87babd42c

固件由 Awinic 提交到 linux-firmware,许可证为 Redistributable(见 LICENSE.awinic);仓库中的文件来自官方 Lenovo Windows 驱动。Awinic 的提交说明里提到,8 个按 Lenovo 项目 ID 命名的 ACF 文件内容完全相同,因此同一个 aw88399_acf.bin 可以按不同 SSID 重命名使用。

5.2 安装到内核 7.0–7.3

sudo install -Dm644 fix/firmware/aw88399_acf.bin /lib/firmware/aw88399_acf.bin

确认:

ls -l /lib/firmware/aw88399_acf.bin

5.3 内核 7.4+ 的路径变化

从 7.4-rc1 开始,固件路径改为按 SSID 区分:

/lib/firmware/awinic/aw88399_acf_<SSID>.bin

本机需要:

sudo install -Dm644 fix/firmware/aw88399_acf.bin /lib/firmware/awinic/aw88399_acf_17aa3906.bin
sudo install -Dm644 fix/firmware/aw88399_acf.bin /lib/firmware/awinic/aw88399_acf_17aa3907.bin

不确定自己属于哪条路径时,可以两套都放;多出来的文件不会影响启动。


6. 方案 A:内核 7.3+,只装固件

如果发行版已经提供 7.3 或更新内核,确认驱动和固件即可:

uname -r
lsmod | grep -E 'aw88399|scodec'
journalctl -k -b | grep -iE 'aw88399|AWDZ8399'

正常应看到:

snd_hda_scodec_aw88399
snd_hda_scodec_aw88399_i2c
snd_soc_aw88399

以及:

Serial bus multi instantiate ... Instantiated 2 I2C devices.
aw88399-hda ... Bound to HDA codec, channel 0
aw88399-hda ... Bound to HDA codec, channel 1

如果没有,先检查固件路径,再检查内核配置里是否有:

CONFIG_SND_HDA_SCODEC_AW88399_I2C=m

Ubuntu 内核可以在 /boot/config-$(uname -r) 中查:

grep AW88399 /boot/config-$(uname -r)

7. 方案 B:内核 7.0–7.2,编译带补丁的内核

以下步骤以 Ubuntu 26.04 + 内核 7.0.0-38 为例。

7.1 安装编译依赖

sudo apt update
sudo apt install -y \
    build-essential flex bison libssl-dev libelf-dev \
    bc dwarves gawk bzip2 rsync cpio zstd kmod git

说明:

  • gawk 不能省:Ubuntu 内核源码生成 modules.builtin.ranges 时会调用它,只有 mawk 会报 gawk: not found。
  • libssl-dev、libelf-dev 用于内核签名工具和 objtool。
  • 如果使用 NVIDIA 驱动,后面还需要对应的内核模块源码。

7.2 获取内核源码

Ubuntu 26.04 可以直接安装源码包:

sudo apt install linux-source-7.0.0

源码压缩包位于:

/usr/src/linux-source-7.0.0.tar.bz2

解压:

mkdir -p ~/kernel
cd ~/kernel
tar -xf /usr/src/linux-source-7.0.0.tar.bz2
cd linux-source-7.0.0

确认版本:

head -5 Makefile

本机看到的是:

VERSION = 7
PATCHLEVEL = 0
SUBLEVEL = 14

也可以用 kernel.org 的对应版本源码,但建议优先用发行版源码,配置和驱动兼容性最好。

7.3 获取并应用补丁

7.0 的 backport 补丁在 Ubuntu 指南分支:

clone 这个分支:

cd ~/kernel
git clone -b add-ubuntu-26-04-audio-guide \
    https://github.com/jbravoMlg/16iax10h-linux-sound-saga.git patch-src

应用:

cd ~/kernel/linux-source-7.0.0
patch -p1 < ~/kernel/patch-src/fix/patches/16iax10h-audio-linux-7.0.patch

补丁 SHA256(本机文件):

ea231e06316cf0ddc24baa273efbb844483f75577181c3bd26c604e1d1103e5b

正常情况下会看到这些文件被修改/新增:

drivers/acpi/scan.c
drivers/platform/x86/serial-multi-instantiate.c
sound/hda/codecs/realtek/alc269.c
sound/hda/codecs/side-codecs/Kconfig
sound/hda/codecs/side-codecs/Makefile
sound/hda/codecs/side-codecs/aw88399_hda.c
sound/hda/codecs/side-codecs/aw88399_hda.h
sound/hda/codecs/side-codecs/aw88399_hda_i2c.c
sound/hda/codecs/side-codecs/aw88399_hda_property.c
sound/hda/codecs/side-codecs/aw88399_hda_property.h
sound/soc/codecs/aw88399.c
sound/soc/codecs/aw88399.h

如果 alc269.c 有两个 hunk 失败

Ubuntu 的 alc269.c 已经有很多回移,可能出现:

Hunk #2 FAILED at ...
Hunk #3 FAILED at ...
2 out of 4 hunks FAILED

失败的通常只是两处:枚举和 fixup 数组。按下面位置手工补上即可。

在 enum { ... } 的末尾、ALC236_FIXUP_DELL_HP_POP_NOISE 之后加入:

	ALC287_FIXUP_AW88399_I2C_2,
	ALC287_FIXUP_LENOVO_LEGION_AW88399,

在 static const struct hda_fixup alc269_fixups[] 数组末尾、结束的 }; 之前加入:

	[ALC287_FIXUP_AW88399_I2C_2] = {
		.type = HDA_FIXUP_FUNC,
		.v.func = aw88399_fixup_i2c_two,
	},
	[ALC287_FIXUP_LENOVO_LEGION_AW88399] = {
		.type = HDA_FIXUP_FUNC,
		.v.func = alc287_fixup_legion_16iax10h_aw88399,
		.chained = true,
		.chain_id = ALC287_FIXUP_AW88399_I2C_2,
	},

保存后重新检查关键字是否存在:

grep -n 'ALC287_FIXUP_AW88399_I2C_2\|ALC287_FIXUP_LENOVO_LEGION_AW88399' sound/hda/codecs/realtek/alc269.c

如果你用的是 7.2.x 内核,可以改用仓库里的 16iax10h-audio-linux-7.2.9.patch:
https://github.com/nadimkobeissi/16iax10h-linux-sound-saga/blob/main/fix/patches/16iax10h-audio-linux-7.2.9.patch

7.4 配置内核

从当前运行内核复制配置:

cp /boot/config-$(uname -r) .config

打开 AW88399 相关选项:

scripts/config --module SND_HDA_SCODEC_AW88399
scripts/config --module SND_HDA_SCODEC_AW88399_I2C
scripts/config --module SND_SOC_AW88399

给内核一个独立版本名,避免覆盖原内核:

scripts/config --set-str LOCALVERSION "-aw88399"
scripts/config --disable LOCALVERSION_AUTO

为了缩短编译时间,可以关掉调试信息和用不到的 AMD 显卡驱动:

scripts/config --disable DEBUG_INFO
scripts/config --disable DEBUG_INFO_BTF
scripts/config --disable DEBUG_INFO_BTF_MODULES
scripts/config --disable DRM_AMDGPU
scripts/config --disable DRM_RADEON

生成最终配置:

make olddefconfig

检查关键项:

grep -E 'CONFIG_(LOCALVERSION|SND_HDA_SCODEC_AW88399|SND_SOC_AW88399)' .config

应看到:

CONFIG_LOCALVERSION="-aw88399"
CONFIG_SND_HDA_SCODEC_AW88399=m
CONFIG_SND_HDA_SCODEC_AW88399_I2C=m
CONFIG_SND_SOC_AW88399=m

CONFIG_MODULE_SIG 可能会被 SECURITY_LOCKDOWN 自动 select 回 y,这是正常的;Secure Boot 关闭时不影响加载。

7.5 编译

make -j"$(nproc)" bzImage modules

本机 24 核大约需要 20–30 分钟。编译完成后确认:

ls -lh arch/x86/boot/bzImage
make -s kernelrelease

应看到:

7.0.14-aw88399

常见错误:

错误处理
gawk: not foundsudo apt install gawk
openssl/opensslconf.h: No such filesudo apt install libssl-dev
No rule to make target 'debian/canonical-certs.pem'使用发行版源码;或把 CONFIG_SYSTEM_TRUSTED_KEYS、CONFIG_SYSTEM_REVOCATION_KEYS 设为空并关闭 CONFIG_MODULE_SIG
objtool 链接报 undefined reference to ZSTD_*安装 libzstd-dev、zlib1g-dev,或使用发行版源码
编译到一半内存不足减少 -j,例如 -j8

7.6 为 NVIDIA 显卡重编模块(可选但强烈建议)

新内核没有原来的 NVIDIA 模块,独显会不可用。根据你的安装方式选择:

情况 1:使用 NVIDIA .run 安装包

源码通常在 /usr/src/nvidia-<版本>,例如:

/usr/src/nvidia-595.112.07

先安装新内核模块,让 /lib/modules/7.0.14-aw88399/build 指向内核源码树:

cd ~/kernel/linux-source-7.0.0
sudo make modules_install

然后编译 NVIDIA 模块($PWD 在 sudo 之前由当前 shell 展开,所以这里必须先在源码目录):

cd ~/kernel/linux-source-7.0.0
sudo make -C /usr/src/nvidia-595.112.07 -j"$(nproc)" \
    KERNEL_UNAME="7.0.14-aw88399" \
    SYSSRC="$PWD" SYSOUT="$PWD" \
    modules

把生成的模块放进新内核目录:

sudo install -d /lib/modules/7.0.14-aw88399/updates
sudo cp /usr/src/nvidia-595.112.07/*.ko /lib/modules/7.0.14-aw88399/updates/
sudo depmod -a 7.0.14-aw88399

如果你把 NVIDIA 源码放在其他位置,把上面的 /usr/src/nvidia-595.112.07 换成实际路径即可。

情况 2:使用 Ubuntu 的 nvidia-dkms-*

DKMS 会在安装新内核时自动重编,通常不需要手动操作。安装内核后确认:

dkms status

如果 DKMS 没有自动触发,可以手动:

sudo dkms autoinstall -k 7.0.14-aw88399

如果 NVIDIA 模块暂时编不过,系统仍可以用集显启动,声卡修复不受影响;独显问题可以之后再处理。

7.7 安装内核

cd ~/kernel/linux-source-7.0.0
sudo make modules_install
sudo cp arch/x86/boot/bzImage /boot/vmlinuz-7.0.14-aw88399
sudo cp System.map /boot/System.map-7.0.14-aw88399
sudo cp .config /boot/config-7.0.14-aw88399
sudo depmod -a 7.0.14-aw88399
sudo update-initramfs -c -k 7.0.14-aw88399
sudo update-grub

modules_install 在 7.6 里可能已经执行过一次,重复执行是幂等的,不会出问题。

检查 GRUB 是否识别:

sudo grep -i '7.0.14-aw88399' /boot/grub/grub.cfg | head

重启:

sudo reboot

默认会进入 7.0.14-aw88399。


8. 验证

8.1 内核与模块

uname -r
lsmod | grep -E 'aw88399|scodec'

期望:

7.0.14-aw88399
snd_hda_scodec_component
snd_hda_scodec_aw88399_i2c
snd_hda_scodec_aw88399
snd_soc_aw88399
snd_soc_aw88395_lib

8.2 关键内核日志

sudo dmesg -T | grep -iE 'aw88399|AWDZ8399|ALC287' | tail -40

或:

journalctl -k -b | grep -iE 'aw88399|AWDZ8399|ALC287'

本机成功日志的关键行:

Serial bus multi instantiate pseudo device driver AWDZ8399:00: Instantiated 2 I2C devices.
aw88399-hda ...: Looking up properties for SSID 17AA3906
aw88399-hda ...: AW88399 Channel swap applied: index 1 -> channel 0
aw88399-hda ...: AW88399 HDA side codec registered successfully
aw88399-hda ...: AW88399 Channel swap applied: index 0 -> channel 1
snd_hda_codec_alc269 ...: ALC287: picked fixup  for PCI SSID 17aa:3d6c
aw88399-hda ...: Bound to HDA codec, channel 0
aw88399-hda ...: Bound to HDA codec, channel 1
snd_hda_codec_alc269 ...: bound i2c-AWDZ8399:00-aw88399-hda.0
snd_hda_codec_alc269 ...: bound i2c-AWDZ8399:00-aw88399-hda.1

只要看到 两路 Bound to HDA codec,就说明功放已经接入声卡。

8.3 声卡与音量

aplay -l | grep -A3 'PCH'
amixer -c2 scontrols | grep -iE 'speaker|bass'

确认 Speaker、Bass Speaker 没有被静音:

amixer -c2 sset 'Speaker' unmute
amixer -c2 sset 'Bass Speaker' unmute

-c2 是本机的 card 号,请以 aplay -l 的输出为准;不同机器可能是 -c0 或 -c1。Bass Speaker 控件在部分机型上不存在,忽略即可。

8.4 试听

speaker-test -t wav -c 2

或者用任意音乐播放器播放一首低音明显的歌。正常状态下:

  • 左右声道都有声音;
  • 低音炮有明显的低频输出;
  • 不再是“只有高音、声音很薄”。

8.5 独显(如果重编了 NVIDIA)

nvidia-smi

本机输出:

NVIDIA GeForce RTX 5070 Ti Laptop GPU, 595.112.07

9. 故障排查

现象可能原因处理
lsmod 没有 snd_hda_scodec_aw88399模块没装/没加载sudo modprobe snd-hda-scodec-aw88399-i2c;检查 .config 和 modules_install
日志有 Direct firmware load for aw88399_acf.bin failed固件缺失或路径不对按第 5 步安装;7.4+ 注意 awinic/ 路径
只有 AWDZ8399:00 一个 I2C 设备scan.c/SMI 补丁没生效检查 dmesg 是否有 Instantiated 2 I2C devices
功放绑定成功但仍然没有低音混音器静音、PipeWire profile 不对检查 Speaker/Bass Speaker;选择“模拟立体声”输出
左右声道反了SSID 不在 quirk 表在 aw88399_hda_property.c 的 aw88399_prop_model_table 加 17AAxxxx
ALC287: SKU not ready 0x411111f0fixup 把未使用 pin 0x1d 设为 bogus pin正常提示,不是错误
启动报 bad shim lock signatureSecure Boot 拦截未签名内核关闭 Secure Boot,或签名并注册 MOK
NVIDIA 不可用新内核没有对应模块按 7.6 重编;或使用 nvidia-dkms
编译报 gawk: not found系统只有 mawksudo apt install gawk
编译报 openssl/opensslconf.h 找不到缺 libssl-devsudo apt install libssl-dev

10. 回退

10.1 临时回退

开机时按住 Esc 或 Shift 调出 GRUB:

Advanced options for Ubuntu
  └─ Ubuntu, with Linux 7.0.0-38-generic

选择旧内核即可。旧内核和旧模块都还在。

10.2 彻底移除新内核

sudo rm -rf /lib/modules/7.0.14-aw88399
sudo rm -f /boot/vmlinuz-7.0.14-aw88399 \
           /boot/initrd.img-7.0.14-aw88399 \
           /boot/System.map-7.0.14-aw88399 \
           /boot/config-7.0.14-aw88399
sudo update-grub

固件 /lib/firmware/aw88399_acf.bin 可以保留,不影响旧内核。


11. 升级与维护

  1. Ubuntu 更新内核后,修复会失效
    新的 linux-image-generic 没有这个补丁,GRUB 默认项会切到新内核。处理方式:

    • 在 GRUB 中固定启动 7.0.14-aw88399;
    • 或删除/屏蔽新内核;
    • 或等 7.3+ 内核再升级。
  2. 7.3+ 的上游支持
    AW88399 HDA side-codec 驱动已经合入 Linux 7.3。使用 7.3+ 内核时不再需要本补丁,但仍需手动安装固件,直到 linux-firmware 收录。

  3. 7.4+ 固件路径
    路径改为 /lib/firmware/awinic/aw88399_acf_<SSID>.bin,注意按 SSID 命名。

  4. 每次换内核都要重编 NVIDIA 模块
    使用 .run 安装的用户需要按 7.6 重编;使用 nvidia-dkms 的用户由 DKMS 自动处理。


12. 参考与文件链接

12.1 项目与教程

资源链接
修复项目主仓库(固件、补丁、说明)https://github.com/nadimkobeissi/16iax10h-linux-sound-saga
Ubuntu 26.04 构建指南https://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/UBUNTU_26_04.md
Ubuntu 指南分支https://github.com/jbravoMlg/16iax10h-linux-sound-saga/tree/add-ubuntu-26-04-audio-guide
LKML 补丁系列(0/8)https://lkml.iu.edu/hypermail/linux/kernel/2607.2/03687.html
补丁 7/8(HDA side-codec 驱动)https://lkml.iu.edu/hypermail/linux/kernel/2607.2/03685.html
补丁 8/8(ALC287 fixup 与 per-model quirk)https://lkml.iu.edu/hypermail/linux/kernel/2607.2/03686.html
R9000P AFR10 后续 SSID 补丁https://lore.kernel.org/all/SN6PR19MB2303D726352EEE508A70D6D4FC922@SN6PR19MB2303.namprd19.prod.outlook.com/
固件提交 linux-firmware 的邮件https://lore.kernel.org/linux-firmware/4b70e056-89d9-4d92-8ecb-ecb4c7d48c8a@app.fastmail.com/T/

12.2 文件

文件链接说明
aw88399_acf.binhttps://github.com/nadimkobeissi/16iax10h-linux-sound-saga/blob/main/fix/firmware/aw88399_acf.bin功放固件,页面右上角“Download raw file”
16iax10h-audio-linux-7.0.patchhttps://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/fix/patches/16iax10h-audio-linux-7.0.patch7.0 内核 backport 补丁
16iax10h-audio-linux-7.2.9.patchhttps://github.com/nadimkobeissi/16iax10h-linux-sound-saga/blob/main/fix/patches/16iax10h-audio-linux-7.2.9.patch7.2.9 内核补丁
UBUNTU_26_04.mdhttps://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/UBUNTU_26_04.mdUbuntu 构建步骤
Linux 源码https://www.kernel.org/可选,发行版源码优先
Ubuntu 源码包https://launchpad.net/ubuntu/+source/linux本教程使用的源码
Ubuntu mainline 内核https://kernel.ubuntu.com/mainline/想试 7.3+ 时可用,注意 NVIDIA 和 Secure Boot

12.3 快速 clone

git clone https://github.com/nadimkobeissi/16iax10h-linux-sound-saga.git

git clone -b add-ubuntu-26-04-audio-guide \
    https://github.com/jbravoMlg/16iax10h-linux-sound-saga.git

附录 A:安装脚本

把下面保存为 install-kernel.sh,按你的实际路径修改前几行,然后:

chmod +x install-kernel.sh
sudo ./install-kernel.sh
#!/usr/bin/env bash
# 安装带 AW88399 修复的内核
# 使用前请把 BASE 改成你的实际路径,并确认 KREL 与源码版本一致
set -euo pipefail

BASE="/home/你的用户名"
KREL="7.0.14-aw88399"
SRC="$BASE/kernel/linux-source-7.0.0"
BUILD="$SRC"                 # 树内编译;若用 O=,改成构建目录
FW="$BASE/16iax10h-linux-sound-saga/fix/firmware/aw88399_acf.bin"

if [ "$(id -u)" -ne 0 ]; then
    echo "请使用 root 运行: sudo bash $0"
    exit 1
fi

if [ ! -f "$BUILD/arch/x86/boot/bzImage" ]; then
    echo "错误: 找不到 $BUILD/arch/x86/boot/bzImage"
    exit 1
fi

# 1. 固件
install -Dm644 "$FW" /lib/firmware/aw88399_acf.bin

# 2. 模块
make -C "$SRC" INSTALL_MOD_STRIP=1 modules_install

# 3. 内核镜像
install -m644 "$BUILD/arch/x86/boot/bzImage" "/boot/vmlinuz-$KREL"
install -m644 "$BUILD/System.map" "/boot/System.map-$KREL"
install -m644 "$BUILD/.config" "/boot/config-$KREL"

# 4. 收尾
depmod -a "$KREL"
update-initramfs -c -k "$KREL"
update-grub

echo "完成。请重启并选择 $KREL。"

如果使用 O= 分离构建目录,把 BUILD 指向构建目录,modules_install 改成 make -C "$SRC" O="$BUILD" ...,System.map 和 .config 也从构建目录取。


附录 B:验证脚本

保存为 verify-audio.sh:

#!/usr/bin/env bash
echo "内核: $(uname -r)"
echo
echo "== 功放相关模块 =="
lsmod | grep -E 'aw88399|scodec' || echo "(未加载)"
echo
echo "== 内核日志 =="
journalctl -k -b --no-pager 2>/dev/null | grep -iE 'aw88399|AWDZ8399|ALC287' | tail -40
echo
echo "== 声卡 =="
aplay -l | grep -A3 'PCH'
echo
echo "== 扬声器混音器 =="
amixer -c2 scontrols | grep -iE 'speaker|bass'
echo
echo "看到 'Bound to HDA codec, channel 0/1' 即表示功放已工作。"

运行:

chmod +x verify-audio.sh
./verify-audio.sh

附录 C:本文验证结果摘要

项目结果
内核7.0.14-aw88399
功放2 × AW88399,channel 0 / 1 均 Bound to HDA codec
ALC287 fixup匹配 17aa:3d6c
低音正常
独显RTX 5070 Ti Laptop GPU,驱动 595.112.07 正常

本文基于 2026-10-25 的 Ubuntu 26.04、内核 7.0.0-38 实测。内核和驱动更新后,路径、配置项、固件位置可能变化,请以对应版本的源码和上游说明为准。