当前位置: 首页 > news >正文

I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建

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

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 参数等,最主要的就是选择所需要的第三方库或软件。
一切配置好以后就可以进行编译,编译完成了以后就会在一个文件夹里面存放好编译结果,也就是根文件系统。

buildroot 下载
 

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

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

buildroot 构建根文件系统

配置 buildroot

将 buildroot 源码拷贝到 ubuntu 中。拷贝完成以后对其进行解压,命令如下:

tar -xf buildroot-2024.02.1.tar.gz

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

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

make menuconfig

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

配置 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

配置 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。

配置 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

配置 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

禁止编译 Linux 内核和 uboot

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

配置 Target packages

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

编译 buildroot

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

sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!

buildroot 编译的时候会先从网上下载所需的软件源码,有些软件源码可能下载不下来,这个时候就需要我们自行处理,这个后面会详细的讲解。
buildroot 编译过程会很耗时,可能需要几个小时,请耐心等待!
buildroot 因为要从网上下载源码,因此可能存在有些源码无法下载或下载很慢的情况,遇到此情况可自行下载,然后拷贝到 Ubuntu 中 buildroot 源码目录下的 dl 文件夹中, dl 文件夹专用用于存放下载下来的源码。

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

相关文章:

  • C++自主点餐系统
  • WordPress Git主题 响应式CMS主题模板
  • python基本数据(如注释)
  • taro框架之taro-ui中AtSwipeAction的使用
  • Swift 周报 第四十八期
  • QT事件机制
  • 在Linux上使用nginx反向代理部署Docker网站
  • 【Java扫盲篇】String、String Buffer和String Builder的区别
  • iOS开发 - 转源码 - __weak问题解决
  • spikingjelly学习-使用单层全连接snn脉冲神经网络识别mnist数据集
  • websocket 内的操作码fin和opcode
  • 数据结构万字总结(超级详细)第二章——线性表
  • JVM虚拟机-实战篇
  • AI+云平台|全闪云底座迎战
  • 自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】
  • 【node学习】协程
  • 【翻译】babel对TC39装饰器草案的实现
  • AngularJS指令开发(1)——参数详解
  • CentOS 7 修改主机名
  • JavaScript设计模式之工厂模式
  • rabbitmq延迟消息示例
  • ReactNative开发常用的三方模块
  • springMvc学习笔记(2)
  • Vue组件定义
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前嗅ForeSpider教程:创建模板
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 移动端唤起键盘时取消position:fixed定位
  • 译有关态射的一切
  • 中文输入法与React文本输入框的问题与解决方案
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (¥1011)-(一千零一拾一元整)输出
  • (a /b)*c的值
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (一)Dubbo快速入门、介绍、使用
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .form文件_一篇文章学会文件上传
  • .gitignore文件_Git:.gitignore
  • .net core 6 集成和使用 mongodb
  • .net framework profiles /.net framework 配置
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net多线程总结
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2010-8-30]
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色