在 yocto 配方中,什么选择要从 GitHub 存储库下载的版本?

在 yocto 配方中,什么选择要从 GitHub 存储库下载的版本?

我正在使用 yocto 构建我的自定义 Linux 发行版。我需要添加hiredis到我的发行版中。赫里迪斯是一个用于 Redis 数据库的简约 C 客户端库,我需要它来通过 C 应用程序访问 Redis。

食谱hiredis_0.14.0.bb

在我的 yocto 构建系统中,配方hiredis_0.14.0.bb存储在文件夹meta-openembedded/meta-oe/recipes-extended/hiredisso 中的元层中meta-openembedded

菜谱内容如下:

DESCRIPTION = "Minimalistic C client library for Redis"
HOMEPAGE = "http://github.com/redis/hiredis"
LICENSE = "BSD-3-Clause"
SECTION = "libs"
DEPENDS = "redis"

LIC_FILES_CHKSUM = "file://COPYING;md5=d84d659a35c666d23233e54503aaea51"
SRCREV = "685030652cd98c5414ce554ff5b356dfe8437870"
SRC_URI = "git://github.com/redis/hiredis;protocol=git \
           file://0001-Makefile-remove-hardcoding-of-CC.patch"

S = "${WORKDIR}/git"

inherit autotools-brokensep pkgconfig

EXTRA_OEMAKE = "PREFIX=${prefix} LIBRARY_PATH=${baselib}"

# By default INSTALL variable in Makefile is equal to 'cp -a', which preserves
# ownership and causes host-user-contamination QA issue.
# And PREFIX defaults to /usr/local.
do_install_prepend() {
  export INSTALL='cp -r'
}

Git Fetcher 下载0.14.0hiredis版本

如果我执行以下命令:

> bitbake hiredis

代码hiredis是通过获取的GitHub并正确编译。从GitHub下载的代码上的版本是0.14.0,而SRC_URI设置为:

SRC_URI = "git://github.com/redis/hiredis;protocol=git \
           file://0001-Makefile-remove-hardcoding-of-CC.patch"

该值表示SRC_URI正在使用Git 抓取器和 不是指定参数branchrev,这意味着该参数的值为master

对版本的唯一引用0.14.0是在配方名称 (hiredis_ 0.14.0.bb) 中,因此选择版本是因为变量0.14.0的值为(该值由配方名称设置)。PV0.14.0PV

我的问题

为什么获取的hiredis库版本是最新的0.14.0而不是最新的?

答案1

正如@Kusalananda 在他的评论中所说:

从 GitHub 下载的版本hiredis是通过分配给变量的提交哈希来选择的SRCREV

例如,要获取并编译 1.0.1 版本,hiredis我可以向该文件夹添加my-meta-layer/recipes-extended/hiredis一个文件hiredis_%.bbappend,并在其中将 的值设置SRC_REV为等于 1.0.1 版本的提交哈希值(即8d1bfac4640fe90cd6f800d09b7f53e886569b98)。
在问题所示的配方的情况下,hiredis_0.14.0.bb我还需要更改变量的值SRC_URI

添加的文件内容hiredis_%.bbappend如下所示:

# SRC_URI for release 1.0.1
SRC_URI = "git://github.com/redis/hiredis;protocol=https;branch=master"

# Commit Hash of release 1.0.1
SRCREV = "8d1bfac4640fe90cd6f800d09b7f53e886569b98"

inherit cmake

bbappend 文件的说明

  • 通过该值,我设置了Git Fetcher 的SRC_URI参数值(而不是在原始配方中,它们的值已设置且未设置)protocol=https;branch=masterprotocol=gitbranch
  • 设置SRCREV等于版本 1.0.1 的提交哈希值
  • 添加指令inherit cmake,因为版本 1.0.1 使用 CMake

我的解决方案不适用于所有版本hiredis

我认为我的解决方案可能是许多 yocto 食谱问题中提出的问题的通用解决方案,但在这种情况下,hiredis它并不总是有效。
我已经测试了某些版本的解决方案,结果如下:

  • 适用于版本 0.14.0、1.0.1、1.0.2
  • 不行对于版本 0.14.1

相关内容