12.Buildroot根文件系统的构建¶

12.3. Buildroot构建¶

本教程使用的是buildroot版本为: buildroot-2021.02.3

可以访问资料网盘/8-SDK源码压缩包/buildroot-2021.02.3.tar.gz,进行下载。

如果需要使用新版本可以到官网地址下载:https://buildroot.org/ 打开后如图

选择DOWNLOAD

选择长期支持版本(LTS),两个压缩格式,选择其中一个即可

或者访问buildroot官方的gitlab仓库进行下载: buildroot仓库

注意

如果使用新版本一些配置项可能发生改变,如果没有特殊需求建议使用教程相同版本。

12.3.1. 解压源码包和交叉编译工具链¶

以buildroot-2021.02.3版本为例,构建根文件系统。

1

2#解压buildroot源码包

tar -vxf buildroot-2021.02.3.tar.gz

交叉编译工具链使用资料网盘/6-开发软件/交叉编译工具链/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz

将gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz解压到buildroot源码根目录。

1

2

3

4

5

6

7

8

9#解压交叉编译工具链到buildroot源码根目录

tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C buildroot-2021.02.3/

#查看buildroot源码根目录

ls buildroot-2021.02.3/

arch Config.in DEVELOPERS gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf output system

board Config.in.legacy linux package toolchain

boot configs docs Makefile README utils

CHANGES COPYING fs Makefile.legacy support

其中gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf目录就是我们要使用的交叉编译工具链目录。

12.3.2. 打开配置界面¶

1

2

3 #进入源码目录并打开配置界面

cd buildroot-2021.02.3

make menuconfig

配置界面如下:

12.3.3. 配置Target options¶

进入Target options配置项,修改为以下配置:

1

2

3

4

5

6

7Target options

-> Target Architecture = ARM (little endian)

-> Target Binary Format = ELF

-> Target Architecture Variant = cortex-A7

-> Target ABI = EABIhf

-> Floating point strategy = NEON/VFPv4

-> ARM instruction set = ARM

设置完如下图所示:

12.3.4. 配置Toolchain¶

进入Toolchain配置项,修改为以下配置:

1

2

3

4

5

6

7

8

9

10

11

12

13Toolchain

-> Toolchain type = External toolchain

-> Toolchain = Custom toolchain //选择用户的交叉编译器

-> Toolchain origin = Pre-installed toolchain

-> Toolchain path = $(TOPDIR)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf //这里填入交叉编译器路径,$(TOPDIR)是buildroot源码根目录

-> Toolchain prefix = arm-linux-gnueabihf //交叉编译链前缀

-> External toolchain gcc version = 8.x //交叉编译链版本

-> External toolchain kernel headers series = 4.19.x //交叉编译链LINUX_VERSION_CODE版本

-> External toolchain C library = glibc/eglibc

-> [*] Toolchain has SSP support? (NEW) //选中

-> [*] Toolchain has RPC support? (NEW) //选中

-> [*] Toolchain has C++ support? //选中

-> [*] Enable MMU support (NEW) //选中

设置完如下图所示:

12.3.5. 配置System configuration¶

进入System configuration配置项,修改为以下配置:

1

2

3

4

5

6

7System configuration

-> (buildroot) System hostname = buildroot //主机名字

-> (Welcome to Buildroot) System banner = Welcome to Buildroot //欢迎语

-> Init system (BusyBox) = BusyBox //使用 busybox

-> /dev management = Dynamic using devtmpfs + mdev //使用mdev

-> [*] Enable root login with password //使能root密码登录

-> () Root password //可设置登录密码

设置完如下图所示:

以上Root password选项可设置root密码,如果需要使用密码进行登录,可自行设置,如果密码为空则root登录时不需要输入密码。

12.3.6. 配置Filesystem images¶

进入Filesystem images配置项,这个选项是配置将编译生成什么格式的根文件系统,可以做如下配置:

1

2

3

4

5-> Filesystem images

-> [*] ext2/3/4 root filesystem //EMMC或SD卡使用ext3/ext4格式

-> ext2/3/4 variant = ext4 //选择ext4格式

-> (300M)exact size //设置文件系统大小

-> [*] ubi image containing an ubifs root filesystem //NAND使用ubi格式

设置完如下图所示:

12.3.7. 关闭kernel和uboot的编译¶

Buildroot不仅能构建根文件系统,还可以编译kernel和uboot,但是这些源码是从官网下载的,很可能是没包含各芯片厂商的驱动文件,所以我们关闭kernel和uboot编译即可。

进入Kernel配置项,确认没有使能Linux Kernel配置项。

1

2-> Kernel

-> [ ] Linux Kernel

进入Bootloaders配置项,确认没有使能U-Boot配置项。

1

2-> Bootloaders

-> [ ] U-Boot

12.3.8. 保存配置文件¶

修改完成后选择右下角进行保存,默认保存为buildroot顶层目录下的.config即可。

因为默认保存的不是精简配置文件,而是包含全部配置项的文件,不利于后续观察和配置,因此需要生成精简的配置文件,并保存到configs/目录下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25#根据.config生成defconfig精简配置

make savedefconfig

#保存到configs目录下

cp -f defconfig configs/imx6ullfire_defconfig

#查看生成的配置

cat configs/imx6ullfire_defconfig

#信息输出如下

BR2_arm=y

BR2_cortex_a7=y

BR2_ARM_FPU_NEON_VFPV4=y

BR2_TOOLCHAIN_EXTERNAL=y

BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y

BR2_TOOLCHAIN_EXTERNAL_PATH="$(TOPDIR)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf"

BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-linux-gnueabihf"

BR2_TOOLCHAIN_EXTERNAL_GCC_8=y

BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y

BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y

BR2_TOOLCHAIN_EXTERNAL_CXX=y

BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y

BR2_TARGET_ROOTFS_EXT2=y

BR2_TARGET_ROOTFS_EXT2_4=y

BR2_TARGET_ROOTFS_EXT2_SIZE="300M"

BR2_TARGET_ROOTFS_UBI=y

imx6ullfire_defconfig中的内容就是我们前面的修改,当加载配置文件时会加载默认配置文件,然后再根据我们的配置文件覆盖默认配置生成.config。

12.3.9. 下载dl源码包¶

因为Buildroot编译时会拉取软件包源码存放到dl/目录下,如果访问外网困难则拉取的时间将会十分漫长,因此可以使用野火编译时拉取好的。

访问资料网盘/8-SDK源码压缩包/dl.tar.gz,进行下载。

将dl.tar.gz压缩包传到buildroot源码根目录,然后解压:

1

2

3

4

5

6

7

8#进入源码根目录

cd buildroot-2021.02.3

#解压

tar xvf dl.tar.gz

#查看源码包

ls dl/

以上压缩包仅适用于buildroot-2021.02.3版本,如果是其他版本则需编译时自行拉取。

12.3.10. 编译Buildroot¶

1

2

3

4

5

6

7

8

9

10

11#加载配置文件

make imx6ullfire_defconfig

#编译,使用16线程,根据自己的电脑性能而定

make -j16

#如果遇到编译错误,使用单线程编译,并添加编译详细输出

make -j1 V=s

#解决报错后再使用多线程编译

编译完成后文件在 buildroot源码/output/images 文件夹中,其中 rootfs.tar 为本教程需要的文件。

1

2

3#查看编译输出

ls output/images/

rootfs.ext2 rootfs.ext4 rootfs.tar rootfs.ubi rootfs.ubifs