在嵌入式编程中,使用uboot时应该修改哪些dts文件?

In embedded programming, when using uboot which dts files should i modify?

除了 uboot 文档外,我还需要更多参考资料。有什么我可以阅读以加深理解的吗?

我对在使用 uboot 时我的构建使用的 dts 文件感到困惑。我是否修改 kernel/uboot/ 目录的所有相关 dts 文件。

还是在特定文件中设置?我可以告诉我在启动到 linux 后使用了哪个 dts 吗?

比如我用的是imx8mq-evk板,但是有很多dts文件可以选择。

嗯,你的问题有很多部分。让我们从 U-Boot 中的 configs/imx8mq_evk_defconfig 开始,我们可以在其中看到:

CONFIG_DEFAULT_DEVICE_TREE="imx8mq-evk"

所以在这种情况下,arch/arm/dts/imx8mq-evk.dts 是主要的 dts,并将#include 它需要的所有 dtsi 文件。除了一个例外。文件 arch/arm/dts/imx8mq-evk-u-boot.dtsi 也将自动包含。

您应该为 U-Boot 修改哪些文件? ONLY arch/arm/dts/imx8mq-evk-u-boot.dtsi 直接修改,所有其他文件都是从 Linux内核源码。顺便说一句,是的,有反例,但他们没有遵循最佳实践。

什么设备树将传递给内核?嗯,这有点取决于你。假设您正在使用 bootefi(以及其他加载程序,例如 GRUB 或 systemd-boot,或者只是直接从内核构建中引导 Image 文件),如果您不'传入设备树在内存中的地址,U-Boot正在使用的地址将被传递。否则你会 load 来自其他来源的 dtb 文件,通常是 $fdt_addr_r 指向的内存地址,然后将其作为第二个参数传递给 bootefi。如果您使用 booti 启动,则您加载到内存中的设备树是传递的第三个参数,通常也是 $fdt_addr_r.

现在,您注意到有很多 dtb 文件,这是事实,但是这个平台没有自动逻辑来确定要使用哪些外围设备,这是所有其他变体的来源,额外的 IO 你已根据您的特定需求在 EVK 上进行配置。