Bitbake -c clean 删除源

Bitbake -c clean removed source

我是“BitBake”的新手。我需要修改源代码并构建它。我发现源代码位于 build/tmp/work/ 目录中,该目录的名称为 git commit id。我想重建源代码。所以我给了bitbake -c clean <package_name>,然后是bitbake <package_name>。图像已构建。但是,当我回去修改源代码时,git 存储库似乎在它的位置丢失了。

1) 如何取回源代码?

2) 修改后重建源代码的安全方法是什么?

提前致谢。

1) How do I get the source back?

bitbake -ccleansstate <package_name>
bitbake <package_name>

这将确保 bitbake 不会使用共享状态,并且必须在第二个命令期间实际执行所有任务(包括解压和修补,这将在 $WORKDIR 的目录中填充源)。

2) What is the safe way of rebuilding the source after making modifications?

如果您想快速修改 $WORKDIR 中的源代码,那么

bitbake -f -ccompile <package_name>
bitbake <package_name>

会将编译任务标记为脏,当下一个命令构建配方时,将执行从编译开始的所有任务。请注意,bitbake 会警告您脏状态,直到您执行 cleansstate,并且 cleansstate 会在您的更改旁边擦除 $WORKDIR:因此这仅对快速测试有用。

如果您正在寻找一种方法来进行更多开发,并在开发的同时使用 yocto/OE 构建快速测试事物,请查看 devtool。我期待第 4.3.1.2 部分。 (使用 devtool modify 启用与现有配方相关的代码工作)可能与您相关。

另外jku的回答很棒:

ad.1) 如何取回资源?

你只需要简单地获取源代码,不会执行其他任务:

bitbake -c fetch -f <package_name>

一般通过:

bitbake -c clean <package_name>

或使用强制选项:

bitbake -c clean -f <package_name>

您已从负责此包的配方中触发了任务 do_clean。通过检查任务代码(直接在配方中或在继承的配方中)究竟将完成什么。 同样在同一目录 build/tmp/work/ 中,您可以找到一个 /temp/,其中包含每个已执行任务的日志。例如:log.do_fetch 将包含此特定包的任务 do_fetch() 的输出。

bitbake -c cleansstate <package name>

不会删除来源,因此do_fetch内容将保持原样。 下次

bitbake <package name>

所以,do_fetch下次不会执行而是剩下的。如do_patch、do_metadata、do_compile等。 如果你想尝试在源代码级别进行一些更改,你也可以尝试

bitbake <package name> -c devshell

我发现 devshell 是一种尝试某些源代码或包内级别更改和试用的便捷方法。它确实在包位置打开了一个新的 shell。您可以在本地发出命令的地方。就像 make.

一样简单