U-Boot嵌入式开发需修改哪些DTS文件?如何确认使用的DTS?
U-Boot嵌入式开发常见问题解答
问题1:除了U-Boot官方文档外,还有哪些参考资料可以帮助深入理解相关知识?
- 芯片原厂BSP专属文档:比如你使用的i.MX8MQ对应NXP官方发布的BSP开发手册,里面有针对该系列芯片定制的U-Boot适配逻辑、移植步骤、板级配置说明,比通用U-Boot文档更贴合实际硬件平台。
- 经典嵌入式技术书籍:比如《U-Boot权威指南》、《嵌入式Linux系统开发详解》中U-Boot相关章节,会从启动流程、驱动框架、移植方法等维度做系统性讲解。
- 开发板官方用户指南:imx8mq-evk的原厂用户手册会明确给出默认U-Boot配置、dts匹配规则、外设适配示例等针对性内容。
- U-Boot源码自带资料:源码根目录下
doc/文件夹中的平台特定说明,以及arch/arm/mach-imx/路径下的同架构板卡配置、代码注释,都是非常实用的一手参考。
问题2:U-Boot编译时实际调用哪些dts文件,是否需要同时修改kernel/和uboot/目录下的相关dts文件?
如何确认U-Boot编译调用的dts
U-Boot的dts默认存放在arch/arm/dts/目录下,编译时调用的dts和你选择的defconfig绑定:在对应defconfig文件中搜索CONFIG_DEFAULT_DEVICE_TREE配置项,该项的值就是编译用的dts文件名(去掉.dts后缀)。以imx8mq-evk为例,默认defconfig中该配置值为imx8mq-evk,对应调用的就是imx8mq-evk.dts。
是否需要同时修改U-Boot和内核的dts
不需要同时修改两份,按需修改即可:
- 如果是U-Boot启动阶段用到的硬件配置,比如DRAM参数、启动介质引脚配置、SPL相关配置、U-Boot阶段的外设驱动参数,只需要修改U-Boot目录下的对应dts。
- 如果是Linux内核运行阶段用到的硬件配置,比如外设驱动参数、GPIO分配、总线配置、分区表配置等,只需要修改Kernel目录下的对应dts。
部分NXP的BSP包支持U-Boot复用Kernel的dts,你可以在U-Boot配置中指定KERNEL_DTS参数指向内核dts路径,即可避免两份dts重复维护的问题。
问题3:系统启动进入Linux后,如何确认当前运行使用的是哪个dts文件?
可以通过以下两个常用方法确认:
- 读取设备树兼容属性:执行命令
cat /proc/device-tree/compatible | tr '\0' '\n',输出的第一个字符串就是当前dts根节点的compatible属性值,和你本地dts文件根节点的属性对比即可确认对应文件。 - 查看内核启动日志:执行命令
dmesg | grep "Machine model:",输出的设备型号就是当前dts根节点的model属性值,可直接对应到所用的dts文件。
你提到的imx8mq-evk可选dts列表如下图:
内容的提问来源于stack exchange,提问作者munchiis
相关产品推荐
相关产品推荐

