Yocto Project用于嵌入式Linux开发的专业级开源工具

Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入式产品的自定义 Linux 系统,不管硬件架构是什么。我想要告诉那些对 yocto 这个名称不甚理解的用户的是,术语 yocto 是最小的 SI 单元。最为一个前缀,yocto 表示 10^-24。

本文将提供一个分步指导,向您介绍如何使用 Yocto Project 的行业标准开源工具为嵌入式设备创建自定义的 Linux 操作系统,并使用 QEMU 在一台虚拟机中启动操作系统。Yocto Project 是由大型硬件公司和操作系统供应商资助的、由 Linux 基金会赞助的开源项目,提供了一些行业领先的工具、方法和元数据来构建 Linux 系统。

Yocto Project 的两大主要组件由 Yocto Project 和 OpenEmbedded 项目一起维护,这两个组件是 BitBake 和 OpenEmbedded-Core,前者是构建引擎,后者是运行构建过程所使用的一套核心配方 (recipe)。下一节会介绍所有项目组件。

Yocto Project 简介

作为一个协作项目,Yocto Project 有时也称为 “umbrella” 项目,它吸纳了许多不同的开发流程部分。在整个 Yocto Project 中,这些部分被称为项目,包括构建工具、称为核心配方 的构建指令元数据、库、实用程序和图形用户界面 (GUI)。

Poky

Poky 是 Yocto Project 的一个参考构建系统。它包含 BitBake、OpenEmbedded-Core、一个板卡支持包 (BSP) 以及整合到构建过程中的其他任何程序包或层。Poky 这一名称也指使用参考构建系统得到的默认 Linux 发行版,它可能极其小 (core-image-minimal),也可能是带有 GUI 的整个 Linux 系统 (core-image-sato)。

您可以将 Poky 构建系统看作是整个项目的一个参考系统,即运行中进程的一个工作示例。在下载 Yocto Project 时,实际上也下载了可用于构建默认系统的这些工具、实用程序、库、工具链和元数据的实例。这一参考系统以及它创建的参考发行版都被命名为 Poky。您还可以将此作为一个起点来创建您自己的发行版,当然,您可以对此发行版随意命名。

所有构建系统都需要的一个项目是工具链:一个编译器、汇编程序、链接器以及为给定架构创建二进制可执行文件所需的其他二进制实用程序。Poky 使用了 GNU Compiler Collection (GCC),不过您也可以指定其他工具链。Poky 使用了一种名为交叉编译 的技术:在一个架构上使用工具链为另一个架构构建二进制可执行文件(例如,在基于 x86 的系统上构建 ARM 发行版)。开发人员常常在嵌入式系统开发中使用交叉编译来利用主机系统的高性能。

元数据集

元数据集按层 进行排列,这样一来每一层都可以为下面的层提供单独的功能。基层是 OpenEmbedded-Core 或 oe-core,提供了所有构建项目所必需的常见配方、类和相关功能。然后您可以通过在 oe-core 之上添加新层来定制构建。

OpenEmbedded-Core 由 Yocto Project 和 OpenEmbedded 项目共同维护。将 Yocto Project 与 OpenEmbedded 分开的层是 meta-yocto 层,该层提供了 Poky 发行版配置和一组核心的参考 BSP。

OpenEmbedded 项目本身是一个独立的开源项目,具有可与 Yocto Project 交换的配方(大部分)以及与 Yocto Project 类似的目标,但是两者具有不同的治理和范围。

板卡支持包

BSP 包含为特定板卡或架构构建 Linux 必备的基本程序包和驱动程序。这通常由生产板卡的硬件制造商加以维护。BSP 是 Linux 操作系统与运行它的硬件之间的接口。注意,您也可以为虚拟机创建 BSP。

BitBake

BitBake 是一个构建引擎。它读取配方并通过获取程序包来密切关注它们、构建它们并将结果纳入可引导映像。BitBake 由 Yocto Project 和 OpenEmbedded 项目共同维护。

