yocto系列之针对tarball编写recipes

news/2024/11/29 12:29:32/

回顾

针对借助yocto构建linux 镜像我们已经讲述了6部分, 简单回顾如下:

Yocto: 第1部分 - yocto系列之yocto是个什么东东

https://mp.csdn.net/mp_blog/creation/editor/136742286

Yocto: 第2部分 - yocto系列之配置ubuntu主机

https://mp.csdn.net/mp_blog/creation/editor/136745533

Yocto: 第3部分 - yocto系列之构建与运行第一个镜像

https://mp.csdn.net/mp_blog/creation/editor/136760112

Yocto: 第4部分 - yocto系列之针对rk3588平台构建一个基本镜像

https://mp.csdn.net/mp_blog/creation/editor/136760112

Yocto: 第5部分 -yocto系列之创建和添加新的layer

https://blog.csdn.net/hanpca/article/details/136781418?spm=1001.2014.3001.5502

Yocto:第6部分 -yocto系列之理解与创建第一个定制recipe

https://blog.csdn.net/hanpca/article/details/136781609

接下来的部分我们进入本篇主题。

为什么需要使用tarballs

许多现代的 bitbake recipe都使用 SCM(例如:git)。 然而,tarball 的使用依然普遍。现今,poky and open-embedded中的绝大多数recipe都将其源码树压缩为 tarball。

tarball 非常容易处理,它们在扩展之前消耗的存储空间很小,压缩算法被普遍使用,而且 bitbake 足够智能,因为成熟的文件名解析器的存在,bitbake可以处理 tarball 的版本控制。 事实上,许多基于 git 的源代码树都会以 tarball 的形式生成版本,然后在 bitbake recipe中使用。

tarballs存放在哪

提供给bitbake tarballs的远程URL

将 tarball 放在位于recipes内部的本地files 文件夹中

tarballs recipe的结构

recipe使用的tarball的结构类似我们在第六部分写的recipe源码树的结构, 细微的差别是针对tarballs, SRC_URI变量现在指向本地的tarball。

在接下来的示例中,我们应用cmake进行编译。

针对本地tarball创建recipe

创建recipe占位符

第六部分中我们在yocto layer meta-test中创建了名为hwlocal的recip,目录结构如下:

现在我们针对本地local tarball创建名为hwtarlocal的recipe,以及相关的其他资源列表如下:

准备归档

获取我们示例中将要使用的源代码,源代码位置:

GitHub - hannahrepo/yocto-test-apps: Sample source code library written to illustrate the yocto build steps.

在所应用PC机的合适位置clone源代码:

git clone https://github.com/teggerhan/yocto-test-apps.git  hwtarlocal-0.1

将clone下的源代码压缩为tarball

tar -czvf hwtarlocal-0.1.tar.gz hwtarlocal-0.1

将版本(0.1)附加到tarball(以及克隆的repo)的目的是为了便于版本控制和可重用性。

要使用最新版本的tarball,需要做的就是创建一个新recipe或简单地更改现有recipe的名称。例如,假设tarball版本为0.5,只需将recipe重命名为hwtarlocal_0.5.bb,构建时则会选这个最新版本,而不需要更改recipe的内容。

将hwtarlocal-0.1.tar.gz文件copy到files目录下, 现在目录结构如下:

编写recipe

现在我们快速地写出recipe, 如我们前面提到的,这个recipe的结构与我们之前编写的hwlocal的recipe非常相似。另外,注意在这个配方中使用了cmake, 与前面一样,我们将二进制输出安装到输出映像的/usr/bin目录中。

recipe文件hwtarlocal_0.1.bb内容如下:

怎么获取LICENSE的md5文件呢?有两种方法介绍如下:

手动计算LICENSE的md5sum:

可以放置一个虚拟的md5sum,然后在第一次bitbake运行时,bitbake本身会告诉我们LICENSE的md5sum值不匹配,实际的md5sum应该是xxx。

