如何在启动输出或/ etc / issue中包含映像层的git版本?

时间:2018-10-09 21:41:07

标签: git yocto bitbake

我正在为SBC创建一个Poky图像,并且我想为用户提供一种方法来查找用于创建图像的配方文件的SHA1 ID。

食谱内容如下:

SUMMARY = "Toradex Embedded Linux Console Sporian Yocto version"
DESCRIPTION = "A Yocto Poky build derived from core-image-minimal"

LICENSE = "MIT"

#start of the resulting deployable tarball name
export IMAGE_BASENAME = "Sporian-Console-Image-Yocto"
IMAGE_NAME_apalis-imx6 = "Apalis-iMX6_${IMAGE_BASENAME}"

require /home/rdepew/workspace/oe-core3/poky/meta/recipes-core/images/core-image-minimal.bb

IMAGE_INSTALL += " \
    packagegroup-core-ssh-openssh \
    sqlite3 \
    avro-c \
"

以下是SBC启动时的控制台输出:

Poky (Yocto Project Reference Distro) 2.4.3 apalis-imx6 /dev/ttymxc0

apalis-imx6 login: root
root@apalis-imx6:~# uname -a
Linux apalis-imx6 4.1.44-2.7.4+gb1555bfbf388 #1 SMP Tue Oct 9 17:35:02 UTC 2018 armv7l GNU/Linux
root@apalis-imx6:~#

这是/ etc / issue的内容。请注意,这些是默认内容:

Poky (Yocto Project Reference Distro) 2.4.3 \n \l

假定包含配方的存储库的SHA1 ID为ea4c5bb42e7542...。我想在启动过程中或响应用户命令(类似于“ uname”)时打印SHA1 ID。我该怎么办?

我认为$ {SRCPV}可能是解决我的问题的方法,但我不能随心所欲。

2 个答案:

答案 0 :(得分:1)

Linux和U-Boot git哈希是Linux / U-Boot git存储库中的哈希。这是使用OpenEmbedded通常完成的方式。当然,有一种方法可以将git哈希从OE传递到U-Boot /内核构建系统,但是我不建议这样做,因为这不是通常的做法。

对于/etc/issue文件,通常是在meta/recipes-core/base-files/base-files_3.0.14.bb配方中生成的。将bbappend添加到您的图层并扩展任务应该是相当简单的,例如像这样的东西:

def get_layer_rev(d):
    return bb.process.run('git rev-parse HEAD')

LAYER_REV="${@get_layer_rev(d)}"

do_install_basefilesissue_append() {
    # Overwrite /etc/issue with a custom version of it
    printf "${DISTRO_NAME} " > ${D}${sysconfdir}/issue
    printf "${LAYER_REV}" >> ${D}${sysconfdir}/issue
}

答案 1 :(得分:1)

参加聚会有点晚,但是我意识到falstaff's answer实际上并没有保存git版本 ,而不是构建目录所在层的git修订版(如果构建目录不在git存储库中,则失败)。

因此,我最终使用了类似git-revision-file.bb的内容:

SUMMARY = "Place a git revision file in the sysroot"

inherit image-buildinfo

REVISION_INFO_FILE = "build-layers-git-revisions"
S = "${WORKDIR}"

pyhton do_configure() {
    with open(d.expand(${S}/${REVISION_INFO_FILE}) as file:
        file.writelines(get_layer_revs(d))
}

do_install() {
    install -d ${D}${sysconfdir}
    install -m 0644 ${S}/${REVISION_INFO_FILE} ${D}${sysconfdir}
}

FILES_${PN} = ${sysconfdir}

这会将git分支和版本的每个版本的修订版本保存在/etc/build-layers-git-revisions中。 如果您只希望图层的git版本,请使用base_get_metadata_git_revision(path, d)中的metadata_scm.bbclass。但是我认为以上内容为您的构建提供了更完整的信息。