5.4.1. RootFS

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

5.4.1.1. Overlay机制

RootFS Overlay 是指在制作 RootFS 镜像过程中,使用客制化的 RootFS 目录内容覆盖 output/target/ 中目录和文件的一个机制。

../../../_images/rootfs_overlay_mechanism.png

图 5.22 RootFS Overlay 机制

如上图所示,编译过程中生成的内容,安装到 output/target/ ,制作 RootFS 镜像时:

  • 首先将 output/target/ 目录内容 rsync 到 RootFS 制作目录 output/build/luban-fs/target/

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

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

通过上述机制,开发者可以将独立编译的程序和文件放在一个 RootFS Overlay 目录中,然后将该目录路径配置到对应的 <board>_defconfig,即可将这些程序和文件打包到 RootFS 镜像。

5.4.1.2. 默认 Overlay

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

target/d211/fpga_spinand/rootfs_overlay

5.4.1.3. 新 Overlay

Luban SDK 的 Overlay 支持多目录,增加新的 Overlay 目录的方案是:

  • 打开配置界面

make menuconfig
  • System configuration

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 目录。
../../../_images/rootfs_overlay_menuconfig.png
  • 添加新目录

    RootFS Overlay 目录可以配置多个,不同目录之间使用 空格 分开即可。如

target/$(LUBAN_CHIP_NAME)/$(LUBAN_BOARD_NAME)/rootfs_overlay test_rootfs

此处除了板子目录下的 ``rootfs_overlay`` 目录,还添加了 SDK 顶层目录下的 ``test_rootfs`` 目录。

5.4.1.4. 编译结果

在完成上述添加后,重新编译生成固件时三个目录将被合并构建 RootFS

  • rootfs_overlay 和 test_rootfs 中的内容会被按顺序安装到 output/build/luban-fs/target/

  • output/build/luban-fs/target/ 内容被安装到 output/target/

  • 基于 output/target/ 生成 RootFS