Buildroot使用问题:自定义开发板应如何正确修改设备树?
Buildroot下修改自定义开发板设备树的最佳实践
Buildroot的设备树加载逻辑和Yocto本质类似,最终都是向内核传递编译好的dtb文件,但修改流程比Yocto更轻量化,根据改动量大小可以选择两种方案:
方案1:基于原厂公版设备树做增量修改(适合小改动场景)
如果你的开发板是基于公版方案修改,仅需要调整引脚、开关外设这类小改动,优先用增量修改方案,避免全量复制公版dts带来的后续内核升级兼容问题:
- 在Buildroot根目录创建自定义设备树存放路径,比如
board/<厂商名>/<开发板型号>/dts/ - 在上述路径下新建你的自定义dts文件,直接引用公版dts做覆写即可,示例:
// 引用同架构公版设备树 #include "imx6ull-14x14-evk.dts" // 调整UART1配置 &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>; status = "okay"; }; // 关闭闲置的CAN控制器 &can1 { status = "disabled"; };
- 执行
make menuconfig修改Buildroot配置:- 进入
Kernel菜单,在Custom device tree file names项填写你的dts文件名(不需要带.dts后缀),比如imx6ull-myboard - 在
Additional build directory kernel options项添加自定义dts路径配置:BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="board/<厂商名>/<开发板型号>/dts/"
- 进入
- 保存配置后重新编译即可生效:
make linux-rebuild all
方案2:全量使用自定义设备树(适合公版dts复用率极低的场景)
如果你的开发板硬件改动极大,公版dts可用内容很少,可以直接用全量自定义设备树:
- 把你写好的全量dts和关联dtsi文件统一放到
board/<厂商名>/<开发板型号>/dts/路径下 - menuconfig配置和方案1一致,填写对应的设备树文件名和路径即可,同时要确认内核配置中已开启对应架构的设备树支持
- 建议把配套的Buildroot配置保存为defconfig:执行
make savedefconfig,生成的defconfig文件可以存到自定义board路径下,后续直接用make <defconfig文件名>即可加载全套配置
改动验证
编译完成后生成的dtb文件存放在output/images/目录下,你可以直接替换到开发板的启动分区测试;开发板启动后执行cat /proc/device-tree/model即可确认当前加载的是否为自定义设备树。
和你之前使用的Yocto不同,Buildroot不需要编写bbappend文件覆盖设备树,直接指定自定义路径即可生效,流程更简单;如果需要同步修改内核配置,执行make linux-menuconfig修改后,用make linux-update-defconfig即可把配置保存到你的自定义路径做版本绑定
内容的提问来源于stack exchange,提问作者Simo S
相关产品推荐
相关产品推荐

