一文解析嵌入式Linux系统自动构建框架

news2024/12/22 19:15:19

1、Buildroot 是什么?

Buildroot 是 Linux 平台上一个开源的嵌入式 Linux 系统自动构建框架。整个Buildroot是由 Makefile 脚本和 Kconfig 配置文件构成的。你可以和编译Linux内核一样,通过 buildroot 配置,menuconfig 修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

2、Buildroot 使用演示

以 Buildroot 官方开源社区维护的经典 mini2440 开发板的项目为例,演示其使用方法。1) 先从 Buildroot 官网下载最新的稳定版压缩包,放到 Ubuntu 系统下解压。2) 进入解压后的 Buildroot 主目录,其目录结构图如下。

3) make mini2440_defconfig4) make all5) 编译完,生成的可烧写文件镜像,主目录的在output/images/ 文件夹下,截图如下:

看起来,只要执行make *config和make all的命令,u-boot/linuxkernel/rootfs 都能一次性编译好,而且编出来的镜像可以直接烧到mini2440开发板中运行,以后制作uboot, 编译kenrel, 编译各种app, 制作rootfs的繁琐工作都可以自动化一步搞定,妈妈再也不用担心我构建过程出错了。Buildroot不愧是自动构建神器。

3、Buildroot 的优势

Buildroot大概有以下几点优势:a). 可以通在make *config 之后,make menuconfig 配置需要编译的软件包,menuconfig目录如下:

实际上,uboot, linux kernel 还有 ffmpeg等这些应用包,并不是强制都有编译出来的,都可以通过make menuconfig进行选择,编译和构建。Buildroot原则上是提供自动构建框架,具体要编译什么包,都是用户自己可以选择的。

b). 对丰富的开源应用软件包的支持,谁说嵌入式软件工程师都是搞内核驱动的,有了Buildroot, 这么多开源应用都能移植构建到你的开发板中去,以下是Buildroot/package/ 目录下支持的自动构建开源项目的截图:

boost、python、ffmpeg、redis、opencv、opengl、webkit……这些开源应用软件是不是耳熟能详呢?没错,这些开源应用软件包都可以在Buildroot下通过你的配置脚本,自动完成官网下载à解压à系统环境配置à编译à安装到根文件系统等这一系列机械繁琐的工作。

你不用再为某某开源软件如何移植到我的Linux 开发板而到处在QQ群和论坛问人了,哪怕以后还要你自己开发的新的软件包,所有繁琐的移植工作,只要做了一次,都可以用Makefile写成自动构建脚本,移植工作做了一次,就不用做第二次了,交给Buildroot自动来做就可以了。

c). 可以一块开发板多次利用。一块板子,可以配置成手机,机顶盒,监控器,路由器或者各种想不到的有意思的应用。没错,只要把相应的配置文件加到configs/目录下,下次编译的时候,选择该种配置,make all 。那么马上就可以构建出相应的可烧写镜像,烧录的开发板中,让你的开发板瞬间从手机变成路由器,无需每次耗时地移植和改动了。

d). 团队协作的利器。不用手把手告诉你的同事或者合作伙伴如果重头构建某种系统的整个软件包,把你配置好的Buildroot交给他,一切自动完成,不明白的步骤,看看各个软件包的构建脚本,瞬间一目了然。

   资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linuxc/c++高级开发【直播公开课】

零声白金VIP体验卡:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)

4、Buildroot 的工作原理

Buildroot 原则上是一个自动构建框架,虽然说 u-boot、linux kernel 这些经典的开源软件包的构建脚本,官方社区都在帮你实现了,但是有时候你还是需要加入你自己特有的 app_pkg 软件包,用以构建自己的应用。

Buildroot 提供了函数框架和变量命令框架(下一篇文章将介绍细节),采用它的框架编写的 app_pkg.mk 这种Makefile格式的自动构建脚本,将被package/pkg-generic.mk 这个核心脚本展开填充到buildroot主目录下的Makefile中去。最后 make all 执行 Buildroot 主目录下的 Makefile,生成你想要的 image。

