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 下生成根文件系统,如图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetes Create an nginx pod named nginx-pod-cka using the nginx image, and expose it internally with a service named nginx-service-…

Jenkins拉取github项目相关问题

1.私有仓库问题 1.1如果你的仓库是私有的,21年起github就不支持账号密码的方式拉取代码了 那么就需要在github上面创建一个token (classic) 然后在Jenkins代码设置那里 然后应该就可以顺利打包了。 2.找不到pom(多了一层文件夹)问题 解…

护眼大路灯智商税吗?五款最佳护眼落地灯分享!

大路灯能够提供更加舒适健康的光线,而且大路灯还提供许多能够提高使用便捷度的大路灯,尤其是对于学生党以及上班族来说,大路灯是一款很好的用眼照明小帮手。然而,对于护眼大路灯智商税吗这个问题,很冥想不是&#xff0…

1.java openCV4.x 入门-环境搭建

专栏简介 💒个人主页 📖心灵鸡汤📖大家 📰专栏目录 点击上方查看更多内容 环境搭建 一、开发环境二、环境搭建1.openCV安装1.下载程序包 2.程序包安装3.搭建项目 三、非必要资源1.扩展库2.cmake 一、开发环境 开发工具 i…

数据库索引及优化

数据库索引及优化 什么是索引? MySQL官方对索引的定义为:索引(INDEX)是帮助MySQL高效获取数据的数据结构。 索引的本质: 数据结构 为什么要引入索引? 引入索引的目的在于提高查询效率,就好像是…

常用的8个应用和中间件的Docker运行示例

文章目录 1、Docker Web 管理工具 portainer2、在线代码编辑器 Code Server3、MySQL4、Redis5、Nginx6、PostgreSQL7、媒体管理工具 Dim8、Gitlab 1、Docker Web 管理工具 portainer Portainer 是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境&#xff0…

软件测试面试——你准备好了吗?

软件的生命周期 计划阶段-〉需求分析-〉设计阶段-〉编码->测试->运行与维护 测试用例:用例ID,测试项,重要级别,优先级别,预置条件,测试标题,操作步骤,预期结果。&#xff08…

【Vue】computed 和 watch 的区别

Watch 上一篇文章事件绑定和计算属性讲了computed属性,现在来讲讲Watches属性 data() {return {counter: 0,name: "",fullname: "",}},watch: {counter(value) {if (value > 50) {this.counter 0}},name(value) {if (value "") {return (t…

无忧微服务:如何实现大流量下新版本的发布自由

作者:项良、十眠 微服务上云门槛降低,用好微服务才是关键 据调研数据显示,约 70% 的生产故障是由变更引起的。在阿里云上的企业应用如茶百道、极氪汽车和来电等,他们是如何解决变更引起的稳定性风险,实现了在白天高流…

ES学习日记(二)-------集群设置

上一节写了elasticsearch单节点安装和配置,现在说集群,简单地说就是在多台服务器上搭建单节点,在配置文件里面增加多个ip地址即可,过程同单节点部署,主要说集群配置 注意:不建议在之前单节点es上修改配置为集群,据说运行之后会生成很多文件,在单点基础上修改容易出现未知问题,…

QT中的摄像头显示与拍照

一、思路 1.1 摄像头图像捕捉 QT中摄像头的使用首先想到的是Camera&#xff0c;在帮助手册里面查询可以看到QCamera的类。 添加对应的模块multimedia与类<QCamera>&#xff0c;然后查看QCamera的使用。 有详细的例子&#xff0c;例子中能发现新的类型QCameraInfo&#…

CMS(内容管理系统)

一、系统的编写可以在开源网站上下载一个相关项目&#xff0c;然后做2次开发 企业建站系统:MetInfo(米拓)、蝉知、SiteServer CMs等; B2C商城系统:商派Shopex、ECshop、HiShop、XpShop等; 门户建站系统:DedeCMS(织梦)、帝国CMS、PHPCMS、动易、CmsTop等; 博客系统:WordPres…

Elasticsearch是什么及作用

初识Elasticsearch 一、Elasticsearch是什么&#xff1f; es是款强大的开源搜索技术&#xff0c;具备非常多强大的功能&#xff0c;能够帮助我们开发人员从海量数据中快速找到需要的内容。例如在GitHub上搜索代码&#xff0c;在jd、tb网站中搜索商品、在baidu中搜索答案。 二、…

人才测评系统 提升HR招聘和人岗管理

人才是一个企业的核心竞争力。商业社会的激烈竞争和种种挑战&#xff0c;实际上都是人才的竞争。企业的招聘&#xff0c;职位调动&#xff0c;晋升&#xff0c;人岗匹配的核心对象都是人。现如今&#xff0c;越来越多的企业引入了人才测评机制&#xff0c;但是一些HR却出现不理…

Uibot6.0 (RPA财务机器人师资培训第5天 ) 报销汇总机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https…

华为广告打包报错,问题思考

华为广告打包时报错 fata日志不一样能反映出完整的错误日志信息&#xff0c;仅看fata日志具有误导性&#xff0c;有可能指向错误的方向。 通过看完整的日志可见&#xff0c;错误的原因为 Caused by: java.lang.ClassNotFoundException: com.huawei.hms.ads.base.R$dimenfata日…

SDKMAN多版本SDK并行管理工具

一、简介 SDKMAN是管理多个SDK并行版本的工具&#xff0c;它提供了方便的命令行界面&#xff08;CLI&#xff09;和API&#xff0c;用于列出&#xff0c;安装&#xff0c;切换和删除候选对象。此外&#xff0c;它还为我们设置了环境变量。 它还允许开发人员安装基于JVM的SDK&…

2024/03/28(C++·day4)

一、思维导图 二、练习题 1、写出三种构造函数&#xff0c;算术运算符、关系运算符、逻辑运算符重载尝试实现自增、自减运算符的重载 #include <iostream>using namespace std;// 构造函数示例 class MyClass { private:int data; public:// 默认构造函数MyClass() {da…

Elasticsearch从入门到精通-07ES底层原理学习

Elasticsearch从入门到精通-07ES底层原理和高级功能 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES底层原理包括集群原理、路由原理、分配控制、分配原理、文档分析原理、文档并发安全原理以及一些高…