树莓派Pi400无法进入initramfs shell 启动后HDMI黑屏
问题核心原因
黑屏本质是initramfs镜像未内置vc4-kms-v3d驱动及相关依赖,内核启动过程中加载KMS显示栈时,initramfs环境没有对应驱动支撑HDMI输出,直接切为黑屏,自然看不到initramfs shell交互界面。
排查解决步骤
第一步:先确认initramfs本身是否正常
把SD卡拔下来插其他电脑上,挂载boot分区,编辑config.txt,先把KMS驱动注释掉换成FKMS:#dtoverlay=vc4-kms-v3d dtoverlay=vc4-fkms-v3d顺便检查cmdline.txt里有没有把console重定向到串口的配置(比如带
ttyAMA0的console参数),如果有先删掉,保证console输出到tty1。改完插回Pi400开机,能正常进initramfs命令行的话,就确认是initramfs缺KMS驱动的问题。第二步:按需选择修复方案
方案1(省事,不影响LUKS加密):就保留vc4-fkms-v3d配置,不用折腾initramfs打包,直接继续LUKS加密配置即可,唯一区别是启动阶段用FKMS输出,进系统后如果要切回KMS,等加密配置完再调整。
方案2(必须用KMS驱动):进正常启动的树莓派系统,重新打包带KMS依赖的initramfs:- 编辑
/etc/initramfs-tools/modules,加入以下模块,确保打包时把显示相关模块加进去:
vc4 drm_kms_helper drm cec snd_bcm2835 fb_sys_fops syscopyarea sysfillrect sysimgblt i2c_bcm2835- 在
/etc/initramfs-tools/hooks/目录下新建名为add_vc4_deps的钩子脚本,把KMS需要的固件、设备树复制到initramfs里,脚本内容:
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ"; } case "$1" in prereqs) prereqs; exit 0;; esac . /usr/share/initramfs-tools/hook-functions mkdir -p ${DESTDIR}/lib/firmware ${DESTDIR}/boot/overlays cp -a /lib/firmware/brcm ${DESTDIR}/lib/firmware/ cp /boot/overlays/vc4-kms-v3d.dtbo ${DESTDIR}/boot/overlays/ exit 0- 给脚本加执行权限,重新生成initramfs:
chmod +x /etc/initramfs-tools/hooks/add_vc4_deps mkinitramfs -o /boot/initramfs.gz- 把config.txt里的驱动改回
dtoverlay=vc4-kms-v3d,重启就能在KMS模式下正常看到initramfs输出。
- 编辑
第三步:LUKS加密适配补全
做LUKS全盘加密还要确认initramfs里打包了cryptsetup和USB键盘驱动,不然能显示界面也输不了密码:- 编辑
/etc/cryptsetup-initramfs/conf-hook,确认CRYPTSETUP=y没有被注释 - 在
/etc/initramfs-tools/modules里追加usbhid、hid_generic模块,用无线键盘的话再加对应无线接收器的驱动模块 - 重新执行
mkinitramfs -o /boot/initramfs.gz打包即可
- 编辑
内容的提问来源于stack exchange,提问作者doxi
相关产品推荐
相关产品推荐

