配置Yocto镜像使CM4适配官方树莓派7英寸DSI显示屏
解决树莓派CM4(Yocto镜像)DSI官方7寸显示屏不亮问题
问题核心
你遇到的问题源于Yocto构建时针对RPi4的配置未适配CM4的引脚复用逻辑(尤其是CMIO板的DSI接口),加上U-Boot环境下boot分区的配置加载规则与官方OS存在差异,导致dt-blob或设备树overlay未生效。
分步解决方案
1. 修正Yocto MACHINE及基础配置
当前local.conf中MACHINE ?= "raspberrypi4"需根据CM4架构调整,同时添加CM4专属的外设配置:
- 若为64位CM4,修改MACHINE:
MACHINE ?= "raspberrypi4-64" - 在
local.conf中追加以下配置,自动写入config.txt并适配CMIO板:# 启用KMS驱动,指定默认LCD为DSI屏 RPI_EXTRA_CONFIG += "dtoverlay=vc4-kms-v3d" RPI_EXTRA_CONFIG += "enable_dpi_lcd=0" RPI_EXTRA_CONFIG += "display_default_lcd=1"
2. 定制并部署CM4专用dt-blob.bin
CM4的CMIO板需要专属的引脚配置文件,不能直接复用RPi4B的:
- 获取树莓派官方针对CMIO板的引脚定义文件
dt-blob-cm4io.dts - 编译为二进制文件:
dtc -I dts -O dtb -o dt-blob.bin dt-blob-cm4io.dts - 在Yocto中配置自动部署到boot分区,避免手动拷贝:
IMAGE_BOOT_FILES += "dt-blob.bin"
3. 确保DSI显示屏overlay正确打包加载
需要让Yocto将官方DSI屏的overlay文件包含到镜像中,并正确加载:
- 在
local.conf中添加overlay配置:# 确保vc4-kms-dsi-7inch.dtbo被打包到镜像 RPI_KERNEL_DEVICETREE_OVERLAYS_append = " overlays/vc4-kms-dsi-7inch.dtbo" # 配置加载该overlay RPI_EXTRA_CONFIG += "dtoverlay=vc4-kms-dsi-7inch"
注意:不要同时加载
vc4-fkms-v3d和vc4-kms-dsi-7inch,KMS和FKMS驱动二选一,优先使用官方推荐的KMS版本。
4. 适配U-Boot配置
由于启用了RPI_USE_U_BOOT = "1",需确保U-Boot能正确解析config.txt:
- 在
local.conf中添加U-Boot的RPI配置支持:UBOOT_CONFIG += "rpi"
这会确保U-Boot读取config.txt中的设备树及驱动配置。
5. 重新构建镜像
清理旧构建缓存并重新编译镜像:
# 替换为你实际使用的镜像名称,比如core-image-base bitbake -c cleanall core-image-base bitbake core-image-base
验证步骤
镜像刷入CM4后,执行以下操作确认配置生效:
- 查看boot分区的
config.txt,确认包含以下内容:dtoverlay=vc4-kms-v3d dtoverlay=vc4-kms-dsi-7inch enable_dpi_lcd=0 display_default_lcd=1 - 检查boot分区中存在
dt-blob.bin和overlays/vc4-kms-dsi-7inch.dtbo文件 - 重启设备后,通过
dmesg | grep dsi查看内核日志,确认DSI驱动正常加载(输出中应包含类似dsi: connected的信息)
内容的提问来源于stack exchange,提问作者embedwork
相关产品推荐
相关产品推荐

