我从
<linux>/board/arch/arm/boot/dts/imx28-evk.dts
制作了 dts 的副本,以便与我的自定义板一起使用。我的自定义设备树名为 imx28-custom.dts
,并在 Buildroot 配置中的 树外自定义 DTS 菜单条目 (BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
) 中指向。
然而,u-boot 配置为使用现有的 MX28 板配置。构建内核后,我在
imx28-custom.dtb
文件夹中有 zImage
和 <buildroot>/output/images
。
系统启动时,u-boot 提示找不到
imx28-evk.dtb
。为什么imx28-custom.dtb
已构建但u-boot找不到?为什么 u-boot 找不到自己的设备树 (imx28-evk.dtb
) 和我为内核定制的设备树?我假设 BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
仅与内核相关。如果 u-boot 尝试使用自己的 imx28-evk.dtb
来实现此目的,我的自定义设备树如何传递到内核?
U-Boot 抱怨找不到设备树与 Linux 内核有关:启动时,U-Boot 将设备树和内核映像从存储加载到内存中的指定地址,然后将控制权交给内核。 i.MX28-EVK 板的默认配置是传递
imx28-evk.dtb
文件。
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
仅用于在要构建和安装的文件中包含自定义设备树,但不配置U-Boot以使用它。
U-Boot 传递到内核的设备树由 U-Boot 的
CONFIG_DEFAULT_FDT_FILE
选项定义(您可以通过键入 make uboot-menuconfig
来编辑它(请参阅最后我的注释),然后在 Boot 下设置 默认 fdt 文件)。此选项应设置为类似 imx28-custom.dtb
。
这里和这里描述了如何从Buildroot配置U-Boot以使其永久化。
对于 i.MX28-EVK,Buildroot 使用 Legacy 构建系统(将使用到 u-boot 2015.04,但配置使用 2020.04),该系统不允许使用
make uboot-menuconfig
命令。您应该能够安全地改变这一点。您需要将 Build system 设置为 Kconfig
并将 Board defconfig 设置为 mx28evk
。