Hob

为了让嵌入式 Linux 开发更容易,Yocto Project 提供了几种不同的图形工作方法。项目的一个较新的添加项叫作 Hob,它向 BitBake 和构建过程提供一个图像前端。两者的开发工作仍在继续,包含社区用户研究。

开源许可证合规性

遵守开源许可证是任何 Linux 开发工作的一个极其重要的部分。Yocto Project 的一个目标是尽可能容易地实现合规性。可以极为轻松地使用 Yocto Project 工具来创建清单(甚至构建整个源存储库)和过滤构建过程,用它们排除使用特定许可证的程序包。该项目使用了 Linux 基金会的 “开放遵守计划” (Open Compliance Program),该计划包含一个 Software Package Data Exchange® (SPDX) 规范。

EGLIBC

嵌入式 GLIBC (EGLIBC) 是 GNU C Library (GLIBC) 的一个变体,旨在能够在嵌入式系统上运行。EGLIBC 的目标包括减少内存占用、让组件可配置、更好地支持交叉编译和交叉测试。EGLIBC 是 Yocto Project 的一部分,但在它自己的治理结构内加以维护。

应用程序开发工具包

应用程序开发工具包 (ADT) 能够让系统开发人员为他们使用 Yocto Project 工具创建的发行版提供软件开发工具包 (SDK),为应用程序开发人员提供了一种针对系统开发人员提供的软件栈进行开发的方法。ADT 包含一个交叉编译工具链、调试和分析工具,以及 QEMU 仿真和支持脚本。ADT 还为那些喜欢使用集成开发环境 (IDE) 的人提供了一个 Eclipse 插件。

时间: 2024-08-21 02:46:08

Yocto Project用于嵌入式Linux开发的专业级开源工具的相关文章

《嵌入式Linux开发实用教程》——1.1 Linux基本命令

1.1 Linux基本命令 嵌入式Linux开发实用教程 在学习嵌入式Linux开发的过程中,将经常使用到Linux的操作命令.实际上,Linux系统中的命令也是为实现特定的功能而编写的,而且绝大数的命令是用C语言编写的.有些实用性强的程序被广泛使用和传播,逐渐地演变成Linux的标准命令.但是Linux的操作命令繁多,本节将在U-Boot.Linux移植过程中常用到的Linux操作命令罗列出来进行讲解,为后续的学习做良好的铺垫.读者不要认为这是Linux简单命令则不屑一顾,嵌入式Linux学习

《嵌入式Linux应用开发完全手册》——第1章 嵌入式Linux开发概述 1.1 嵌入式系统介绍

第1章 嵌入式Linux开发概述 本章目标 了解嵌入式系统的概念及发展历史 anniu 了解ARM处理器 anniu 了解各类嵌入式操作系统 anniu 1.1 嵌入式系统介绍 1.1.1 嵌入式系统的定义和特点 1.嵌入式系统的定义 嵌入式系统的定义为:以应用为中心.以计算机技术为基础.软硬件可裁剪.适用于应用系统,对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统.它的主要特点是嵌入.专用. 从20世纪70年代起,微型机以小型.价廉.高速数值计算等特点迅速走向市场,它所具备的智能化水平

《嵌入式Linux开发实用教程》——导读

前言 嵌入式Linux开发实用教程 2012年11月,当我看到论坛中的同龄大学生在学习嵌入式Linux寸步难行,我就计划将我学习嵌入式Linux的点点滴滴记录下来,从一个学生的角度去写,或许更能让初学者接受.2013年1月,当写完初稿再重新审视的时候,总感觉不尽如意.2013年3月,我联系了我的师弟李强,两人打算以一个全新的思维重新完成这本书. 2013年6月,书稿终于定型. 本书一共有6章,从Linux指令基础到Linux常用软件:从U-Boot移植到Linux移植:从Linux驱动程序设计到

