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构建自定义文件系统!!!

posted @ 2024-09-22 13:03  我要O泡7  阅读(1473)  评论(0)    收藏  举报