gpt4 book ai didi

yocto - 如何检测 bitbake 中本地文件的变化?

转载 作者:行者123 更新时间:2023-12-05 07:30:26 25 4
gpt4 key购买 nike

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

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 的更改是新的、实际的更改,而不是我用来测试配方的人为更改。

最佳答案

如前所述,更适合将配方置于版本控制之下,这样新的提交将导致状态更改和 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。我使用了最小的基础图像。

bitbake core-image-minimal .

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

如果失败,那么您可以随时手动修改 PR食谱中的值(value)。


看到您的编辑后:

So if test.sh changes to a previous version, bitbake does not notice the change. There must be some sort of weird caching going on somewhere.

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

关于yocto - 如何检测 bitbake 中本地文件的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com