侧边栏壁纸
博主头像
xiaoming博主等级

累死自己,卷死别人,为了小刘而努力!!!

  • 累计撰写 24 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Buildroot 根文件系统构建

Administrator
2024-01-11 / 0 评论 / 0 点赞 / 44 阅读 / 11071 字 / 正在检测是否收录...

1. 何为buildroot?

1.1 buildroot简介

busybox 仅仅只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要我们自己手动创建,而且 busybox
构建的根文件系统默认没有用户名和密码设置。如果我们还要移植一些第三方软件和库,比如 alsa、iperf、mplayer 就会比较麻烦。而buildroot 不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植了。需要什么就选择什么,就跟我们去吃自助餐一样,想吃什么就拿什么。

buildroot 极大的方便了我们嵌入式 Linux 开发人员构建实用的根文件系统。从 busybox 开始一步一步的构建根文件系统适合学习、了解根文件系统的组成,但是不适合做产品(主要是自己构建的话会有很多不完善、没有注意到的细节)。 buildroot 会帮我们处理好各种细节,根文件系统也会更加的合理、有效。因此在做产品的时候推荐大家使用 buildroot 来构建自己的根文件系统。buildroot 和 uboot、Linux Kernel 很类似,我们需要到其官网上下载源码,然后对其进行配置,比如设置交叉编译器、设置目标 CPU 参数等,最主要的就是选择所需要的第三方库或软件。一切配置好以后就可以进行编译,编译完成了以后就会在一个文件夹里面存放好编译结果,也就是根文件系统。

1.2 buildroot下载

buildroot 源码肯定是要从 buildroot 官网下载,官网地址为官网,打开以后的官网界面 :

d6e68bf3a30f4b7c8ddf6620cb0f1591

点击图中的 DOWNLOAD 按钮即可打开 buildroot 的下载界面,

image-20240110184157423

2. buildroot 构建根文件系统

2.1 配置 buildroot

将 buildroot 源码 buildroot-2023.11.tar.gz 拷贝到 ubuntu 中,也就是我们前面创建的 tool 目录下。拷贝完成以后对其进行解压,命令如下:

tar -vxjf buildroot-2023.11.tar.gz

解压完成以后就会得到一个名为 buildroot-2023.11 的目录,此目录就是我们解压得到的 buildroot 源码,进入到此目录中,此目录下的文件:

image-20240110184552305

buildroot 和 uboot、Linux kernel 一样也支持图形化配置,输入如下命令即可打开图形化配置界:

make menuconfig

打开以后的图形化配置界面如图 所示

image-20240110184647253

接下来我们就依次配置 buildroot,配置完成以后就可以进行编译了。

2.1.1 配置 Target options

首先配置 Target options 选项,需要配置的项目和其对应的内容如下(“=”号后面是配置项要选择的内容!):

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

配置完成以后如图所示

image-20240110184802934

2.1.2 配置 Toolchain

此配置项用于配置交叉编译工具链,也就是交叉编译器,这里设置为我们自己所使用的交叉编译器即可。buildroot 其实是可以自动下交叉编译器的,但是都是从国外服务器下载的,鉴于国内的网络环境,强烈推荐大家设置成自己所使用的交叉编译器。需要配置的项目和其对应的内容如下:

Toolchain
-> Toolchain type = External toolchain
-> Toolchain = Custom toolchain //用户自己的交叉编译器
-> Toolchain origin = Pre-installed toolchain //预装的编译器
-> Toolchain path =/usr/local/arm/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.1.x
-> External toolchain C library = glibc/eglibc
-> [] Toolchain has SSP support? (NEW) //选中
-> [] Toolchain has SSP strong support? (NEW) //选中
-> [] Toolchain has RPC support? (NEW) //选中
-> [] Toolchain has C++ support? //选中
-> [] Toolchain has Fortran support? //选中-> [] Toolchain has OpenMP support? //选中

Toolchain 下几个比较重要的选项需要说明一下,如下所示:

Toolchain:设置为 Custom toolchain,表示使用用户自己的交叉编译器
Toolchain origin:设置为 Pre-installed toolchain,表示使用预装的交叉编译器
Toolchain path:设置自己安装的交叉编译器绝对路径!buildroot 要用到
Toolchain prefix:设置交叉编译器前缀,要根据自己实际所使用的交叉编译器来设置,比如我们使用的是 arm-linux-gnueabihf-gcc,因此前缀就是 $(ARCH)-linux-gnueabihf,其中 ARCH我们前面已经设置为了 arm

image-20240110185019472

image-20240110185108981

2.1.3 配置 System configuration

此选项用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。需要配置的项目和其对应的内容如下:

System configuration
-> System hostname = xiaoming//平台名字,自行设置
-> System banner = Welcome to buildroot //欢迎语
-> Init system = BusyBox //使用 busybox
-> /dev management = Dynamic using devtmpfs + mdev //使用 mdev
-> [*] Enable root login with password (NEW) //使能登录密码
-> Root password = 0206//登录密码为 0206

在 System configuration 选项中可以配置平台名字,登录密码等信息

image-20240110185653690

2.1.4 配置 Filesystem images

此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