package/pkg-generic.mk中通过调用同目录下的pkg-download.mk、pkg-utils.mk文件,已经帮你自动实现了下载、解压、依赖包下载编译等一系列机械化的流程。你只要需要按照格式写Makefile脚app_pkg.mk,填充下载地址,链接依赖库的名字等一些特有的构建细节即可。

总而言之,Buildroot 本身提供构建流程的框架,开发者按照格式写脚本,提供必要的构建细节,配置整个系统,最后自动构建出你的系统。

5、Buildroot 目录结构简介

Buildroot主目录截图如下,其中各个目录存放的脚本简要介绍。

arch/ 目录存放CPU架构相关的配置脚本,如arm/mips/x86 ,这些CPU相关的配置,在制作工具链,编译boot和内核时很关键。

board/目录存放各种board 特有的一些配置脚本,在构建系统时,board默认的boot和Linux kernel配置文件,以及一些板相关特殊构建流程的脚本,都在该目录下,等待自动构建时调用。

boot/目录存在各种boot软件的自动构建脚本,不只是u-boot,还有grub等,也可以通过Buildroot来构建。

configs/目录存放这每种方案上层的全局配置文件,之前的make mini2440_defconfig实际上就是调用了该目录下的mini2440方案的配置。该目录下的配置文件记录着该机器平台或者方案使用的工具栏,boot, kernel,各种应用软件包的配置和是否编译选择的状态,之前所说的某个特殊开发板整个系统的配置文件,就在configs/目录下。

dl/目录存在从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间。

docs/存放相关的参考文档。

fs/存放着各种文件系统的自动构建脚本。

linux/存放着Linux kernel的自动构建脚本。

output/是编译出来的输出文件夹,里面的build/目录存放着解压后的各种软件包编译完后的现场。host/目录放着制作好的编译工具链,target/ 目录是用来制作rootfs的,里面放着Linux系统基本的目录结构,以及各种编译好的应用库和bin可执行文件。Images/目录下就是最终生成的可烧写到板子上的各种image。

package/目录存放着各种第三方开源应用软件包的自动编译构建脚本,这些构建脚本一般都是经过测试,能够构建出相应的软件包的。

support/目录存放着一些固定的流程脚本,以备构建时调用执行。

system/目录存放着文件系统目录的和设备节点的模板,这些模板会被拷贝到 output/ 目录下,用于制作根文件系统rootfs。toolchain/目录中存放着各种制作工具链的脚本,buildroot可以选择从0开始,用gcc和linux 内核,glibc、uclibc库等原材料制作一个自己工具链,也可以下载第三方制作好的开源工具。

原文作者:zhou_ chenz

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

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

相关文章

HCIP---VLAN

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 一.VLAN概述 VLAN(Virtual Local Area Network,虚拟局域网)是一种基于交换机和网络设备的划分技术,可以将不同区域的计算机、服务器和网络设…

推荐10个地推拉新app推广接单平台,都是一手单 官签渠道

地推拉新app推广接单平台是一种可以帮助APP获取新用户,并获得推广者获得佣金的平台。 这些平台通常提供各种类型的拉新任务,包括注册、下载、激活等,为APP应用方和推广者架起合作的桥梁。 本文将推荐10个优质的地推拉新app推广接单平台&…

JDBC(一)

第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上**,而持久化的实现过程大多通过各种…

b2b.ccb.com:443 需要你的凭据

忙活了一天,晚上回来准备查一下公户的最近的账单。因为昨天晚上熬夜重新做了电脑系统,就下载了建设银行的E路护航,一切安装就绪,准备进入企业网银时,被这些垃圾搞的系统及软件恶心到了,在此记录一下&#x…

底座(基座)模型是如何训练的?