现在我们可以构建这个recipe了。

bitbake hwtarlocal

如果按着之前的文章已经利用bitbake构建过镜像, 那么本次构建过程会很快。

针对远程tarball创建recipe

这个过程需要两步完成:创建recipe占位符与编写recipe。

创建recipe占位符

在meta-test目录下,创建我们所需的资源目录与对应的recipe文件hwtarfetch_0.1.bb,如下:

编写recipe

我们使用同一个github repo作为我们的示例源代码库:

GitHub - hannahrepo/yocto-test-apps: Sample source code library written to illustrate the yocto build steps.

下载这个repo的一个release:

Releases · hannahrepo/yocto-test-apps · GitHub

下载asset:

Release test_release · sckulkarni246/yocto-test-apps · GitHub

下载到的完整的tarball名字是:

yocto-test-apps-hwtarfetch_0.1.tar.gz

编写的完整的recipe文件是:

SRC_URI是tarball文件的地址。此外,由于我们没有使用tarball名称的预期格式,我们将显式地告诉bitbake使用S的提供tarball名称而不是使用默认值。

在第六部分(yocto系列之理解与创建第一个定制recipe),我们看到环境变量S是构建目录中未打包配方源代码所在的位置。对于任何recipe,bitbake都将这个变量预先填充为WORKDIR。然而,由于我们使用了非预期格式的tarball名称,我们显式地告诉bitbake要使用的具体的路径名称。此外,注意tarball名称版本号之前用的连接符是_不是-。

SRC_URI[sha256sum] 有两种填充方式

直接计算:

或者给出一个虚拟值, 然后让bitbake第一次编译的时候告诉我们真实的sha256sum。

现在可以使用这个recipe构建目标镜像了:

bitbake hwtarfetch


http://www.ppmy.cn/news/1387333.html

相关文章

油烟净化器:餐饮卫生环保检测的必备之选

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在如今日益关注卫生环保的时代背景下,油烟净化器成为餐饮业者必备的环保设备,不仅能够保持餐饮环境清…

Elasticsearch:调整近似 kNN 搜索

在我之前的文章 “Elasticsearch:调整搜索速度”,我详细地描述了如何调整正常的 BM25 的搜索速度。在今天的文章里,我们来进一步探讨如何提高近似 kNN 的搜索速度。希望对广大的向量搜索开发者有一些启示。 Elasticsearch 支持近似 k 最近邻…

C++ 11:基于范围的 for 循环

基于范围的for 循环(Range-based for loop)是 C11 标准引入的一项特性,它提供了一种更简洁、更安全的遍历容器(如数组、向量等)的方式。 与传统的 for 循环相比,基于范围的 for 循环自动处理迭代&#xff…

axios 请求 url 地址,判断网络地址是否存在

使用 axios 来判断一个 URL 地址是否可连接,通常涉及到发送一个 HTTP 请求到这个地址,并检查响应的状态码。如果请求成功,并且返回了 200 OK 状态码,那么通常可以认为这个地址是可连接的。 以下是一个简单的示例,使用…

Leetcode 1. 两数之和

心路历程: 很简单的题,双层暴力就可以,用双指针的话快一点。暴力时间复杂度O( n 2 n^2 n2),双指针时间复杂度O(nlogn) O(n) O(n) O(nlogn)。 注意的点: 1、题目需要返回原数组的索引,所以排序后还需要…

单向链表——数据结构——day01

今天主要了解了数据结构,什么叫数据结构,以及数据结构中的单向链表 数据结构 1.数据结构的定义:一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)程序的设计:将现实中大量而复杂的问题以特…

数学建模-多目标规划算法(美赛建模)

💞💞 前言 hello hello~ ,这里是viperrrrrrr~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#xff…

代码随想录算法训练营第五十天 | 123. 买卖股票的最佳时机 III

题目链接&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(5,0));dp[0][1]-prices[0];dp[0][…