为何Buildroot构建过程中拒绝我的自定义设备树目录?
我在使用自定义设备树时做了以下操作:
- 为排除设备树语法错误,下载原始dts文件并重命名为
custom-bananapro.dts(目的是掌握自定义设备树的完整流程) - 将
custom-bananapro.dts保存到/home/oleg/Documents/buildroot/my_oleg目录 - 在Buildroot的menuconfig中配置:
- 树内设备树源文件名 = custom-bananapro
- 树外设备树源文件路径 =
/home/oleg/Documents/buildroot/my_oleg
Buildroot构建时出现错误:
cp -f /home/oleg/Documents/buildroot/my_oleg /home/oleg/Documents/buildroot/output/build/linux-5.4.7/arch/arm/boot/dts/
cp: -r not specified; omitting directory '/home/oleg/Documents/buildroot/my_oleg'
make[1]: *** [package/pkg-generic.mk:283: /home/oleg/Documents/buildroot/output/build/linux-5.4.7/.stamp_built] Error 1
make: *** [Makefile:82: _all] Error 2
后续尝试修改U-Boot设备树配置:
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH=/home/oleg/Documents/buildroot/my_oleg
但Buildroot构建仍报类似错误:
cp -f /home/oleg/Documents/buildroot/my_oleg /home/oleg/Documents/buildroot/output/build/uboot-2022.04/arch/arm/dts/
cp: -r not specified; omitting directory '/home/oleg/Documents/buildroot/my_oleg'
make[1]: *** [package/pkg-generic.mk:283: /home/oleg/Documents/buildroot/output/build/uboot-2022.04/.stamp_built] Error 1
make: *** [Makefile:82: _all] Error 2
问题核心是配置路径时指向了目录而非具体的dts文件,Buildroot执行cp命令时试图复制整个目录,但未添加-r参数导致失败。
修正步骤:
Linux设备树配置:
在menuconfig中,将「树外设备树源文件路径」改为具体的dts文件路径:/home/oleg/Documents/buildroot/my_oleg/custom-bananapro.dts
「树内设备树源文件名」保持custom-bananapro即可。U-Boot设备树配置:
将BR2_TARGET_UBOOT_CUSTOM_DTS_PATH的值修改为具体文件路径:/home/oleg/Documents/buildroot/my_oleg/custom-bananapro.dts重新执行Buildroot构建命令:
make clean && make
这样Buildroot会正确复制单个dts文件,而非尝试复制整个目录,即可解决cp命令报错问题。
内容的提问来源于stack exchange,提问作者kemal