我们把LLM的基本训练步骤分为两步,预训练和对齐;预训练我们非常熟悉,是bert-finetuning时代的基本原理,只不过LLM一般遵循自回归的逻辑,因此使用GPT模型的预训练方式:CLM(具备因果关系的MLM&…

四、IPSec NAT穿越

IPSec NAT穿越 1、IPSec NAT穿越2、IPSec穿越NAT的处理3、IKEv2与NAT穿越3.1、NAT-T能力检测3.2、NAT网关发现3.3、NAT穿越的启用3.4、NAT-keepalive 4、IPSec NAT穿越示例(网关之间存在NAT设备)5、IPSec NAT穿越示例(两侧存在NAT设备&#x…

2024年变革用户营运:新时代汽车厂商竞争规则探秘

从消费零售全领域的实践观察来看,仅仅凭借产品赢得竞争的时代已经过去,商业模式创新体现在越来越多企业向“产品服务”转变,向用户全生命周期需求挖掘转变。企业与消费者之间的关系从过去的一次性、断点式产品交易,转向持续性、覆…

【C++】STL 标准模板库 ① ( STL 简介 | STL 基本概念 | STL 主要内容 )

文章目录 一、STL 简介1、STL 概念2、STL 主要内容 二、STL 代码示例 一、STL 简介 1、STL 概念 C 语言 的 STL " 标准模板库 " 英文全称 " Standard Template Library " , STL 是一套强大的 C 库 , 其中包含了各种通用的 数据结构和算法 , 如 : 向量、列…

Python之Django

web应用程序 # Django框架是一款专门用来开发web应用的框架 # Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构 案例:淘宝网、京东... # 应用程序有两种模式: C/S:客户端/服务器端程序,这类程序一般独立运行 B/S:…

代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III

动规五部曲: 1.确定dp数组含义 2.确定递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印数组排错 LeetCode T198 打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 题目思路: 今天我们走出背包问题,开始进入新一轮经典问题的学习:打家劫舍问题. 题目大概…

8款提高小团队协作效率的app软件,你用过几款?

团队协作在当下的职场中变得司空见惯,当不同的头脑相聚到一起,很快就会产生新的项目想法,并为最棘手的挑战找到解决方案。因此,当整个团队参与决策时,这是成功的保证。 然而,要达到这种程度的协调往往会感…

【广州华锐互动】VR影视制片虚拟仿真教学系统

随着虚拟现实(VR)技术的不断发展,VR在影视制片教学中的应用场景也变得越来越丰富。本文将介绍VR在影视制片教学中的常见应用场景及其意义,并通过案例分析来更好地展示其应用前景。 在影视制片教学中,VR可以提供一种沉浸式的制作体验。其中&am…

你真的会开发测试框架?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计,我想在读者阅读本文之前应该已经有所了解,所以本文的重点是代码的分享和分析。至于具体的原理,我觉得读者不必阅读长篇大论的文章,只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…

SPASS图表的制作

基础条形图搭建 打开数据集 变量设置 点击图形->图形构建器,确认 然后设置标题 最终结果展示如图: 自我构建条形图 展示的结果如下:

【Node.js入门】1.2 部署Node.js开发环境

1.2 部署Node.js开发环境 在 Windows 系统上安装 Node.js 两种文件格式的安装包 Windows安装包(.msi)Windows二进制文件(.exe)安装包 检查Node.js版本 node --version 在 Linux 系统上安装 Node.js Linux操作系统上安装Nod…

自然语言处理(一):RNN

「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开…

发电机综合特性测试仪

发电机综合特性测试仪是可以测量发电机的电压、电流、功率因数、频率等参数,以评估发电机的质量和性能。可以测量发电机的输出电压,以确保其符合规定的标准和要求。测量发电机的输出电流,以确定其负载能力和稳定性。可以测量发电机的功率因数…

我是如何快速入门音视频开发的?

最近有读者留言,说“想转行音视频开发,怎么做”,正巧,前几天我还在知乎上,看到有人在问音视频的学习资料,还是个大一的学生。 想说一句:真有眼光。 如今这个时代,想赚钱&#xff0c…

2010年07月13日 Go生态洞察:通过通信来共享内存

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…