手動更新 Linux Firmware
Contents
最近一個禮拜筆電一直偶發當機。當機時 Caps Lock 會動,螢幕不會動,只能強制重開,趁週末修一下。
Framework 13 AI 300 series
journalctl -b 0
kernel: amdgpu 0000:c1:00.0: amdgpu: MES failed to respond to msg=MISC (WAIT_REG_MEM)
kernel: amdgpu 0000:c1:00.0: amdgpu: failed to reg_write_reg_wait
...
kernel: amdgpu 0000:c1:00.0: amdgpu: MES ring buffer is full.根據錯誤訊息找到類似的
不過不太一樣,後來在 gitlab 上找到真正的問題
amdgpu: MES ring buffer is full. (Linux 6.18/linux-firmware-20251125) (#4749) · Issue · drm/amd
修法是要裝沒問題版本的 firmware。
Fix
可以等發行版更新,或手動修。我受不了就手動修了
先確認版本,是 MES 0x83
sudo cat /sys/kernel/debug/dri/0000:c1:00.0/amdgpu_firmware_info
# MES feature version: 1, firmware version: 0x00000083根據討論串訊息,下載 amdgpu/gc_11_5_0_mes_2.bin
確認目標位置有備份檔
md5sum /usr/lib/firmware/amdgpu/gc_11_5_0_mes_2.bin.xz /lib/firmware/amdgpu/gc_11_5_0_mes_2.bin.xz檔案格式
file /usr/lib/firmware/amdgpu/gc_11_5_0_mes_2.bin.xz
# /usr/lib/firmware/amdgpu/gc_11_5_0_mes_2.bin.xz: XZ compressed data, checksum CRC32壓縮檔案。要指定 crc32,我沒指定預設 crc64 結果無法載入
xz --check=crc32 gc_11_5_0_mes_2.bin
# move file
sudo mv gc_11_5_0_mes_2.bin.xz /lib/firmware/amdgpu更新 initramfs
Gemini:
- Ubuntu/Debian:
sudo update-initramfs -u- Fedora/RHEL:
sudo dracut --force- Arch Linux:
sudo mkinitcpio -P
我只更新一個 kernel,方便弄錯時可以直接切另一個
ls /etc/mkinitcpio.d
# linux612.preset linux617.preset
sudo mkinitcpio -p linux617接著重開機就好
可以再確認版本有 rollback,journalctl 中也沒有錯誤了
sudo cat /sys/kernel/debug/dri/0000:c1:00.0/amdgpu_firmware_info
# MES feature version: 1, firmware version: 0x00000080