Buildroot是什么
如果你是一个嵌入式软件工程师,那你有必要要知道buildroot是什么。我们知道,通常一个嵌入式设备上运行的软件包括bootloader,linux和rootfs。我们可以独立去开发各个部分,在使用的时候分别去交叉编译,烧写这些软件组件。但是buildroot这个工具提供了一种更加高效的管理方法,它把bootloader,linux和rootfs集成在一起,可以非常方便的去定制,管理,编译和组装一个自己需要的,针对自己的设备的一个完整的软件系统。我们可以利用buildroot针对自己的嵌入式设备开发完整的BSP和SDK。
言归正传,上面都是我说的。而对这么一个新事物,我们一定要去它的官方网站上看一看介绍。
https://buildroot.org/
官网首页对buildroot的定义,和特点有非常明确的介绍。
- buildroot的宗旨为了让嵌入式linux开发更容易。
- 管理一切!为嵌入式设备生成交叉编译工具链,文件系统,交叉编译bootloader和kernel image。
- 易用!所有配置通过像linux一样的menuconfig,gconfig和xconfig。
- 支持丰富的package资源,构建你需要的rootfs。
Buildroot快速上手
我们来看一下buildroot是如何使用的,这里介绍的使用步骤并不详尽,主要是让大家对buildroot的使用有个大致的了解。假设你已经在linux机器上下载下来了buildroot的源码。(我想嵌入式软件工程师都会本能的用git clone,并且默默切到一个stable branch。)
git clone https://git.buildroot.net/buildroot
git checkout -b 2020.08.x origin/2020.08.x
然后,我们以imx6ullevk开发板为例,build一个包含bootloader,kernel和rootfs的完整的firmware总共分两步。
make imx6ullevk_defconfig
make
好的,介绍完了。
Buildroot的目录结构
确实,buildroot太易用了,build分两步,每步就一个命令。再也不需要配置复杂的交叉编译工具链,不用分别编译bootloader,kernel,构建文件系统。
我们来看看buildroot的目录结构是怎样的。Buildroot主要是Makefile写的,熟悉linux的人并不会陌生,而它的目录结构也很简单。
在Build之前,buildroot的目录是这样的。
$ ls
arch boot Config.in configs DEVELOPERS fs Makefile package support toolchain
board CHANGES Config.in.legacy COPYING docs linux Makefile.legacy README system utils
Build之后的目录是这样的。只多了个dl和output目录。
$ ls
arch boot Config.in configs DEVELOPERS docs linux Makefile.legacy package support toolchain
board CHANGES Config.in.legacy COPYING dl fs Makefile output README system utils
最终生成的板子需要的image在这里。
$ ls output/images/
boot.vfat imx6ull-14x14-evk.dtb rootfs.ext2 rootfs.ext4 rootfs.tar sdcard.img u-boot.bin u-boot-dtb.imx zImage
算了,好像没什么好介绍的,这些目录看名字也大概知道是存放什么文件用的了。
结束语
本文看似没介绍什么实质性的内容,但希望让你认识了一个叫buildroot的高效工具,以提高嵌入式linux BSP开发,使用,和管理的效率。以后会细致的介绍怎么在buildroot里支持一个自己的嵌入式设备。buildroot里如果已经有你的嵌入式设备所使用的SoC的一些其他的板子支持,那所需要做的可能仅仅就是添加一个板子的config文件。