前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不其全,很多东西需要我们自行添加,比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植,这些第三方软件有很多又依赖其他的库文件,导致移植过程非常的繁琐。本章我们来学习一下另外一种实用的根文件系统构建方法,那就是使用 buildroot 来构建根文件系统。

1 何为 buildroot ?

1.1 buildroot 简介

我们讲解了如何使用 busybox 构建文件系统,busybox 仅仅只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要我们自己手动创建,而且 busybox 构建的根文件系统默认没有用户名和密码设置。在后续的实验中,我们还要自己去移植一些第三方软件和库,比如 alsa、iperf、mplayer 等等。那么有没有一种傻瓜式的方法或软件,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植。答案肯定是有的,buildroot 就是这样一种工具,buildroot比 busybox 更上一层楼,buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,需要什么就选择什么,就跟我们去吃自助餐一样,想吃什么就拿什么。buildroot 极大的方便了我们嵌入式 Linux 开发人员构建实用的根文件系统。从 busybox 开始一步一步的构建根文件系统适合学习、了解根文件系统的组成,但是不适合做产品(主要是自己构建的话会有很多不完善、没有注意到的细节)。buildroot 会帮我们处理好各种细节地方,是我们的根文件系统更加的合理、有效。因此大家在做产品的时候推荐大家使用 buildroot 来构建自己的根文件系统,当然了,类似 buildroot 的软件还有很多,比如 yocto。
buildroot 和 uboot、Linux Kernel 很类似,我们需要到其官网上下载源码,然后对其进行配置,比如设置交叉编译器、设置目标 CPU 参数等,最主要的就是选择所需要的第三方库或软件。一切配置好以后就可以进行编译,编译完成了以后就会在一个文件夹里面存放好编译结果,也就是根文件系统。

1.2 buildroot 下载

buildroot 源码肯定是要从 buildroot 官网下载,官网地址为 https://buildroot.org/,打开以后的官网界面如图所示:

点击图中的“DOWNLOAD”按钮即可打开 buildroot 的下载界面,如所示:

可以看出,在写本教程的时候最新的 LTS(长期支持版)版 buildroot 为 2019.02.6,分为.gz和.bz2 两种压缩格式,这里我就使用右侧的.bz2 压缩格式的源码,选中以后下载即可。

2 buildroot 构建根文件系统

2.1 配置 buildroot

将 buildroot 源码 buildroot-2019.02.6.tar.bz2 拷贝到 ubuntu 中,也就是我们前面创建的 tool目录下。拷贝完成以后对其进行解压,命令如下:tar -vxjf buildroot-2019.02.6.tar.bz2解压完成以后就会得到一个名为“buildroot-2019.02.6”的目录,此目录就是我们解压得到
的 buildroot 源码,进入到此目录中,此目录下的文件如图所示:

buildroot 和 uboot、Linux kernel 一样也支持图形化配置,输入如下命令即可打开图形化配置界:
make menuconfig
打开以后的图形化配置界面如图所示:

接下来我们就依次配置 buildroot,配置完成以后就可以进行编译了。
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

2.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 RPC support? (NEW) //选中
-> [*] Toolchain has C++ support? //选中
-> [*] Enable MMU support (NEW) //选中

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

2.3配置 System configuration

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

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

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

2.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

对于 I.MX6U 来说此选项不用配置,因为我们是通过 Mfgtool 工具将根文件系统烧写到开发板上的 EMMC/SD 卡中,烧写的时候需要自己对根文件系统进行打包。

2.5 配置 Target packages

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

2.6编译 buildroot

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件系统压缩包,我们可以直接使用。输入如下命令开始编译:
sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!
buildroot 编译的时候会先从网上下载所需的软件源码,有些软件源码可能下载不下来,这个时候就需要我们自行处理,这个后面会详细的讲解。
buildroot 编译过程会很耗时,可能需要几个小时,请耐心等待!
buildroot 因为要从网上下载源码,因此可能存在有些源码无法下载或下载很慢的情况。

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

我在前面学习的时候需要自行移植一些第三方的库和软件,比如 alsa-lib、alsa-utils 等等,现在我们不需要自行移植这些第三方软件和库了,可以直接在 buildroot 里面配置使能。比如我们现在配置使能 alsa-lib、alsa-utils 这两个软件和库。

3.1使能 alsa-lib

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

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

如图所示:

3.2使能 alsa-utils

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

Target packages
-> Audio and video applications
-> alsa-utils  此目录下的软件全部选中

配置好以后如图所示:

等待编译完成就可以使用新的根文件系统进行测试了,将 buildroot/images/rootfs.tar 拷贝到
nfs 目录下的 buildroot 目录中,然后重新解压。注意,以前自己添加的文件并不会被删除掉的,
解压命令如下:

tar -vxf rootfs.tar

解压完成以后就可以使用 alsa-utils 相关的软件了,比如 alsamixer,想想我们曾经自行移植 alsa-utils 的时候,那个过程叫一个复杂。通过 buildroot 的话直接一个配置就可以搞定全部,方便快捷,大家可以自行尝试去配置使能一些其他的第三方库和软件。

4 buildroot 下的 busybox 配置

4.1 busybox 配置

buildroot 在构建根文件系统的时候也是要用到 busybox 的,既然用到了 busybox 那么就涉
及到 busybox 的配置。buildroot 会自动下载 busybox 压缩包,buildroot 下载的源码压缩包都存
放在/dl 目录下,在 dl 目录下就有一个叫做“busybox”的文件夹,此目录下保存着 busybox 压
缩包,如图所示:

