本文档介绍的是使用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!
![b72fb3ea62e14f3946b8300b432188b1.png](https://i-blog.csdnimg.cn/blog_migrate/5d822aa8be725e249c99fb594f978538.jpeg)
首先拷贝“buildroot-2018.02.4.tar.gz”到我们的Ubuntu虚拟机上,然后在Ubuntu命令行,使用命令“#tar -xcf buildroot-2018.02.4.tar.gz ”,解压完成后如下图。
![b9b97d5d96219149e0dee817daa259f2.png](https://i-blog.csdnimg.cn/blog_migrate/9d13a23d9e939686fa0004c6cf4f28d2.jpeg)
2 配置
如下图使用命令“cd buildroot-2018.02.4”进入解压出来的源码目录下。
![c84b6b11f9ea23d9877e4ae60cdddebd.png](https://i-blog.csdnimg.cn/blog_migrate/c923410ac605104174c9df4d06e7b41d.jpeg)
执行“make menuconfig”命令,进入配置界面,如下图所示。
![a199724a65772230a2785d56308092d5.png](https://i-blog.csdnimg.cn/blog_migrate/4a00e13e2c74d8696524e98eed7be3d6.jpeg)
进入“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)如下图所示。
![ff2e640099bd91c0be720225c18cc1f7.png](https://i-blog.csdnimg.cn/blog_migrate/46d74bb517546dd97affbcf609b1c7c1.jpeg)
再退回上一界面后,进入Toolchain 目录:将 Toolchain type 配置为 External toolchain,然后在 Toolchain 中选择交叉编译工具的版本,这里我选 ARM 2014.05,在 Toolchain origin 中选择 Toolchain to be downloaded and installed,后面编译时, buildroot 将会自动下载对应的工具链并自动安装。选中 Enable MMU support。如下图所示。
![613be59942b301f7008b3df3e0dece6b.png](https://i-blog.csdnimg.cn/blog_migrate/3c529ee322d46250d67cefbd24b39e7b.jpeg)
退回上一界面后,进入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。如下图所示。
![f366f8031a0d4185c3bf4c4ccf8a4521.png](https://i-blog.csdnimg.cn/blog_migrate/d0c0558eabf9d18474435dddf6d7d5de.jpeg)
选中Run a getty(login prompt)after boot,再进入该选项:将TTY port配置为ttySAC2,将 baudrate 配置为115200,对应 iTop4412 开发板的控制台打印串口(其他开发板控制台串口分别是4418-ttyAMA0、6818-ttySAC0、iMX6Q&iMX6UL-ttymxc0)。如下图所示。
![05a831ee54573f1eed78b7801cf0b490.png](https://i-blog.csdnimg.cn/blog_migrate/c3539dc079d6f1c708e5cd0fd3dee5b6.jpeg)
返回上一层,再继续返回上一界面,进入Filesystem images 目录,选中tar the rootfilesystem,如下图所示。
![0cd90eea32275927457cb2a4e19c239e.png](https://i-blog.csdnimg.cn/blog_migrate/f7b1534b1c7dada74c4de9b98688ae05.jpeg)
最后保存当前的配置并退出,配置完成。如下图所示。用户也可以根据自己的实际需要进行配置。
![b25786369dbb12b24a6d9cbda843f0f1.png](https://i-blog.csdnimg.cn/blog_migrate/ca0e6b09ca8f74d68df6485d0cca5c6a.jpeg)
3编译
编译buildroot,在buildroot根目录下直接执行make就可以完成了。
![49f5f635997e9bc045bf1a1c0afb3d64.png](https://i-blog.csdnimg.cn/blog_migrate/4f2cf091910d7f37b4ccdfd9f818e1b1.jpeg)
编译过程中会有如下报错。
![b5d3a08cffba1ec542a62b580da68dac.png](https://i-blog.csdnimg.cn/blog_migrate/19fa5472cebf7332bc57301a24a8e344.jpeg)
我们使用命令“export FORCE_UNSAFE_CONFIGURE=1 && make”继续执行即可,等待编译完成,第一次编译的过程中需要自动下载一些工具,所以要保持Ubuntu系统联网。如下图。
![6f51831c2939d25d2750332ecc19ad04.png](https://i-blog.csdnimg.cn/blog_migrate/9229d9cd173c631b6b5152b64199f803.jpeg)
4生成镜像
编译完成后,我们使用命令“cd output”,进入output文件,targer就是我们编译生成的文件系统,当然buildroot会将其打包成相关镜像,但是格式种类有限(“menuconfig”中的“Filesystem images”目录下配置),镜像就放在image目录下,我们还是回到“output”目录下,使用命令“make_ext4fs -s -l 314572800 -a root -L Linux target.img target/”生成文件系统镜像,如下图所示。
![59d918942631363cb9c197a82bd16ad5.png](https://i-blog.csdnimg.cn/blog_migrate/0a645c48a8eaee509712dae1d67aebbc.jpeg)
如果使用的其他开发板,参照开发板手册“制作最小文件系统镜像”相关章节,对“terger”目录下文件进行打包即可。
我们通过fastboot工具将镜像烧写进iTop4412开发板,只替换qt系统镜像中的system.img文件即可,如下图所示。
![3222626bd033113be44105d2d50176ae.png](https://i-blog.csdnimg.cn/blog_migrate/a30e3a5b38110d419c9e2f8a94553df9.jpeg)
等待开发板启动,输入“root”即可进入。如下图所示。
![5e33f13b0fad1a290c8a682c4526b339.png](https://i-blog.csdnimg.cn/blog_migrate/84fd1c3ee3e6e9d3741ab2dc2e12a172.jpeg)