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

关于buildroot文件系统中rootfs的内容,该怎么增删(瑞芯微rv1126b)

在Buildroot中修改根文件系统(Rootfs)主要有3种方法:1)直接修改临时目录output/target/(快速但不持久,适合测试);2)使用Overlay覆盖层(推荐方式,可持久化添加/覆盖静态文件);3)通过自定义软件包(适合需要管理依赖的复杂文件);

在 Buildroot 中对根文件系统(Rootfs)进行文件增删,核心是让修改能被正确纳入最终生成的根文件系统镜像中。根据修改的 “临时性” 或 “持久性” 需求,主要有以下 3 种方法,具体操作和适用场景如下:

一、直接修改临时根文件系统目录(临时测试,最快但不持久)

Buildroot 在编译过程中,会将根文件系统的所有内容临时存放在 output/target/ 目录下(该目录结构与最终设备上的根目录 / 完全一致)。直接修改该目录可快速生效,但执行 make clean 或 make distclean 后会被清空,适合临时验证。

操作步骤:
1. 定位临时目录

        进入 Buildroot 编译输出目录,output/target/ 即为临时根文件系统,例如:

cd buildroot/output/target/

        该目录下的 bin/etc/usr/ 等子目录对应最终根文件系统的 /bin/etc/usr

2.直接增删文件
  • 添加文件:将需要添加的文件复制到对应路径。例如,添加一个 /usr/bin/test.sh 脚本:

cp /path/to/your/local/test.sh output/target/usr/bin/
  • 删除文件:直接删除临时目录中不需要的文件。例如,删除默认的 /etc/init.d/S99banner 启动脚本:
rm -f output/target/etc/init.d/S99banner
3.重新生成镜像

        修改后执行 make 重新编译,Buildroot 会基于 output/target/ 目录的最新内容,重新生成根文件系统镜像(如 output/images/rootfs.ext4),修改会被包含在内。

适用场景:
  • 快速验证文件是否能正常工作(如测试脚本、临时配置);
  • 不需要长期保留的修改(仅用于调试)。

二、使用 Overlay 覆盖层(持久化添加 / 覆盖文件,推荐静态文件)

Overlay 是 Buildroot 官方推荐的持久化定制方式:通过创建一个与根文件系统结构一致的 “覆盖目录”,编译时 Buildroot 会自动将该目录中的文件复制到 output/target/ 中(覆盖原有文件或新增文件),且修改不会因 make clean 丢失。

操作步骤:
1.创建 Overlay 目录结构

在 Buildroot 项目中创建一个 Overlay 目录(路径自定义,通常放在 board/<厂商>/<板子名>/overlay/ 下,便于管理),并按根文件系统的结构组织子目录。例如:

# 假设板子名为“myboard”,创建Overlay目录
mkdir -p board/myboard/overlay/
# 如需添加/etc/myconfig.conf,创建对应etc目录
mkdir -p board/myboard/overlay/etc/
# 如需添加/usr/bin/tool,创建对应usr/bin目录
mkdir -p board/myboard/overlay/usr/bin/
2.放置需要增删的文件
  • 添加新文件:将文件放入 Overlay 的对应路径。例如,添加 /etc/myconfig.conf
cp /path/to/your/myconfig.conf board/myboard/overlay/etc/
  • 覆盖现有文件:若根文件系统中已存在某文件(如 /etc/profile),在 Overlay 中放置同名文件即可覆盖。例如,自定义 profile
cp /path/to/your/custom_profile board/myboard/overlay/etc/profile

(编译时,Overlay 中的 profile 会替换 output/target/etc/profile)。

3.配置 Buildroot 启用 Overlay

执行 make menuconfig 进入配置界面,按以下路径设置 Overlay 目录:

Filesystem images  --->[*] Root filesystem overlay directories  --->  # 勾选启用(../board/myboard/overlay) Path to the overlay directory  # 填写Overlay目录路径
  • 路径需为相对路径(相对于 output/ 目录)或绝对路径。例如,若 Overlay 在 board/myboard/overlay,则相对于 output/ 的路径为 ../board/myboard/overlay(因为 output/ 是编译输出目录,与 Buildroot 根目录同级)。
4.生效验证

执行 make 重新编译,Buildroot 会在构建根文件系统时自动将 Overlay 中的文件复制到 output/target/ 对应路径,最终纳入镜像。

可通过查看 output/target/ 目录确认文件已添加 / 覆盖。

适用场景:
  • 持久化添加静态文件(如配置文件、脚本、证书等);
  • 覆盖系统默认文件(如替换 /etc/init.d 下的启动脚本);
  • 无需删除文件,仅需添加或覆盖的场景。

