Edit online

RootFS 和 Overlay

4 Dec 2024
Read time: 2 minute(s)

借助于 Buildroot,很多需要使用的工具可以直接被编译和安装到 RootFS, 如果希望将非依赖 Buildroot 独立编译的程序和文件放到 RootFS 中时,可使用 SDK 提供的 RootFS Overlay 机制来实现。

RootFS Overlay 机制

RootFS Overlay 机制是指在制作 RootFS 镜像过程中,使用客制化的 RootFS 目录内容覆盖 output/target/ 中的目录和文件。通过 Overlay 机制,开发者可以将独立编译的程序和文件放在一个 RootFS Overlay 目录中,并将该目录路径配置到对应的 <board>_defconfig 目录下,即可将所需程序和文件打包到 RootFS 镜像。


rootfs_overlay_mechanism

1. RootFS Overlay 机制

RootFS Overlay 机制所示,将编译过程中生成的内容安装到 output/target/ 来制作 RootFS 镜像时:

  1. output/target/ 目录内容 rsync 到 RootFS 制作目录 output/build/luban-fs/target/

  2. 将指定的 RootFS Overlay 目录中的内容 rsync 到 RootFS 制作目录 output/build/luban-fs/target/

    如果配置了多个 RootFS Overlay 目录,则按顺序 rsync 覆盖 output/build/luban-fs/target/ 中的内容。

默认 Overlay 目录

SDK 给每个 Board 设置了一个默认的 Overlay 目录,例如 target/d211/fpga_spinand/rootfs_overlay。按照需要的目录结构存储,可以直接预制文件。

添加新 Overlay 目录

Luban SDK 的 Overlay 支持多目录,按照以下流程可以增加新的 Overlay 目录:

  1. 使用下列命令进入配置界面:
    make menuconfig
    
  2. 添加系统配置,示例如下:
    System configuration  --->
        (target/$(LUBAN_CHIP_NAME)/$(LUBAN_BOARD_NAME)/rootfs_overlay) Root filesystem overlay directories
    

    target/$(LUBAN_CHIP_NAME)/$(LUBAN_BOARD_NAME)/rootfs_overlay 为每一个板子目录下默认的 rootfs_overlay 目录。


    rootfs_overlay_menuconfig

  3. 添加新目录。

    RootFS Overlay 目录可以配置多个,不同目录之间使用空格分开。例如,新增一个 rootfs_overlay 和一个 test_rootfs 目录:
    target/$(LUBAN_CHIP_NAME)/$(LUBAN_BOARD_NAME)/rootfs_overlay test_rootfs
  4. 重新编译生成固件时的三个目录,会合并构建 RootFS:
    • rootfs_overlaytest_rootfs 中的内容被按顺序安装到 output/build/luban-fs/target/ 中。
    • output/build/luban-fs/target/ 内容被安装到 output/target/ 中。
    • 基于 output/target/ 生成新的 RootFS。