修复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 |
| Board | 83F5 |
| 主 codec | Realtek ALC287(10ec:0287) |
| PCI SSID | 17aa:3d6c |
| Codec SSID | 17aa:3906 |
| 功放 | 2 × Awinic AW88399 |
| ACPI HID | AWDZ8399 |
| I2C 地址 | 0x34 / 0x35 |
| 固件 | aw88399_acf.bin |
2.2 为什么 7.0 内核不出声
-
只有 ASoC 驱动,没有 HDA side-codec 驱动
内核里的sound/soc/codecs/aw88399.c是给 SoC I2S 拓扑用的,不能驱动“挂在 HDA codec 旁边”的 AW88399。 -
ACPI 只枚举出一个功放实例
AWDZ8399没有加入serial-multi-instantiate的双实例表,旧内核只创建了一个 I2C client。 -
ALC287 缺少 Legion fixup
低音 pin0x17默认接到没有音量控制的 DAC0x06;需要 Legion 专用 fixup 强制改到 DAC0x02,并关闭未使用的 pin0x1d。 -
缺少固件
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 获取固件
上游修复项目:
- 项目主页:https://github.com/nadimkobeissi/16iax10h-linux-sound-saga
- 固件文件页:https://github.com/nadimkobeissi/16iax10h-linux-sound-saga/blob/main/fix/firmware/aw88399_acf.bin
- Ubuntu 26.04 构建指南:https://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/UBUNTU_26_04.md
最稳妥的方式是直接 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 指南分支:
- 补丁文件页:https://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/fix/patches/16iax10h-audio-linux-7.0.patch
- 分支主页:https://github.com/jbravoMlg/16iax10h-linux-sound-saga/tree/add-ubuntu-26-04-audio-guide
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 found | sudo apt install gawk |
openssl/opensslconf.h: No such file | sudo 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 0x411111f0 | fixup 把未使用 pin 0x1d 设为 bogus pin | 正常提示,不是错误 |
启动报 bad shim lock signature | Secure Boot 拦截未签名内核 | 关闭 Secure Boot,或签名并注册 MOK |
| NVIDIA 不可用 | 新内核没有对应模块 | 按 7.6 重编;或使用 nvidia-dkms |
编译报 gawk: not found | 系统只有 mawk | sudo apt install gawk |
编译报 openssl/opensslconf.h 找不到 | 缺 libssl-dev | sudo 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. 升级与维护
-
Ubuntu 更新内核后,修复会失效
新的linux-image-generic没有这个补丁,GRUB 默认项会切到新内核。处理方式:- 在 GRUB 中固定启动
7.0.14-aw88399; - 或删除/屏蔽新内核;
- 或等 7.3+ 内核再升级。
- 在 GRUB 中固定启动
-
7.3+ 的上游支持
AW88399 HDA side-codec 驱动已经合入 Linux 7.3。使用 7.3+ 内核时不再需要本补丁,但仍需手动安装固件,直到linux-firmware收录。 -
7.4+ 固件路径
路径改为/lib/firmware/awinic/aw88399_acf_<SSID>.bin,注意按 SSID 命名。 -
每次换内核都要重编 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.bin | https://github.com/nadimkobeissi/16iax10h-linux-sound-saga/blob/main/fix/firmware/aw88399_acf.bin | 功放固件,页面右上角“Download raw file” |
16iax10h-audio-linux-7.0.patch | https://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/fix/patches/16iax10h-audio-linux-7.0.patch | 7.0 内核 backport 补丁 |
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.2.9 内核补丁 |
UBUNTU_26_04.md | https://github.com/jbravoMlg/16iax10h-linux-sound-saga/blob/add-ubuntu-26-04-audio-guide/UBUNTU_26_04.md | Ubuntu 构建步骤 |
| 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 实测。内核和驱动更新后,路径、配置项、固件位置可能变化,请以对应版本的源码和上游说明为准。
修复Lenovo Legion Y9000P IAX10H 在Ubuntu26.04下的AW88399低音功放
https://www.wsjj.top/archives/176
评论