buildroot简介buildroot环境与下载
buildroot环境buildroot下载 buildroot的简单使用
配置编译 buildroot高阶用法
交叉编译链配置
buildroot简介buildroot是什么,我们为什么要使用buildroot。
buildroot是一个编译框架,主要用来交叉编译嵌入式linux系统,可以很方便的一键式编译生成loader(u-boot)、rootfs、uImage等镜像。
在不使用编译框架的情况下,我们需要手动管理和编译loader、roofs、kernel,其中环境搭建、源码配置等工作重复而繁杂,使用编译框架可以帮助我们完成一键式编译。
buildroot官网:https://buildroot.org
buildroot是以makefile为基本结构的编译框架,只支持在linux环境下运行,编译时使用普通用户权限,无需root权限。
在编译环境中,以下工具是必须的,一般linux发行版都已经默认安装,无需过分关注。
which sed make (version 3.81 or any later) binutils build-essential (only for Debian based systems) gcc (version 4.8 or any later) g++ (version 4.8 or any later) bash patch gzip bzip2 perl (version 5.8.7 or any later) tar cpio unzip rsync file (must be in /usr/bin/file) bcbuildroot下载
可以选择网站下载压缩包或者使用git下载。
下载方式1: 在window下登陆https://buildroot.org/download.html下载压缩包,在linux环境下curl -O https://buildroot.org/downloads/Vagrantfile; vagrant up。
下载方式2: git clone git://git.buildroot.net/buildroot或git clone https://git.buildroot.net/buildroot
以树莓派4B为例
配置使用builtroot的第一步是生成一个配置文件,builtroot将根据配置文件编译生成镜像,与编译linux时的.config类似。生成配置文件的方式有两种:
- 手动配置,在builtroot代码目录下执行make menuconfig,可以看到如下配置:
│ │ Target options ---> 配置目标平台的架构,如aarch64 │ │ Build options ---> 配置编译选项,如源代码位置、编译debug信息等 │ │ Toolchain ---> 配置编译链,交叉编译选择、编译优化等级等 │ │ System configuration ---> 配置编译出的系统配置,主要和rootfs相关 │ │ Kernel ---> 目标内核的编译配置 │ │ Target packages ---> 主要是busybox编译,选择编入哪些工具 │ │ Filesystem images ---> 选择rootfs的文件类型 │ │ Bootloaders ---> 编译loader,常用的为u-boot │ │ Host utilities ---> 编译服务器的工具配置 │ │ Legacy config options ---> 选择其它库,如opencv、python等 │ │
- 使用对应开发板的默认配置,以树莓派4B为例
在builtroot代码目录下执行make raspberrypi4_64_defconfig,即可使用树莓派默认配置,如果需要在默认配置上进一步修改配置,可按照手动配置的方法。
配置完成后,在builtroot目录下执行make,根据机器配置时间大约在30分钟-60分钟。
make命令一般会执行下面几步:
- 下载源码文件;配置、编译和安装交叉编译链;配置、编译和安装所选的目标包;编译内核镜像编译bootloader镜像创建rootfs镜像
使用raspberrypi4_64_defconfig配置时,builtroot会自动从github-raspi仓库拉取源码,然后进行编译。如果编译服务器无法连接网络,可以在配置中修改Build options和Kernel ,指定已有的内核源码路径。
编译生成的成果物存放在output目录中,目录列表如下:
build ---> 下载的源代码、编译链等 host ---> 编译好的工具链、库等 images ---> 编译出的镜像成果物 staging ---> 工具链的符号链接,不用关注 target ---> 包含完整的目标roofs
一般来说,我们只需要关心images下的成果物即可,以树莓派为例,images文件夹下会有bcm2711-rpi-4-b.dtb boot.vfat Image rootfs.ext2 rootfs.ext4 rpi-firmware sdcard.img这些文件,将其拷贝到树莓派的tf卡。
buildroot高阶用法 交叉编译链配置编译链是一系列编译工具的集合,包括编译器、链接器、标准库、调试器、反汇编工具等。builtroot提供了两种编译链方式,内置编译链(Buildroot toolchain)和外部编译链(External toolchain),可以通过Toolchain type进行选择。
Toolchain ---> Toolchain type



