本文档介绍的是使用buildroot搭建最简单的linux文件系统,Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。
下面我们结合iTop4412开发板来讲解一下如何使用 buildroot制作最小文件系统。
1 源码
我们从buildroot 官网 http://buildroot.uclibc.org/download.html获取 buildroot 源码包,笔者这里下的最新的是buildroot-2018.02.4.tar.gz!
![](https://i-blog.csdnimg.cn/blog_migrate/20b3e058e93084a00531ecf504cda86b.webp?x-image-process=image/format,png)
首先拷贝“buildroot-2018.02.4.tar.gz”到我们的Ubuntu虚拟机上,然后在Ubuntu命令行,使用命令“#tar -xcf buildroot-2018.02.4.tar.gz ”,解压完成后如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/44d6a2d3738d2ab2e3081b1d322ea7b5.webp?x-image-process=image/format,png)
2 配置
如下图使用命令“cd buildroot-2018.02.4”进入解压出来的源码目录下。
![](https://i-blog.csdnimg.cn/blog_migrate/72d87df7b8e171c119bbef798de31094.webp?x-image-process=image/format,png)
执行“make menuconfig”命令,进入配置界面,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/2ad024dbd58624430098c94156e32764.webp?x-image-process=image/format,png)
进入“Target options”目录,将 Target Architecture 配置为 ARM(littlt endian),将 Target Architecture Variant 配置为cortex-A9,将Target ABI 配置为 EABI,将ARM instruction set 配置为 ARM,(如果在其他开发板上测试,修改Target Architecture Variant即可,4418,imx6q为cortex-A9,6818为cortex-A53,imx6ul为cortex-A7)如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/cf935606c48c837953af426df7058876.webp?x-image-process=image/format,png)
再退回上一界面后,进入Toolchain 目录:将 Toolchain type 配置为 External toolchain,然后在 Toolchain 中选择交叉编译工具的版本,这里我选 ARM 2014.05,在 Toolchain origin 中选择 Toolchain to be downloaded and installed,后面编译时, buildroot 将会自动下载对应的工具链并自动安装。选中 Enable MMU support。如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/27bfa276d00a3d92e571ae1aafdee64b.webp?x-image-process=image/format,png)
退回上一界面后,进入System configuration 界面,在 System hostname 一栏中输入开发板的名称,如 iTop-4412,在 Init system 中选择 BusyBox,在/devmanagement中选择Dynamic using mdev,即使用mdev动态加载设备节点的方式,然后在Path to the permission tables中选择设备节点的配置表,这里我们一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。Root password为配置进入linux 控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/a0293895e63545e9edc0a1c1eecf9001.webp?x-image-process=image/format,png)
选中Run a getty(login prompt)after boot,再进入该选项:将TTY port配置为ttySAC2,将 baudrate 配置为115200,对应 iTop4412 开发板的控制台打印串口(其他开发板控制台串口分别是4418-ttyAMA0、6818-ttySAC0、iMX6Q&iMX6UL-ttymxc0)。如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/65613673a65b404739e457557f8684e2.webp?x-image-process=image/format,png)
返回上一层,再继续返回上一界面,进入Filesystem images 目录,选中tar the rootfilesystem,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/adedab583d99ec4163c0749309dbfd13.webp?x-image-process=image/format,png)
最后保存当前的配置并退出,配置完成。如下图所示。用户也可以根据自己的实际需要进行配置。
![](https://i-blog.csdnimg.cn/blog_migrate/8e68887f726b22adedc4e6e4ecaccbcf.webp?x-image-process=image/format,png)
3编译
编译buildroot,在buildroot根目录下直接执行make就可以完成了。
![](https://i-blog.csdnimg.cn/blog_migrate/bf0d815809a3e902b2f03fbd51012d53.webp?x-image-process=image/format,png)
编译过程中会有如下报错。
![](https://i-blog.csdnimg.cn/blog_migrate/e652ff079e3ef01b6daf9f205084b4d7.webp?x-image-process=image/format,png)
我们使用命令“export FORCE_UNSAFE_CONFIGURE=1 && make”继续执行即可,等待编译完成,第一次编译的过程中需要自动下载一些工具,所以要保持Ubuntu系统联网。如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/488b9b7d9752ab81ba285328018a2dd3.webp?x-image-process=image/format,png)
4生成镜像
编译完成后,我们使用命令“cd output”,进入output文件,targer就是我们编译生成的文件系统,当然buildroot会将其打包成相关镜像,但是格式种类有限(“menuconfig”中的“Filesystem images”目录下配置),镜像就放在image目录下,我们还是回到“output”目录下,使用命令“make_ext4fs -s -l 314572800 -a root -L Linux target.img target/”生成文件系统镜像,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/8449e14af1e8cf4f2b1f6d1e70f9bdc4.webp?x-image-process=image/format,png)
如果使用的其他开发板,参照开发板手册“制作最小文件系统镜像”相关章节,对“terger”目录下文件进行打包即可。
我们通过fastboot工具将镜像烧写进iTop4412开发板,只替换qt系统镜像中的system.img文件即可,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/b47235733cbc9022f58a5a23a080aca9.webp?x-image-process=image/format,png)
等待开发板启动,输入“root”即可进入。如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/a9a092b78e4221ca0aebacb76d4c128b.webp?x-image-process=image/format,png)