buildroot

目录

参考:

环境:

buildroot 简介

buildroot 构建 rootfs

Target options 

Build options 

Toolchain

System configuration

Filesystem images


参考:

buildroot 官网

Linaro 交叉编译器


环境:

虚拟机:ubuntu 20.04

buildroot 版本:2020.02.10

目标架构:ARMV7


buildroot 简介

Buildroot 是一个简单高效、易于使用的可通过交叉编译来构建嵌入式 Linux 系统的工具。包含了 busybox 的功能,可以用来快捷规范的搭建根文件系统。buildroot 比 busybox 更上一层楼,buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,诸如 QT、tslib 等第三方库。详见文首“参考”项,buildroot 官网中 Documentation。


buildroot 构建 rootfs

        这里构建的 rootfs 是运行在 ARMV7 架构的开发板上,那么首先必须要有“交叉编译工具链”。下载的地址可以见文首“参考”项。我下载的版本是  gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

        解压 buildroot 源码包,进入其中。输入"make help" 可以查看 make 选项。输入以下代码进行配置。

make menuconfig

Target options 

        buildroot

        Target options 项配置与目标架构相关,必须配置。下面给出我针对 ARMV7 的配置项截图,仅供参考 

 buildroot

Build options 

 buildroot

        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 "。某些情况下会下载更快,当然,仅供参考。

Toolchain

        此项指定交叉编译工具链相关参数,非常重要,一般我们是使用本地已存在的交叉编译工具链。当然, buildroot 也可以根据配置从网络下载工具链。下面贴出我配置的截图,仅供参考。 

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

         上述内容仅供参考,不同工具链所在路径肯定有所区别。打开此文件,为以下内容:

buildroot

        上述 262144 就是内核版本代号,为 10 进制。将其转换为 16 进制为 0X40000,就为  "External toolchain kernel headers series"项的选择值。

        "External toolchain C library" 表示工具链的 C  库类型,一般为 glibc/eglibc。

        后面的选项就没有研究了,有一项 "Toolchain has C++ support" 在支持 QT 时需要选上。

System configuration

     buildroot

 "System banner" 指定了系统挂起时的欢迎语。

"Enable root login with password", 表示使能登录密码,然后下面输入登录密码。注意,在这里有个 bug, 当然,可能是版本原因。就是我失能 "Enable root login with password" 项后,也不输入密码,然后制作的根文件系统在启动的时候同样会需要密码,而且密码不管输入什么都是错误的。必须要使能 "Enable root login with password" 项才行,不管是否输入密码。

Filesystem images

        此功能主要针对生成根文件系统的类型,如下:

buildroot

"ext2/3/4 root filesystem" 项的使能可以生成 ext 格式的根文件系统,通常运行在 EMMC , SD类设备上。

"jffs2 root filesystem" 项的使能生成 jffs2 格式的根文件系统,通常运行在 QSPI Flash 类设备上。 

        

        其余的配置项,保持即可。经过上面的配置,已经可以生成一个目标架构可以运行的基本 rootfs 了。然后终端执行 make, 注意不能 make -jx 指定多核编译。在此过程中,确保联网,buildroot 会根据配置从网上下载所需包。下载完成后就会开始编译构建。最后,生成的 rootfs 镜像会在 output/images 文件夹下。

上一篇:2022-1-25


下一篇:921. Minimum Add to Make Parentheses Valid