参考链接
官网:https://buildroot.org/
官方手册:https://buildroot.org/downloads/manual/manual.html
buildroot目录
arch:存放cpu架构相关的配置脚本
board:厂商相关
boot:启动相关
Config.in:
configs:存放开发板的一些配置参数
dl(download):存放下载的源代码和应用软件的压缩包
docs:参考文档
fs:存放各种文件系统的源代码
linux:存放linux kernel的自动构建脚本
Makefile:
output:编译出来的输出文件夹
build:存放解压后的各种软件包编译完成后的现场
.tar:打包编译后的文件
host:存放着制作好的编译工具链
images:存放着编译好的镜像文件
target:用来制作rootfs文件系统,里面存放着Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件
package:存放着应用软件的配置文件,配置文件有Config.in和soft_name.mk
Config.in:Config.in和menuconfig配合配置哪些软件被整合到buildroot
soft_name.mk:配置具体软件包版本,下载地址,软件安装路径,可执行文件安装路径,库文件安装路径
README:
support:
system:
toolchain:工具链
配置buildroot
make xxx_defconfig 选择默认配置文件
make menuconfig 图形化配置文件
make savedefconfig 保存menuconfig的配置
编译buildroot
make //全编译
make qplayer //编译 qplayer
make qplayer-rebuild //重编 qplayer
make qplayer-dirclean //删除 qplayer
buildroot构建rootfs的流程
将/buildroot/system/skeleton/文件拷贝到/buildroot/output/target/目录下作为rootfs的模板。
将/buildroot/output/staging/目录下的工具链中的动态库拷贝到/buildroot/output/target/目录下。
编译/buildroot/output/build/应用,然后将生成的动态库和bin文件安装到/buildroot/output/target/对应的目录下。
将/buildroot/package/initscripts/目录下的系统启动脚本安装到/buildroot/output/target/对应的目录下。
将执行/buildroot/board/rockchip/ok3568/fs-overlay中的操作,对输出目录中的文件和目录进行定制化修改。
构建fakeroot(伪造的root)环境,在fakeroot环境下修改/buildroot/output/target/中对应的目录文件权限,制作dev节点,并根据用户配置制作出rootfs镜像。
fakeroot是一个主机上使用的软件包,它会被buildroot下载编译,用于为构建rootfs提供一个虚拟的root权限环境。只有在root权限下,才能把output/target/中的目录和文件变成root用户,并创建dev节点。有了fakeroot环境,系统构建者无需获取主机的root权限, 也能在fakeroot下把文件改为root用户,并制作rootfs。
Buildroot 通过以下步骤来构建文件系统:
配置系统:
在使用 Buildroot 构建文件系统之前,需要对系统进行配置。这包括选择用于编译的 CPU 架构、选择文件系统类型等。配置文件通常保存在 .config 文件中,可以使用 make menuconfig 或其它命令来修改。完成系统配置后,将开始编译所需的软件包。
编译软件包:
Buildroot 会下载、编译和安装软件包。这些软件包包括内核、基础组件 (如编译器、库等)、文件系统和其它应用程序。
生成 rootfs:
Buildroot 会在输出目录(output/target)中生成一个完整的 rootfs。在编译阶段的最后,Buildroot 将生成的文件分类及打包到 output/target 目录中。这些文件包括构建好的二进制文件、库、头文件、配置文件、启动脚本等,并且将它们按照一定的目录结构组织起来。同时,Buildroot 还会拷贝一个模板文件系统存放在 output/target 中,这个模板文件系统会作为rootfs的基础。output/target 目录中的文件就构成了制作rootfs所需的全部文件。
定制 rootfs:
Buildroot 还会在用户所指定的目录(board/<board_name>/fs-overlay/)或者默认的目录下(output/target/root/) 中追加或覆盖特定的文件。这里可以加入用户需要的文件,也可以增加一些控制启动等特殊功能的脚本。
生成 rootfs 镜像文件:
Buildroot 将 rootfs 目录中的文件与Boot Loader、kernel 镜像等内容一起打包成为一个完整的文件系统镜像文件,通常为 ext2、ext3、jffs2、ubifs、squashfs 等格式。这个文件系统镜像文件可以通过 TFTP、NFS、FTP 等传输方式,将文件系统加载到设备的闪存中。
以上就是 Buildroot 构建文件系统的过程。通过这些步骤,构建出来的文件系统可以运行在目标嵌入式设备上,包含所需的功能和应用程序。这个过程中,需要根据具体的硬件平台和应用程序需求进行配置,才能生成能够满足系统需求的文件系统。
软件包执行流程
下载标记: .stamp_downloaded 表示软件包已被下载
解压标记: .stamp_extracted 表示软件包已被解压,将buildroot/dl/*.tar文件解压到/buildroot/output/build/*文件夹下。
打补丁标记: .stamp_patched 表示软件包已经被成功打补丁。
配置标记: .stamp_configured 表示软件包已经被成功配置。
编译标记: .stamp_built 表示软件包已被编译。将/buildroot/output/build/*文件夹下文件编译安装到/buildroot/output/
安装标记: .stamp_staging_installed 用于标志交叉编译过程中所有的交叉编译工具、库、头文件等是否已经安装到内部 staging 暂存目录中。
安装标记: .stamp_target_installed 表示软件包已经交叉编译并成功安装到target目标中。