温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
主要出现在 x86_64 固件中,通常发生于软路由,系统启动后稍等一两分钟,查看内核日志,或者显示器,会有这么一串:
[ 65.613323] i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/glk_dmc_ver1_04.bin. Disabling runtime power management.
[ 65.624794] i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
ChatGPT 说,这个错误提示是关于 i915 集成显卡驱动的问题,指出了在加载 DMC 固件时失败。
解决方案如下:
1、找一个 Linux 系统,比如 Ubuntu,因为要用到命令 cpio
在 OpenWrt 中是没有的;
2、在任意地方创建一个文件夹,比如 test
,然后在 test
目录下创建目录 /lib/firmware/i915
,最终目录结构应该是:
/test/lib/firmware/i915
3、根据错误提示,将系统提示缺少的文件,通过系统提示的连接下载下来,比如我是缺少glk_dmc_ver1_04.bin
这个文件,那就去https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
,找到 glk_dmc_ver1_04.bin
然后点左上角的(plain)下载,并将下载的这个文件放到刚刚建立的 /test/lib/firmware/i915
目录下,最终目录结构应该是:
/test/lib/firmware/i915/glk_dmc_ver1_04.bin
4、然后进入到 /test/
目录,在此目录下执行命令:
find . | cpio -o -H newc >dmc.cpio
这样会生成一个dmc.cpio
文件
5、将dmc.cpio
文件复制到软路由的/boot
目录下,最终目录结构是这样的:
/boot/dmc.cpio
6、修改/boot/grub/grub.cfg
文件,在文件中加入 initrd /boot/dmc.cpio
,示例:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 --rtscts=off
terminal_input console serial; terminal_output console serial
set default="0"
set timeout="5"
search -l kernel -s root
menuentry "OpenWrt" {
linux /boot/vmlinuz root=PARTUUID=c08eae04-04d7-3b08-205e-fa50fb5f3d02 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
initrd /boot/dmc.cpio
}
menuentry "OpenWrt (failsafe)" {
linux /boot/vmlinuz failsafe=true root=PARTUUID=c08eae04-04d7-3b08-205e-fa50fb5f3d02 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
}
保存后重启,再次查看日志,显示:
[ 3.005410] i915 0000:00:02.0: [drm] couldn't get memory information
[ 3.012474] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/glk_dmc_ver1_04.bin (v1.4)
[ 3.021275] [drm] Initialized i915 1.6.0 20200917 for 0000:00:02.0 on minor 0
[ 3.046618] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[ 3.057082] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
就表示加载成功,至于 Cannot find any crtc or sizes
是说没有接显示器,问题不大。
这个插件的一个很重要的作用就是,可以省电!
参考文章:
1、《Silly little i915 issue on x86》
2、《[openwrt(x86)] 一个不太爽的小问题解决,官方固件Failed to load DMC firmware i915 不需要自制固件》