【问题标题】:How to detect changes in local files in bitbake?如何检测bitbake中本地文件的变化?
【发布时间】:2019-02-19 05:51:57
【问题描述】:

假设我有一个只添加一个脚本文件的简单配方:

LICENSE = "CLOSED"
SRC_URI += "file://test.sh"
S = "${WORKDIR}"

do_install () {
    mkdir -p ${D}/usr/bin
    cp -r test.sh ${D}/usr/bin
}

如果我修改 test.sh 并重新运行 bitbake,它什么也不做,因为它没有意识到任何改变。有没有办法让配方检查 SRC_URI 文件是否有变化?如果发现更改,则重新编译。本地文件不支持 SRC_URI[md5sum]。


编辑:由于我的测试设置有些不切实际,我最初的问题有点缺陷。但它确实在 bitbake 中展示了一个有趣的特性。

我在两个版本的 test.sh 之间切换,我只是在其中添加或删除了一个字符。事情是这样的:

  1. 运行 bitbake -> 测试配方已编译
  2. 通过添加一个字符来编辑 test.sh
  3. 运行 bitbake -> 测试配方已编译
  4. 通过删除字符编辑 test.sh
  5. 运行 bitbake -> 测试配方未编译
  6. 通过添加与以前相同的字符来编辑 test.sh
  7. 运行 bitbake -> 测试配方未编译

因此,如果 test.sh 更改为以前的版本,bitbake 不会注意到更改。一定有某种奇怪的缓存在某处发生。这意味着我最初使用的配方有效,但前提是对 test.sh 的更改是新的、实际的更改,而不是我用来测试配方的人为更改。

【问题讨论】:

  • 你可以将 test.sh 存储在 git 存储库中吗?如果是这样,那么它会为您完成,因为 git checkout 哈希在更改时会导致重建。此外,您可以通过执行以下操作来构建... bitbake test-package bitbake image-name
  • 我知道这个选项,但不幸的是在这种情况下使用 git 存储库不是一个选项。此外,仅运行“bitbake test-package”不会触发重建。我必须先运行“bitbake -c cleansstate test-package”。但我宁愿只运行“bitbake image-name”并自动重新编译所有带有更新文件的配方。这就是我在原始问题中寻找的内容。

标签: yocto bitbake


【解决方案1】:

如前所述,最好将配方置于版本控制之下,这样新的提交将导致状态更改,SRCREV 将因此被更改并触发新的获取/编译/安装

我刚刚尝试了您的食谱并将其添加到我的core-image-minimal 图像中,并且在检测test.sh 脚本中的更改时没有发现任何问题。这是我正在使用的稍微修改过的食谱。

LICENSE = "CLOSED"
SRC_URI += "file://test.sh"
S = "${WORKDIR}"

PR = "0"

do_install () {
    install -d ${D}/usr/bin
    install -m 0644 test.sh ${D}/usr/bin
}

在现有层中将其另存为test.bb。将此配方添加到您的图像配方中:

IMAGE_INSTALL += "test"

然后对您的图像进行位烘焙。我使用了最小的基础图像。

bitbake core-image-minimal.

编辑 test.sh 并重新运行之前的 bitbake。您应该会看到 bitbake 将您的新脚本安装到位于 tmp/deploy/images/<your_target>/core-iamge-minimal.tar.xz 的映像中

如果失败,那么您始终可以手动更改配方中的 PR 值。


看到您的编辑后:

因此,如果 test.sh 更改为以前的版本,bitbake 不会注意到更改。一定是某处发生了某种奇怪的缓存。

bitbake 缓存所有输入,以便可以从共享状态缓存中快速提取脚本的不同迭代。您应该会在您的tmp 文件夹中看到一个标记为sstate-cache 的文件夹。这是您之前编译的脚本所在的位置。简而言之 - 这是预期的行为,一切都很好。

【讨论】:

  • 我评论了原始问题,我最初的观察是错误的。我会接受这个作为答案,因为你基本上是正确的。
  • @Sampo 我为您最近的编辑重新编辑了我的答案。简而言之 - 是的,这是正常操作,因为 bitbake 正在从缓存中提取您之前编译的脚本,这就是您看不到 do_compile 任务发生的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多