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

rootfs overlay 灵活自定义

1. 需求是什么 (What you need)

在 Rockchip 平台开发时会有需要:

  1. 把定制文件加入 rootfs
    例如 iqfiles, 自启动脚本, 闭源程序
  2. 不修改 Buildroot 源码
    不改 package, 不改 Kconfig, 不动 external tree
  3. 让系统打包时自动把这些自定义文件放进最终镜像
    不需要额外手动复制, 不需要后处理
  4. 能覆盖系统默认文件
    包括 /etc, /usr/lib, /usr/bin 之类的目录

因此我们需要一个稳定、可控、可预测的 rootfs 自动修改方案(每一次编译都会应用修改)。


2. 为什么选择 rootfs overlay (Why)

2.1 因为 Buildroot 的 package 系统不保证每个文件都能通过 Kconfig 添加

比如我遇到的问题: rkaiq iqfile

  • Buildroot menuconfig 里配置选项默认为空, 不知道怎么修改不会影响默认配置
  • Kconfig 的字符串配置无法将 iq 文件放到目录
  • Rockchip 的 rkaiq Makefile 逻辑复杂怕踩坑影响正常运行

所以 直接用 overlay 放文件比修改 package 安全太多


2.2 overlay 是 Buildroot 设计的正规扩展方式

它就是为 产品化定制文件 准备的官方推荐方案:

  • 固件
  • 配置文件
  • system scripts
  • sensor iqfiles
  • overlay GUI 文件
  • systemd/busybox 启动脚本

2.3 overlay 的优先级最高, 能覆盖 package 安装的文件

rootfs final files = installed package files + overlay files

overlay 最后执行 → 最终生效
这保证了:

  • 不需要 patch rkaiq
  • 不需要改 rockchip buildroot
  • 不需要 hack install hooks

放进 overlay 的内容就是最终 rootfs 的内容。


2.4 overlay 不会影响 sysroot 和编译流程

不会破坏:

  • 交叉编译工具链
  • host build
  • target 构建规则
  • package install 逻辑

这是它比 post-build 或自定义 package 更安全的原因。


2.5 overlay 是可维护、可版本控制的

只需修改 buildroot 配置 BR2_ROOTFS_OVERLAY, 就可以指定overlay位置, 可以做到用 git 做版本管理


3. 示例使用 (How)

3.1 创建 overlay 目录 (推荐放在 Rockchip board 下)

路径:

buildroot/board/rockchip/rk356x/fs-overlay/

把需要直接放到 rootfs 里的内容复制到当前目录

目录结构示例:

.
├── etc
│   ├── EdgeVision
│   │   ├── EdgeVision
│   │   ├── coco_80_labels_list.txt
│   │   └── yolov5s_relu.rknn
│   ├── iqfiles
│   │   └── imx415_CMK-OT2022-PX1_IR0147-50IRC-8M-F20.json
│   └── profile.d
│       └── start.sh
└── usr├── bin│   ├── restart_rknn.sh│   ├── rknn_server│   ├── start_rknn.sh│   └── taskset└── lib└── librknnrt.so

3.2 在 defconfig 启用 overlay

检查:

BR2_ROOTFS_OVERLAY="board/rockchip/rk356x/fs-overlay"

如果没有, 加进去:

echo 'BR2_ROOTFS_OVERLAY="board/rockchip/rk356x/fs-overlay"' >> configs/xxx_defconfig

验证:

grep BR2_ROOTFS_OVERLAY output/.config

3.3 overlay 的文件权限不会自动修复, 要手动 chmod

例如我的自启动脚本:

chmod +x board/.../fs-overlay/etc/profile.d/start.sh

注意: 如果自启动脚本对系统服务有依赖, 比如qt 建议把脚本放到 /etc/profile.d/ 下, 另外建议使用&后台运行脚本避免其他脚本堵塞等待


3.4 overlay 自动复制规则

执行 make 时, Buildroot 会:

cp -a board/.../fs-overlay/*  ->  ${TARGET_DIR}/

注意:

  • 目录必须完全匹配 rootfs 结构
  • overlay 中的软链接不安全 (不要用)
  • overlay 覆盖原文件(不会自动追加)
    • 可以使用BR2_ROOTFS_POST_BUILD_SCRIPT指定脚本追加内容到文件(overlay覆盖完成后运行)

3.5 修改 overlay 后必须刷新 Buildroot 缓存

修改 overlay 文件但 make 不会自动检测, 必须手动删 stamp:

rm output/build/buildroot-fs-overlay-stamp

3.6 overlay 不适合放 /dev 内容

因为 Buildroot 会重新创建 devnodes。


3.7 overlay 覆盖 busybox 配置要极度小心

不要放:

fs-overlay/etc/inittab
fs-overlay/etc/fstab

会导致 boot 失败。


总而言之, 就是通过最简单的复制粘贴实现覆盖/修改rootfs

http://www.dtcms.com/a/615316.html

相关文章:

  • 如何把网站做成软件商务网站开发流程
  • 设备驱动程序编程-Linux2.6.10-kdb安装
  • 怎么看别的网站是那个公司做的服装设计最好的出路
  • 免费网站站盐城建设厅网站设计备案
  • 卡尔曼学习笔记
  • seo导航站php网站费用
  • 建设网站收废品做网站找那些公司
  • 信阳企业网站建设公司网上做衣服的网站有哪些
  • 一个服务器可以做两个网站郎溪做网站
  • 前端微前端应用共享状态,Redux Toolkit
  • 算法分析与设计
  • 3.3.GPIO输入
  • 鸿运通网站建设怎么样宝塔系统怎么建设网站
  • 黑马Redis A基础01-命令String类型-JSON格式-Hash类型-List类型-Set类型-SortedSet类型-Redis的java客户端-jedis连接池-Spring集成Redis
  • 做司考题的网站网站完成上线时间
  • 深圳网站网络建设莆田自助建站软件
  • 河北企业建站提供小企业网站建设
  • python网站开发学习东莞网站建设网络公司排名
  • 网站建设访问对象宣传片拍摄哪个好
  • 河南网站推广怎么做软件开发工程师中级职称
  • 团购网站建设公司网站建设和托管
  • Gorm散知识点小结(二)--Where(“1 = 1”)
  • java并发编程系列——waitnotify的正确使用姿势
  • 【ros2】ROS2功能包(Package)完全指南
  • 南昌网站建设渠道seo优化方案案例
  • 温州建设局网站首页网络推广一个月工资多少
  • MYSQL聚合函数
  • 做搜狗手机网站优化网站开发专业的领军人物
  • python 做网站缺点外贸都有哪些平台
  • 服装定制网站的设计与实现俄罗斯搜索引擎yandex