一.Buildroot文件系统概述
Buildroot 是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。可通过Buildroot配置,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件。
获取buildroot官方源码:
使用浏览器打开以下网址下载 buildroot 最新的源码。
https://buildroot.org/download.html
下载后使用以下命令解压buildroot压缩包:
二.Buildroot框架结构目录
arch: 存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键;
board:这个目录包含了针对特定开发板的配置文件和补丁。每块开发板都有自己的子目录,里面可能包含特定的配置文件、设备树文件、补丁以及其他相关文件;这些文件帮助Buildroot在不同的硬件平台上进行适配和配置,以生成针对特定开发板的嵌入式 linux系统;
boot:这个目录包含与引导加载程序相关的文件和脚本。它通常包括引导加载程序(如 u-boot)、引导配置文件、引导脚本等;Buildroot可以在这里生成和配置引导加载程序以及相关的启动文件;
configs: 存放各个单板的 buildroot 配置文件
dl:目录存放从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下 载了,而是从 dl/目录下拿开源包,以节约时间。本身下载通常都是很慢的,你可以手动找到相 关包下载后放到这里就 OK 了。
docs: 存放 pdf,html 格式的 buildroot 详细说明。
fs:放各种文件系统的源代码。
linux:存放 Linux 的构建脚本*.mk 和配置选项 Config.in
package/: 此目录下放着应用软件的配置文件,每个应用软件的配置文件有 Config.in 和软件包 名字.mk。软件包名字.mk 文件可以下载应用软件包,是 Makefile 脚本的自动构建脚本。
output/: 是编译的输出文件夹,里面的 build/目录存放着解压后的各种软件包编译 完后的现场。
output/build:所有源码包解压出来的文件存放地和编译的发生地
output/staging:包含了根文件系统的层次结构,编译生成的所有头文件和库,以及其他开发文件, 体积较大;
output/Images:目录下就是最终生成的可烧写到板子上的各种 image。
support:存放一些为 bulidroot 提供功能支持的脚本、配置文件
toolchain:存放制作各种交叉编译工具链的构建脚本*.mk 和配置选项 Config.in
utils:存放一些 buildroot 的实用脚本和工具。
三.编译Buildroot
再编译Buildroot之前先确认好以下编译环境是否有安装
sudo apt install -y sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc wget
可以使用make menuconfig配置Buildroot。
配置了 build root 的基础功能,然后我们输入 make 命令进行编译, 注意编译过程中需要保证虚拟机 ubuntu 是联网状态。
buildroot-2022.05# make
编译的时候会从官网上下载的开源软件包。
ls output/images/即可看到编译出来的文件系统。
然后在 123 文件夹的同级目录,输入以下命令。制作自己的根文件系统,大小依据自己的 根文件系统而定,注意依据 文件夹的大小来修改 count 值,:
这样 rootfs.img 就是最终的根文件系统映像文件了。
mkdir rootfs
dd if=/dev/zero of=rootfs.img bs=1M count=1024 //这个命令将创建一个大小为1M * 1024虚拟磁盘镜像文件rootfs.img
mkfs.ext4 rootfs.img //使用命令mkfs.ext4格式化rootfs.img磁盘
mount rootfs.img rootfs/ 将rootfs挂载到磁盘rootfs.img
cp -rfp 123/* rootfs/ //拷贝目录123/到目录rootfs/下
umount rootfs/ //解除挂载
e2fsck -p -f rootfs.img //ex2fsck检查ext2、ext3、ext4文件系统是否正常
resize2fs -M rootfs.img //resize2fs命令 – 调整文件系统大小