为什么使用buildroot
在之前学习制作根文件系统时,使用的是busybox工具,这个工具仅提供了基本的根文件目录,一些第三方库则需要自己手动移植。buildroot工具则在busybox的基础上,整合了一些第三方库,在构建时可以按需选择,更加方便。
下载buildroot
buildroot官网地址:https://buildroot.org。选择最新的 LTS 版本下载即可。
配置buildroot编译
下载后解压,进入menuconfig界面:
Target options配置如下:
![](https://i-blog.csdnimg.cn/blog_migrate/7ada711c8e854e2e541bea9463864ff0.png)
Toolchain 交叉工具链配置(根据自己的环境配置):
![](https://i-blog.csdnimg.cn/blog_migrate/b7961fbc532e84a55cae8df47de7af0b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/77a19603f4dc587720290ab496e5886a.png)
注:可以使用whereis xxxx-gcc来查找工具链路径,另外,External toolchain kernel headers series这一项,使用以下方式查找:
进入交叉工具链目录,使用find ./ -name version.h查找文件:
转换为16进制为4140D,就为4.14版本。
System configuration配置:
![](https://i-blog.csdnimg.cn/blog_migrate/e3972c69ff89a65bc6ac21fabbde8b5f.png)
注意上面的Init system选项中设置的BusyBox。
用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。开发板不建议设置密码
Filesystem images配置:
![](https://i-blog.csdnimg.cn/blog_migrate/a799db39215d0990eec2b69d96ed5599.png)
禁止编译Linux Kernel内核和uboot,因为这两个通常使用自定义的镜像。
取消选中Kernel-->Linux Kernel选项和Bootloaders-->Uboot选项
Target packages 配置
用于配置要选择的第三方库或软件。
然后保存,这里保存到源码目录下的 configs/stm32mp157_defconfig。然后先用make stm32mp157_defconfig命令生成编译配置,再用sudo make进行编译。
如果需要下载的插件太大,可以手动下载,保存到源码目录下的dl文件夹中。
使能第三方库
在buildroot的menuconfig中选中:
![](https://i-blog.csdnimg.cn/blog_migrate/f08b12f9616f77951a5cf7807fc0aa52.png)
使能ssh:
![](https://i-blog.csdnimg.cn/blog_migrate/f820a35bf3aec91de1819f6c3a012637.png)
使能busybox中的depmod:
在busybox的menuconfig中选中:
![](https://i-blog.csdnimg.cn/blog_migrate/507840624a85389ff466b96a766cd753.png)
之后就可以解压到nfs进行启动。
rootfs使用
编译完成的结果放在 output/images 目录,.ext4格式的可以直接烧写到sd卡,.tar的可以解压到nfs挂载。
由于在编译buildroot时还用到了busybox,所以将busybox也配置一下,源码在output/build/busybox***/目录下。在buildroot源码目录下使用sudo make busybox-menuconfig命令即可配置。在顶层Makefile中修改交叉编译链。
在编译时也是在buildroot源码目录下进行编译:
sudo make show-targets //当前 buildroot 所有配置了的目标软件包
sudo make busybox//重新编译busybox
sudo make//重新打包buildroot