可以看出,buildroot 下载的 busybox 版本为 1.29.3。要想编译 busybox,必须对图中的压缩包进行解压缩,buildroot 将所有解压缩后的软件保存在/output/build 软件中,我们可以在找到/output/build/busybox-1.29.3 这个文件夹,此文件夹就是解压后的 busybox 源码。

如果大家想要修改 busybox 源码的话就直接找到相应的文件,然后修改即可。我们现在是要配置 buildroot 下的 busybox,因此肯定要打开 busybox 的配置界面,在 buildroot下打开 busybox 的配置界面输入如下命令:

sudo make busybox-menuconfig

输入以后就会打开 buildroot 下的 busybox 配置界面,

上图就是我们最熟悉的busybox配置界面了,大家想要配置什么就直接操作就行了。

4.2 编译 busybox

配置好以后就可以重新编译 buildroot 下的 busybox,进入到 buildroot 源码目录下,输入如下命令查看当前 buildroot 所有配置了的目标软件包,也就是 packages:

sudo make show-targets

结果所示:
图中列出了当前 buildroot 中所有使能了的 packages 包,其中就包括 busybox,如果我们想单独编译并安装 busybox 的话执行下面命令即可:

sudo make busybox

上述命令就会重新编译 busybox。编译完成以后重现编译 buildroot,主要是对其进行打包,输入如下命令:

sudo make

重新编译完成以后查看一下 output/images 目录下 rootfs.tar 的创建时间是否为刚刚编译的,如果不是的话就删除掉 rootfs.tar,然后重新执行“sudo make”重新编译一下即可。最后我们使用新的 rootfs.tar 启动 Linux 系统。

Buildroot根文件系统构建相关推荐

  1. 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  2. 根文件系统构建(Buildroot 方式)

    目录 何为buildroot? buildroot 简介 buildroot 下载 buildroot 构建根文件系统 配置buildroot 编译buildroot buildroot 根文件系统测 ...

  3. 根文件系统构建(BusyBox方式)

    目录 根文件系统简介 BusyBox构建根文件系统 BusyBox简介 编译BusyBox构建根文件系统(生成bin.sbin.usr.linuxrc) 向根文件系统添加lib库 创建其他文件夹 根文 ...

  4. Linux之系统移植与根文件系统构建

    Linux之系统移植与根文件系统构建 1.Uboot 1. 什么是Uboot: 一个裸机程序 就是一个bootloader用于启动Linux或其他系统 最主要的工作就是初始化DDR.因为Linux是运 ...

  5. 【正点原子Linux连载】第三十八章 根文件系统构建 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  6. linux系统根文件系统构建

    根文件系统构建 一.根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统, 从根文件系统中读取初始化脚本,比如 rcS,inittab 等. 根文件系统和 Linu ...

  7. linux开发 | 根文件系统构建实验及过程详解

    <2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解> 第一部分.章节目录 2.19.1.根文件系统的构建路线 2.19.2.busybox的移植实战 2.19. ...

  8. linux 开机 找不到 文件系统 下载文件系统就好了,根文件系统构建和实验过程

    1.1.根文件系统构建路线 1.先逐步构建文件夹形式的根文件系统然后在制作烧录镜像 2.1.busybox移植实战 1.busybox中是一些shell命令集 2.busybox××× (1)busy ...

  9. 二十.Linux开发之根文件系统构建及过程详解

    老规矩 有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=15b6e982c2e66d0f47b1c787a49f4 ...

最新文章

  1. Vyond制作2D动画学习教程
  2. 【重发】终于提交了项目第一个版本到git@osc了。兴奋ing
  3. php通过正则提取页面相关信息
  4. python将列表转换为字符串_每日一课 | Python将文件读入列表
  5. JavaScriptjQuery.返回多个值的函数
  6. linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}
  7. 一个同事做的基于yaas平台的一个应用,可以用来学习SAP yaas
  8. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学
  9. LSGO软件技术团队2015~2016学年第十六周(1214~1220)总结
  10. 网站服务器令牌获取,adobe - 获取Adobe Sign访问令牌以进行服务器到服务器身份验证 - 堆栈内存溢出...
  11. Yahoo Programming Contest 2019 自闭记
  12. 微信再次“杠上”支付宝!|畅言
  13. 一个Win32程序的进化
  14. DeepWalk学习
  15. 广播接收者的特点和版本差异
  16. 音视频编解码常用知识点
  17. 抢先体验 八九月间漫步最初秋色
  18. [python]WindowsError的错误代码详解
  19. 浅谈SVG的两个黑魔法
  20. 优雅的点-2017网易校园招聘

热门文章

  1. Android 开发 带图像的Toast提示
  2. MVP 模式实例解析
  3. nyoj-155-求高精度幂(java大数)
  4. 列表生成式的复习以及生成器的练习, 杨辉三角实例(非常巧妙)
  5. 妈蛋:kinMaxShow旋转木马异常,WebUploader图片上传坑爹,图像被压缩
  6. ajax get post
  7. 【C++】位运算实现加减乘除
  8. Tomcat的startup.bat启动闪退解决办法
  9. JMETER 用户自定义的变量
  10. 03-20 专项测试-APP 启动性能分析