IMX6ULL之Buildroot构建自定义文件系统
本篇文章将详细说明如何使用Buildroot来构建一个自定义的文件系统。
1 环境介绍
硬件设备:正点原子IMX6ULL 阿尔法开发板
Buildroot源码:buildroot-2024.02.5.tar.gz
交叉编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
2 Buildroot下载和编译
2.1 下载Buildroot源码
Buildroot源码下载路径:https://buildroot.org/download.html

下载完成后,将源码解压至ubuntu虚拟机内:
tar -xzvf buildroot-2024.02.5.tar.gz
2.2 配置Buildroot
解压完成后,进入buildroot-2024.02.5目录。buildroot支持图形化配置,输入如下指令打开图形化界面进行相关配置:
make menuconfig
(1)配置CPU架构及指令集
首先配置Target options选项,针对IMX6ULL CPU核心对以下选项进行配置:
Target 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
配置完成如下图所示:

(2)配置交叉编译工具链
Buildroot可以选择自动下载交叉编译工具或者使用自己现有的交叉编译工具,但是由于自动下载是从国外服务器上下载,速度较慢,最好使用自己的交叉编译工具。交叉编译工具链选择和编译Uboot、Kernel相同的工具链,在menuconfig中按照如下选项进行逐一配置。
Toolchain
-> Toolchain type = External toolchain
-> Toolchain = Custom toolchain //使用本地自己的交叉编译器
-> Toolchain origin = Pre-installed toolchain //预装的编译器
-> Toolchain path =/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
-> Toolchain prefix = $(ARCH)-linux-gnueabihf //交叉编译工具链前缀
-> External toolchain gcc version = 4.9.x //交叉编译工具链版本
-> External toolchain kernel headers series = 4.0.x //对应的内核版本
-> External toolchain C library = glibc/eglibc
-> [*] Toolchain has SSP support?
-> [*] Toolchain has RPC support?
-> [*] Toolchain has C++ support?
-> [*] Toolchain has D support?
Toolchain path中交叉编译工具链的路径写到交叉编译工具链源码的bin文件之前就可以。
交叉编译工具链的版本可以通过以下指令进行查看:
arm-linux-gnueabihf-gcc --version
对应Kernel的版本不清楚可以随便写一个,后面进行编译的过程中,出错会提示预期的Kernel版本是多少。
全部配置完成如下图所示:

(3)配置系统配置
设置系统相关配置,可以根据需要进行对应的配置,例如用户名、密码、开发板名字和欢迎语等配置,对应内容如下所示:
System configuration
-> System hostname = cgs //hostname
-> System banner = Welcome to imx6ull //欢迎语
-> Init system = BusyBox //选择 busybox
-> /dev management = Dynamic using devtmpfs + mdev
-> [*] Enable root login with password (NEW) //使能登录密码
-> Root password = 123 //登录密码为 123
配置完成如下图所示:

(4)配置文件系统
配置文件系统格式,如果是EMMC或SD卡启动,则使用ext3/ext4格式:
Filesystem images
-> [*] ext2/3/4 root filesystem //选择 ext3/ext4
-> ext2/3/4 variant = ext4 //选择 ext4 格式
(5)禁止编译Linux Kernel和Uboot
若使能了编译Linux Kernel和Uboot的话,Buildroot会自动从官方网站上下载最新的Kernel和Uboot源码,并不适配我们的硬件开发板。我们使用正点原子提供的源码,契合他们提供的开发板,下面对Kernel和Uboot进行禁止编译
Kernel
-> [ ] Linux Kernel //不选择编译Linux Kernel
Bootloaders
-> [ ] U-Boot //不选择编译Uboot
(6)配置其他软件工具包
此时Buildroot编译出来的文件系统是一个最小文件系统,其中有些常用的软件工具没有打包进去,可以在Target packages选项中根据自身需要进行配置选择打包一些软件工具到文件系统中。
例如我需要使用ssh、tcpdump指令,进行配置:
Target packages
-> Networking applications
-> [*] openssh
-> [*] client
-> [*] server
-> [*] key utilities
-> [*] use sandboxing
-> [*] tcpdump
以上所有配置均配置完成后,退出并且保存配置。
2.3 编译Buildroot
输入如下指令开始编译Buildroot,不能通过添加 -jx 来指定多核编译:
make
Buildroot编译过程十分耗时,因为都是从国外官网上下载各个软件包,速度较慢,可能会因为网络问题下载失败。因此可以通过在Windows上手动下载一些下载较慢的软件包来加快编译速度。
例如该软件包下载较慢:
wget -nd -t 3 -O '/home/cgs/NXP_IMX6ULL/buildroot-2024.02.5/output/build/.pcre2-10.42.tar.bz2.ts6fT9/output' 'https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.bz2'
--2024-09-21 15:08:08-- https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.bz2
正在解析主机 github.com (github.com)... 20.205.243.166
正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
手动复制https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.bz2文件地址,在Windows浏览器中输入进行手动下载。将下载好的压缩包放到Buildroot源码目录下的dl/pcre2目录中去。dl文件夹中存放着各个软件工具的压缩包,当下载该软件时会自动创建该软件的文件夹,压缩包放到里面即可。可以通过此方法一个一个手动下载下载速度较慢的软件包,来加快编译速度。
Buildroot编译完成后,会在output/images目录下生成rootfs.tar压缩包:

2.4 打包文件系统
根据自己需要来使用文件系统。假如使用的nfs来挂载文件系统,则可以将rootfs.tar解压到nfs共享文件夹中进行使用。本篇文章使用的正点原子提供的Windows烧录工具,用的是tar.bz2格式压缩包,因此将rootfs.tar解压并重新打包成tar.bz2格式。
3 验证文件系统
将编译好的文件系统进行替换烧写,烧写完成后启动开发板,文件系统如下所示,与正点原子提供的不一样。

可以看到我们在Buildroot中配置的欢迎语和用户名信息,则表示Buildroot自定义构建文件系统成功!!!
和之前所使用过的Linux系统不同的是终端命令行#前面没有用户名和当前文件路径,通过在/etc/profile文件最后一行增加如下内容即可:
vi /etc/profile
export PS1='\u@\h:\w\$ '
增加完后,输入以下指令或者重启开发板,命令行前面就有当前路径和用户名了。
source /etc/profile

至此,本篇文章结束,成功使用Buildroot构建自定义文件系统!!!

浙公网安备 33010602011771号