12. Buildroot根文件系统的构建

12.1. 什么是Buildroot?

Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。 你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件。

借助LubanCat-SDK,我们可以更方便的进行Buildroot根文件系统的构建和Buildroot系统镜像的制作。

LubanCat-SDK使用了Buildroot-2023.11.2版本的软件开发包,其包含了基于Linux系统开发⽤到的各种系统源码, 驱动,⼯具,应⽤软件包。

Buildroot 有以下⼏点优势:

  • 通过源码构建,有很⼤的灵活性;

  • ⽅便的交叉编译环境,可以进⾏快速构建;

  • ⽅便各系统组件配置及定制开发。

使⽤ Buildroot最出名的项目就是Openwrt,由它制作出的镜像可以跑在搭载16Mb SPI Flash的路由器上, 系统基本没包含多余的东西。得益于Buildroot的简单化,整个Buildroot project 可以在⼀个git仓库维护。 Buildroot使⽤kconfig和make,⼀个defconfig配置代表⼀种BSP⽀持。

提示

野火对Buildroot系统仅提供有限支持,不提供技术支持服务,不建议非资深开发者使用。 并且部分使用的资源涉及算能开源资料,除LubanCat-SDK提供的内容外, 如需添加额外功能或修改配置文件,需要自行从开源仓库添加。

12.1.1. Buildroot-dl

但由于部分用户网络不佳,下载速度慢,下载时间长,最终导致编译失败。为此我们提供下载好的源码压缩包供用户使用。

访问百度网盘:7-SDK源码压缩包/buildroot-dl-xxx.7z 下载最近日期的压缩包即可。

提示

此压缩包与buildroot版本匹配,发布日期不一定与最新的SDK发布日期相同,使用最新版本即可。

下载完成后我们将buildroot-dl-xxx.7z移动到sophon-image-build/buildroot目录下解压,解压后的文件保存在buildroot/dl目录中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 安装7z压缩工具
sudo apt install p7zip-full

# 将下载的SDK源码移动到LubanCat_SDK目录buildroot下,xxx为日期
mv buildroot-dl-*.7z sophon-image-build/buildroot/

# 进入buildroot/目录
cd sophon-image-build/buildroot/

# 解压SDK压缩包
7z x buildroot-dl-*.7z

12.2. Buildroot构建

在构建Buildroot根文件系统前,我们先要根据对应的板卡配置编译环境和选择SDK配置文件:

1
2
3
4
5
6
7
8
 #进入SDK顶层目录
 cd sophon-image-build/

 #初始化编译环境,输入当前用户的密码
 source build/cvisetup.sh

 #加载板级配置文件
 defconfig sg2000_lubancat_riscv_buildroot_emmc

SDK的配置文件设置完成之后,我们就可以开始编译构建了:

1
2
3
4
5
 #清除之前的编译输出
 clean_all

 #一键编译完整的Buildroot系统镜像
 build_all

提示

在buildroot构建时,会下载大量的软件包源码存放在buildroot/dl目录下, 由于大部分源码服务器都在国外,所以编译时请保证网络畅通和较高的源码压缩包下载速度, 否则会导致构建时间过长或构建失败。

如果要重新构建buildroot,需进入buildroot目录进行清除:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 # 进入buildroot/目录
 cd sophon-image-build/buildroot/

 #清除buildroot编译输出
 make clean

 #返回SDK顶层目录
 cd ..

 #清除SDK之前的编译输出
 clean_all

 #一键编译完整的Buildroot系统镜像
 build_all

12.3. 修改Buildroot配置文件

在构建buildroot的时候经常需要修改buildroot的配置,以下介绍如何修改配置文件。

12.3.1. 设置Buildroot环境变量

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 #进入SDK顶层目录
 cd sophon-image-build/

 #初始化编译环境,输入当前用户的密码
 source build/cvisetup.sh

 #加载板级配置文件
 defconfig sg2000_lubancat_riscv_buildroot_emmc

 # 进入buildroot/目录
 cd sophon-image-build/buildroot/

 #设置输出目录、配置文件和交叉编译器
 make -C $BR_DIR $BR_DEFCONFIG BR2_TOOLCHAIN_EXTERNAL_PATH=$CROSS_COMPILE_PATH

以上加载build/cvisetup.sh后就会设置很多变量,具体可以从build/cvisetup.sh文件中查找。

  • $BR_DIR:输出目录

  • $BR_DEFCONFIG:配置文件

  • $CROSS_COMPILE_PATH:交叉编译器

截取build/cvisetup.sh配置如下:

1
2
3
4
5
6
 # buildroot config
 export BR_DIR="$TOP_DIR"/buildroot
 export BR_BOARD=cvitek_${CHIP_ARCH}_${SDK_VER}
 export BR_OVERLAY_DIR=${BR_DIR}/board/cvitek/${CHIP_ARCH}/overlay
 export BR_DEFCONFIG=${BR_BOARD}_defconfig
 echo "BR2_DEFCONFIG:  ${BRDEFCONFIG}"

那么加载的sg2000_lubancat_riscv_buildroot_emmc对应的buildroot配置文件则是sophon-image-build/buildroot/configs/cvitek_SG200X_musl_riscv64_defconfig

12.3.2. 自定义buildroot配置文件

1
2
3
4
5
 # 进入buildroot/目录
 cd sophon-image-build/buildroot/

 #Buildroot配置
 make menuconfig

Buildroot使用kconfig进行配置,其使用方法与kernel的配置基本相同,我们可以按层级打开或关闭配置,也可以直接搜索

../../_images/buildroot04.jpg

当我们修改完成配置以后,多次按Esc键,退出图形配置界面,如果提示是否保存配置文件,选择Yes

../../_images/buildroot05.jpg

修改完成配置文件以后,我们还要用新生成的配置文件覆盖原有的配置文件。不覆盖的话,在编译时会自动使用原有的文件,我们的修改就不会生效了。

1
2
 # Buildroot配置
 make savedefconfig

下一步我们开始编译,可以使用make命令来进行编译,也可以使用SDK的构建脚本来进行编译。

1
2
3
4
5
# 在buildroot目录使用make命令进行编译
make

# 在SDK顶层目录使用SDK的构建脚本来进行编译
build_all

更多关于Buildroot的构建技巧,可以参考buildroot官方文档:https://buildroot.org/docs.html