Filesystem images
-> [] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4
-> ext2/3/4 variant = ext4 //选择 ext4 格式
-> [] ubi image containing an ubifs root filesystem //如果使用 NAND 的话就用 ubifs

如果我们是通过 Mfgtool 工具将根文件系统烧写到开发板上的 EMMC/SD 卡中,烧写的时候需要自己对根文件系统进行打包,此项不需要配置。

image-20240110190747379

2.1.5 禁止编译 Linux 内核和 uboot

(默认没有配置,可以不用管)

buildroot 不仅仅能构建根文件系统,也可以编译 linux 内核和 uboot。当配置 buildroot,使能 linux 内核和 uboot 以后 buildroot 就会自动下载最新的 linux 内核和 uboot 源码并编译。但是我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot 官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要求,可能导致编译失败。因此我们需要配置 buildroot,关闭 linux 内核和 uboot 的编译,只使用 buildroot 来构建根文件系统,首先是禁止 Linux 内核的编译,配置如下:

Kernel
-> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!

image-20240110185856670接着禁止编译 Uboot,配置如下:

Bootloaders
-> [ ] U-Boot //不要选择编译 U-Boot 选项!

image-20240110185919689

2.1.6 配置 Target packages

此选项用于配置要选择的第三方库或软件、比如 alsa-utils、ffmpeg、iperf等工具,但是现在我们先不选择第三方库,防止编译不下去!先编译一下最基本的根文件系统,如果没有问题的话再重新配置选择第三方库和软件。否则一口吃太多会容易撑着的,编译出问题的时候都不知道怎么找问题。

2.1.7 配置 Build options

buildroot 编译的时候会先从网上下载所需的软件源码,有些软件源码可能下载不下来,这个时候就需要配置国内的加速镜像源url地址,速度可以快非常多!!

Build options
-> Mirrors and Download locations
-> (https://sources.buildroot.net) Backup download site
-> (https://mirror.bjtu.edu.cn/kernel/) Kernel.org mirror
-> (http://mirrors.nju.edu.cn/gnu/) GNU Software mirror
-> (https://luarocks.cn) LuaRocks mirror
-> (http://mirrors.nju.edu.cn/CPAN/) CPAN mirror (Perl packages)

在上面填入相应的国内镜像源可以大大加快下载的速度

image-20240110191203545

2.2 编译 buildroot

2.2.1 配置交叉编译器

在配置完成之后就可以进行编译了,但是在编译之前还是要配置一下交叉编译器才可以,否则会报错。

Incorrect selection of kernel headers: expected 4.1.x, got 4.0.x
make: *** [package/pkg-generic.mk:273:/home/linux/buildroot-2023.11/output/build/toolchain-external-custom/.stamp_configured] 错误 1

输入命令:

vim /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h

image-20240110192136089

如上图所示 LINUX_VERSION_CODE 为 262144,此值为 10 进制,转换为 16 进制为 40000,对应的 linux 内核版本为 4.0.x,在此要把该值改为与 buildroot 中配置的一致,即为 4.1.x,转换为 16 进制为 40100,对应的十进制为 262400。

2.2.2 开始编译

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件系统压缩包,我们可以直接使用。输入如下命令开始编译:

sudo make -j16 //注意,一定要加 sudo,有的说是不能通过-jx 来指定多核编译,目前测试是可以的

等待编译完成,编译完成以后就会在 buildroot-2023.11/output/images 下生成根文件系统,如图所示:

image-20240110191414444

rootfs.tar 就是打包好的根文件系统,我们就使用 rootfs.tar 进行测试。

2.2.3 移植根文件系统

将 rootfs.tar 拷贝到 SD 卡或者挂载的 nfs 文件系统下解压,并删去原来的 rootfs.tar。

使用命令 vim ./etc/profile 打开文件。(注意这里打开的是刚刚打包的文件系统,不是打开 ubuntu 的文件)

添加以下内容如图:

PS1='[$USER@$HOSTNAME]$PWD#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH

之后就可以把文件系统挂载到开发板上进行测试了。

3. buildroot 第三方软件和库的配置

在 buildroot 构建的根文件系统运行基本没有问题,但是这个根文件系统是最简单的,我们并没有在 buildroot
里面配置任何第三方的库和软件,接下来我们就配置 buildroot,使能一些常见的第三方软件。

比如我们现在配置使能 alsa-lib、alsa-utils这两个软件和库。

3.1 使能 alsa-lib

输入 make menuconfig,打开 buildroot 配置界面,配置路径如下:

Target packages
-> Libraries
-> Audio/Sound
-> -*- alsa-lib
-> 此配置项下的文件全部选中

image-20240110193731676

3.2 使能 alsa-utils

接下来使能 alsa-utils,路径如下:

Target packages
-> Audio and video applications
-> alsa-utils
-> 此配置项下的文件全部选中

配置好以后如图所示

image-20240110193916915

配置完成之后重新拷贝文件系统到开发板中

解压完成以后就可以使用 alsa-utils 相关的软件了,比如 alsamixer。大家也可以自行尝试去配置使能一些其他的第三方库和软件。

4. 参考

Buildroot 切换到国内源

迅为IMX6ULL开发板从零开始编译 buildroot

Linux系统构建工具buildroot手册

0

评论区