解决更新 6.9.1 版本内核后 MT7921 蓝牙不可用问题

解决更新 6.9.1 版本内核后 MT7921 蓝牙不可用问题

RayAlto OP

今天早上想用蓝牙键盘维护一下我的路由器,然后发现键盘连不上了, SSH 进去用 bluetoothctl 看的话发现蓝牙适配器没了,想到蓝牙来自于我的 MT7921 网卡,又去看我的手机,发现 MT7921 开的 Wifi 还在。

确定问题只出现在蓝牙模块上,去看日志,搜索 Bluetooth 后发现了这几行日志:

1
2
3
May 18 09:25:52.736759 RayAltoNAS kernel: bluetooth hci0: Direct firmware load for mediatek/BT_RAM_CODE_MT7961_1a_2_hdr.bin failed with error -2
May 18 09:25:52.737091 RayAltoNAS kernel: Bluetooth: hci0: Failed to load firmware file (-2)
May 18 09:25:52.737115 RayAltoNAS kernel: Bluetooth: hci0: Failed to set up firmware (-2)

MT7921 对应的蓝牙模块的固件加载失败了,而 -2 取正得到的 2 正好对应 ENOENT 2 No such file or directory

/usr/lib/firmware 里只能找到 mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.zstpacman -Fx MT7961 也没找到包含 BT_RAM_CODE_MT7961_1a_2_hdr 文件的软件包,到这里我就不知道怎么办了。

咕咕噜了一下 BT_RAM_CODE_MT7961_1a_2_hdr ,搜到了这个 Mail Thread ,使用 @mediatek.com 邮箱的 Peter Tsao (曹珆彰) 说 MT7921 仍在使用 BT_RAM_CODE_MT7961_1_2_hdr ,后面会给 MT7920 推一个新的 FW bin 。

我正好在用 MT7921 ,所以我大胆猜测创建一个软链接就可以解决这个问题:

1
ln -s /usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.zst /usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1a_2_hdr.bin.zst

重启之后蓝牙确实正常工作了,继续深入的话可以看到这个 commit 应该就是这个报错的罪魁祸首。

我在用 ArchLinux ,我猜这个问题的影响范围是使用 6.9.1 版本内核的用户,比如我在用 linux-zen 6.9.1.zen1-1 ,隔壁使用 linux 6.9.1.arch1-1 的可能也会有这个问题,估计后面内核升级或 linux-firmare 升级可能会解决这个问题,到时候记得移除这个软链接。

目录
解决更新 6.9.1 版本内核后 MT7921 蓝牙不可用问题