当前位置: 首页 > news >正文

buildroot的overlay文件拷贝机制BR2_ROOTFS_OVERLAY

Buildroot在应用多个Overlay目录时,采用的是“顺序拷贝,后者覆盖前者”的简单机制

顺序拷贝与同名覆盖

这个过程的核心可以拆解为两个基本动作:

  1. 顺序处理:当你在BR2_ROOTFS_OVERLAY中指定了多个Overlay目录(例如dirA dirB),Buildroot会严格按照从左到右的顺序去处理它们。

  2. 同名覆盖:对每个Overlay目录,Buildroot会使用rsync命令,将其内容递归地复制到最终的文件系统目录output/target/中。当rsync在复制过程中遇到与目标路径下已存在且文件名相同的文件时,默认行为就是直接覆盖

这个“顺序+覆盖”的机制,确保了后面的Overlay目录拥有最高的定制优先级。

📝 针对你的场景分析

将此原理应用到你的配置 (BR2_ROOTFS_OVERLAY+="board/rockchip/rk3562/fs-optmv-app-scs3/ board/rockchip/rk3562/fs-optmv-scs3/"),执行流程如下:

  1. 先处理fs-optmv-app-scs3:Buildroot会先将fs-optmv-app-scs3目录下的所有内容复制到output/target/根目录中。

  2. 再处理fs-optmv-scs3:紧接着,Buildroot会处理fs-optmv-scs3目录,同样将其内容复制到output/target/

  3. 发生覆盖:如果这两个目录在相同路径下(比如都有/usr/bin/my_app),那么作为后者的fs-optmv-scs3目录中的同名文件,就会覆盖掉前者fs-optmv-app-scs3中已存在的那个文件。最终,在生成的根文件系统中,你将看到fs-optmv-scs3中的那个版本。后者覆盖前者

💡 如何应对覆盖

理解了这个原理,你可以根据需求选择以下策略:

  • 按需调整顺序:让重要文件后出现。如果需要fs-optmv-app-scs3中的文件不被覆盖,可以将其放在后面。

  • 合并同路径文件:如果需要在已有文件基础上追加内容,可先将被覆盖的文件内容提取到fs-optmv-scs3的同名文件中进行整合,或使用更灵活的post-build脚本。

  • 区分独立文件:如果两个目录的内容完全独立且无路径冲突,则无需担心。

💎 总结

BR2_ROOTFS_OVERLAY机制的本质就是一个按顺序执行的rsync复制过程,后处理的目录会覆盖前者的同名文件。在设计你的Overlay目录结构时,深刻理解并利用这个“顺序覆盖”原则,可以帮助你更精确地控制最终的根文件系统。

举个栗子:

合入的bin文件没法同步更新到位,简单理解就是在buildroot下面的overlay拷贝文件的时候,先后顺序问题导致没有拷贝过去。

原本的:

hzs@sr658:~/rk3562-v1.2.0-sdk/buildroot$ git diff ./ diff --git a/configs/rockchip_rk3562_scs3_defconfig b/configs/rockchip_rk3562_scs3_defconfig index 6891ab51cb..ba1664db79 100644 --- a/configs/rockchip_rk3562_scs3_defconfig +++ b/configs/rockchip_rk3562_scs3_defconfig @@ -32,7 +32,7 @@ BR2_PACKAGE_ROCKCHIP_MALI=y BR2_TARGET_GENERIC_HOSTNAME="RK3562" BR2_TARGET_GENERIC_ROOT_PASSWD="1" BR2_ROOTFS_OVERLAY+="board/rockchip/rk3562/fs-optmv-app-scs3/ board/rockchip/rk3562/fs-optmv-scs3/"

原本以为后面的会覆盖前面的,所以尝试修改为:

编译后还是无效,经排查

但实际的打包到的是:board/rockchip/rk3562/fs-optmv-app-scs1/

结合buildroot的提交,那么在原有的基础上增加多一个拷贝目录即可

注意,在编译的时候,最好先在buildroot的output目录工程下面target执行rm -rf 删除执行的先,再去编译确保更新到位

最后解决方案为在buildroot的配置文件中修改如下:

/buildroot$ vim configs/rockchip_rk3562_scs3_defconfig

#BR2_ROOTFS_OVERLAY+="board/rockchip/rk3562/fs-optmv-app-scs3/ board/rockchip/rk3562/fs-optmv-scs3/" BR2_ROOTFS_OVERLAY+="board/rockchip/rk3562/fs-optmv-app-scs3/ board/rockchip/rk3562/fs-optmv-scs3/ board/rockchip/rk3562/fs-optmv-app-scs1/

http://www.rkmt.cn/news/1397985.html

相关文章:

  • Python内置函数从入门到实战:list、open等核心用法全解析
  • 知识图谱与BERT融合:基于深度Inception网络的网页分类实践
  • 避坑指南:Win10/Win11系统下Origin2018安装失败与闪退问题全解决
  • 斯坦福CS224W图机器学习笔记:我用Python+PyG复现了课程里的Node Embeddings实验
  • 告别WebGL!用Unity Embedded Browser插件在PC游戏里无缝嵌入你的数据可视化大屏(ECharts实战)
  • 保姆级教程:用PySwarms的GlobalBestPSO搞定机器人逆运动学优化(附完整代码)
  • 别再瞎调超参数了!用Python手把手教你实现Batch Norm,让模型训练快10倍
  • 基于CLIP与DINOv2的语义驱动多模态图像融合方法GFFusion解析
  • 智能驾驶多传感器融合:从原理到产业,一篇讲透
  • 5分钟上手H5P交互式视频:让普通视频变身互动学习平台的完整指南
  • 推荐题目:洛谷 P1003 [NOIP 2011 提高组] 铺地毯
  • 基于c-TF-IDF的课程学习策略:提升人格检测模型性能
  • Ubuntu 20.04.2 离线环境求生指南:手把手搞定GCC、OpenMPI等开发套件(附全套deb包)
  • 告别卡顿!从X11到Wayland:一次桌面显示协议的“现代化”升级实战(附Weston配置避坑)
  • 基于RNN的中文微博情感分析:从词向量到序列建模的实践
  • 2026年5款文生视频横评:提示词写不好怎么快速试错
  • C语言goto语句的正确使用与替代方案
  • 量子点光子量子计算:原理、误差与优化策略
  • 基于轮速信号谱分析的路面粗糙度智能感知方法
  • Ubuntu 20.04 装 ROS Noetic 卡在密钥错误?手把手教你两种修复方法(附清华源配置)
  • 告别输入法折腾:Arch Linux + Xfce 环境下 Fcitx5 的“一次配置,处处可用”指南
  • 规范驱动开发:从OpenAPI到契约测试的API设计实战
  • 为什么92%的翻译平台在V3迭代时崩溃?Lovable平台稳定性架构设计,48小时上线零回滚
  • 2026年资质代理代办流程评测:代理记账报税、代理记账收费标准、建筑资质代理代办、成都代理记账、成都公司注册、成都资质代理代办选择指南 - 优质品牌商家
  • 最简单的汇编语言 grep - x86_64 Linux
  • 神经形态计算:生物启发的下一代AI硬件架构
  • 上班族必备:2026年PDF转Word免费分享,告别手动打字 - 时时资讯
  • 鸿蒙智慧停车页面构建:深色主题与车位数据可视化详解
  • C51编译器DPTR寄存器优化技巧与实战应用
  • 保姆级教程:在Ubuntu 20.04上用Qt5调用海康威视SDK(附Demo适配避坑指南)