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的配置基本相同,我们可以按层级打开或关闭配置,也可以直接搜索
当我们修改完成配置以后,多次按Esc键,退出图形配置界面,如果提示是否保存配置文件,选择Yes
修改完成配置文件以后,我们还要用新生成的配置文件覆盖原有的配置文件。不覆盖的话,在编译时会自动使用原有的文件,我们的修改就不会生效了。
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