目录
参考:
环境:
buildroot 简介
buildroot 构建 rootfs
Target options
Build options
Toolchain
System configuration
Filesystem images
使用问题:
buildroot 官网
Linaro 交叉编译器
虚拟机:ubuntu 20.04
buildroot 版本:2020.02.10
目标架构:ARMV7
Buildroot 是一个简单高效、易于使用的可通过交叉编译来构建嵌入式 Linux 系统的工具。包含了 busybox 的功能,可以用来快捷规范的搭建根文件系统。buildroot 比 busybox 更上一层楼,buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,诸如 QT、tslib 等第三方库。详见文首“参考”项,buildroot 官网中 Documentation。
这里构建的 rootfs 是运行在 ARMV7 架构的开发板上,那么首先必须要有“交叉编译工具链”。下载的地址可以见文首“参考”项。我下载的版本是 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。
解压 buildroot 源码包,进入其中。输入"make help" 可以查看 make 选项。输入以下代码进行配置。
make menuconfig
Target options 项配置与目标架构相关,必须配置。下面给出我针对 ARMV7 的配置项截图,仅供参考
Build options 中我所使用到的项仅 "Number of jobs to run simultaneously" 项。此项设置合理可提示编译速度,这里先提前说明下,在配置完 config 后。编译时不可用 make -jx 的多核编译命令。只能用 make 命令。而想要多核编译,就可以设置此项数值。
"Download dir" 项是指定 buildroot 编译时下载的第三方软件包的位置
"Mirrors and Download locations" 项是指定第三方软件包的下载源。其中有一项 "Primary download site"。可以指定主要下载的源选项。默认是空,在编译下载第三方软件包时实测一般都可以正常下载。但偶尔有些软件下载速度巨慢,这个时候可以把 "Primary download site" 项指定内容为 "http://sources.buildroot.net "。某些情况下会下载更快,当然,仅供参考。
此项指定交叉编译工具链相关参数,非常重要,一般我们是使用本地已存在的交叉编译工具链。当然, buildroot 也可以根据配置从网络下载工具链。下面贴出我配置的截图,仅供参考。
"External toolchain" 项表示选择使用 buildroot 外部的工具链
"Custom toolchain" 项表示选择使用自定义工具链
"Pre-installed toolchain" 项表示选择已经存在的本地工具链
"Toolchain path" 项不必多说,工具链路径。需要注意的是路径结束位置,参考配置。
"Toolchain prefix" 项表示工具链命令前缀。 ARCH 会根据 Target options 项去自动赋值,比如在此为 “arm”。注意此项在最后不要加 "-"。
"External toolchain gcc version" 项为工具链 gcc 版本,输入 arm-linux-gnueabihf-gcc -v 命令即可获得 gcc 版本。
"External toolchain kernel headers series"项表示工具链内核版本,在工具链所在目录下输入
find -name "version.h", 即可找到如下路径的 version.h 文件
./arm-linux-gnueabihf/libc/usr/include/linux/version.h
上述内容仅供参考,不同工具链所在路径肯定有所区别。打开此文件,为以下内容:
上述 262144 就是内核版本代号,为 10 进制。将其转换为 16 进制为 0X40000,就为 "External toolchain kernel headers series"项的选择值。
"External toolchain C library" 表示工具链的 C 库类型,一般为 glibc/eglibc。
后面的选项就没有研究了,有一项 "Toolchain has C++ support" 在支持 QT 时需要选上。
"System banner" 指定了系统挂起时的欢迎语。
"Enable root login with password", 表示使能登录密码,然后下面输入登录密码。注意,在这里有个 bug, 当然,可能是版本原因。就是我失能 "Enable root login with password" 项后,也不输入密码,然后制作的根文件系统在启动的时候同样会需要密码,而且密码不管输入什么都是错误的。必须要使能 "Enable root login with password" 项才行,不管是否输入密码。
此功能主要针对生成根文件系统的类型,如下:
"ext2/3/4 root filesystem" 项的使能可以生成 ext 格式的根文件系统,通常运行在 EMMC , SD类设备上。
"jffs2 root filesystem" 项的使能生成 jffs2 格式的根文件系统,通常运行在 QSPI Flash 类设备上。
其余的配置项,保持即可。经过上面的配置,已经可以生成一个目标架构可以运行的基本 rootfs 了。然后终端执行 make, 注意不能 make -jx 指定多核编译。在此过程中,确保联网,buildroot 会根据配置从网上下载所需包。下载完成后就会开始编译构建。最后,生成的 rootfs 镜像会在 output/images 文件夹下。
在使用 sudo make 编译时,提示如下错误
意为不应该使用 root 权限去编译,在环境中设置 FORCE_UNSAFE_CONFIGURE=1 可以忽略此检查,在编译的过程中是需要 root 权限的,所以更改编译指令如下:
sudo make FORCE_UNSAFE_CONFIGURE=1