《嵌入式Linux开发实用教程》——第1章 嵌入式Linux基础 1.1 Linux基本命令

第1章 嵌入式Linux基础 1.1 Linux基本命令 在学习嵌入式Linux开发的过程中,将经常使用到Linux的操作命令.实际上,Linux系统中的命令也是为实现特定的功能而编写的,而且绝大数的命令是用C语言编写的.有些实用性强的程序被广泛使用和传播,逐渐地演变成Linux的标准命令.但是Linux的操作命令繁多,本节将在U-Boot.Linux移植过程中常用到的Linux操作命令罗列出来进行讲解,为后续的学习做良好的铺垫.读者不要认为这是Linux简单命令则不屑一顾,嵌入式Linux学习

用Qt进行嵌入式Linux开发,为什么要编译Qt源代码?

问题描述 用Qt进行嵌入式Linux开发,为什么要编译Qt源代码? 最近学习Qt编程,嵌入式Linux的,网上很多文章介绍如何编译Qt源代码,不明白为什么要编译Qt源代码?而且要区分不同的环境,比如普通PC,arm和x86的.因为一直在Windows平台上做开发,对于编译Qt源代码不甚理解,请各位朋友指教,多谢! 解决方案 因为嵌入式的cpu型号太多,不同cpu,需要不同机器指令的目标文件执行,所以需要编译.而x86是通用的,所以有预编译的库可以用. 解决方案二: 编译源码是生产对应的库文件 这

《嵌入式Linux开发实用教程》——4.3 块设备驱动

4.3 块设备驱动 嵌入式Linux开发实用教程 块设备和字符设备从字面上理解最主要的区别在于读写的基本单元不同,块设备的读写基本单元为数据块,数据的输入输出都是通过一个缓冲区来完成的.而字符设备不带有缓冲,直接与实际的设备相连而进行操作,读写的基本单元为字符.从实现的角度来看,块设备和字符设备是两种不同的机制,字符设备的read.write的API直接到字符设备层,但是块设备相对复杂,是先到文件系统层,然后再由文件系统层发起读写请求. 数据块指的是固定大小的数据,这个值的大小由内核来决定.一般

《嵌入式Linux开发实用教程》——1.2 Makefile基本知识

1.2 Makefile基本知识 嵌入式Linux开发实用教程 Makefile如今能得以广泛应用,这还得归功于它被包含在UNIX系统中.在make诞生之前,UNIX系统的编译系统主要由"make"."install"shell脚本程序和程序的源代码组成.它可以把不同目标的命令组成一个文件,而且可以抽象化依赖关系的检查和存档.这是向现代编译环境发展的重要一步.1977年,斯图亚特·费尔德曼在贝尔实验室里制作了这个软件.2003年,斯图亚特·费尔德曼因发明了这样一个重

《嵌入式Linux开发实用教程》——4.1 设备驱动概述

4.1 设备驱动概述 嵌入式Linux开发实用教程Linux系统将设备分成3种基本类型:字符设备.块设备.网络接口. (1)字符设备 字符设备是一个能够像字节流一样被访问的设备,字符终端(/dev/console)和串口(/dev/ttys0)就是两个字符设备.字符设备可以通过文件系统节点来访问,比如/dev/tty1和/dev/lp0等.这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道. (2)块设备 块设备和字符设备相

《嵌入式Linux开发实用教程》——1.5 嵌入式Linux移植常用软件

1.5 嵌入式Linux移植常用软件 在进行嵌入式Linux学习与开发的过程中,需要使用到一些常用的开发工具,熟练使用这些软件,能让学习与开发达到事半功倍的效果. 1.5.1 SecureCRT SecureCRT是可以在Window环境下登录UNIX和Linux服务器主机的软件,它不仅支持SSH1.SSH2,而且支持TeInet和rlogin协议. 在Ubuntu宿主机上安装SSH. zhuzhaoqi@zhuzhaoqi-desktop:~/sudo apt-get install open