三、通过自定义软件包(适合需管理依赖的文件,较复杂)

若需要添加的文件是某个 “软件功能” 的一部分(如自定义工具、库),且可能依赖其他软件包,可通过 自定义软件包 的方式管理。Buildroot 会将该软件包的文件安装到根文件系统,并自动处理依赖。

操作步骤:
1.创建自定义软件包目录

在 Buildroot 中,软件包通常放在 package/ 目录下,创建一个自定义包目录(如 package/myapp/):

mkdir -p package/myapp/
2.编写软件包配置文件

在 package/myapp/ 下创建 myapp.mk(定义编译和安装规则)和 Config.in(配置菜单选项)。

  • myapp.mk 示例(仅复制文件,无需编译):

################################################################################
#
# myapp
#
################################################################################MYAPP_VERSION = 1.0
MYAPP_SITE = $(TOPDIR)/board/myboard/myapp  # 本地文件存放路径
MYAPP_SITE_METHOD = local  # 从本地目录获取文件define MYAPP_INSTALL_TARGET_CMDS# 安装文件到目标根文件系统($(TARGET_DIR)即output/target/)$(INSTALL) -D -m 0755 $(@D)/test.sh $(TARGET_DIR)/usr/bin/test.sh$(INSTALL) -D -m 0644 $(@D)/config.ini $(TARGET_DIR)/etc/myapp/config.ini
endef$(eval $(generic-package))
  • Config.in 示例(定义 menuconfig 选项):
config BR2_PACKAGE_MYAPPbool "myapp"helpCustom application with test scripts and configs.
3.放置文件到软件包源目录

按 myapp.mk 中 MYAPP_SITE 的定义,创建 board/myboard/myapp/ 目录,并放入文件:

mkdir -p board/myboard/myapp/
cp /path/to/your/test.sh board/myboard/myapp/
cp /path/to/your/config.ini board/myboard/myapp/
4.在 menuconfig 中启用自定义包

执行 make menuconfig,通过搜索 myapp 找到自定义包,按 Y 选中:

Target packages  --->[*] myapp  # 勾选启用
5.编译生效

执行 make 编译,Buildroot 会将自定义包的文件安装到 output/target/ 对应路径,最终纳入根文件系统。

适用场景:
  • 添加的文件是一个 “功能模块”(如自定义工具、应用程序);
  • 需要管理依赖(如该文件依赖 libssl,可在 Config.in 中通过 select BR2_PACKAGE_LIBSSL 自动拉取依赖);
  • 需将文件纳入 Buildroot 的软件包管理体系(便于复用或升级)。

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

相关文章:

  • Qt 入门简洁笔记:信号与槽
  • 算法入门---专题二:滑动窗口2(最大连续1的个数,无重复字符的最长子串 )
  • 手机摄像头如何识别体检的色盲检查图的数字和图案(下)
  • 政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求
  • 记录一个监控网卡某个IP发送流量
  • Python-UnitTest框架
  • 模型-模型压缩:量化、剪枝、蒸馏、二值化
  • UE5 蓝图-12:pawn蓝图,轴映射-鼠标右键,补充轴映射与操作映射的区别。相机的旋转俯仰逻辑,伸缩逻辑,浮点差值函数 FInterpTo;
  • Vcenter7使用主机配置文件重置ESXI主机 root 密码
  • STL 容器:List
  • 做网站销售好累网上开店的货源渠道有哪些
  • 图像,视频Lora模型训练的Timestep Type时间步类型
  • 告别云端依赖!ComfyUI本地化视频生成实战教程+cpolar实战
  • Android16之如何获取APP、Bin进程的UID(二百六十三)
  • 在JavaScript / HTML中,无法通过开发者工具查看DOM元素中input里输入的密码
  • 像素塔防游戏:像素守卫者
  • 什么是栈?深入理解 JVM 中的栈结构
  • Go Web 编程快速入门 07.2 - 模板(2):解析与执行(含Demo)
  • 公司用wordpress建站用花钱大连网站设计开发
  • 建设网站需要下载神呢软件吗重庆企业网站推广公司
  • 常规面光源在工业视觉检测上的应用
  • 数据结构——直接插入排序
  • 如何开公司做网站素材免费网站
  • Spring Boot 配置优先级
  • 【架构】-- Nightingale:云原生监控告警平台的深度解析
  • 【Leetcode】
  • 以LIS为突破口的全栈信创实践——浙江省人民医院多院区多活架构建设样本
  • 使用 IntelliJ IDEA 连接 Docker
  • Maya Python入门: polySphere()球体的形状节点操作
  • 目前最好的引流方法上海专业seo