在 buildroot 中更新项目特定的包

Update project-specific packages in buildroot

我正在为我的项目使用带有外部树的 buildroot。 Buildroot 正在使用存储在 svn 中的几个自定义包来构建项目,并由我们的开发人员开发。我如何为每个构建更新存储库中的这些包? 内置下载助手下载一次包并将其存储到存档中,但我每次构建它时都需要从源代码更新它。我需要为此编写自己的下载助手吗? 我唯一想到的就是将整个 buildroot 配置存储在 svn 存储库中(包括包的 *.mk 文件),向它们添加 svn-extrenal 属性,并使用 'local' 下载规则

Buildroot 不会 svn update 您的来源。 Buildroot user manual.

的 "Using Buildroot during development" 部分描述了这样做的原因以及满足您需求的最佳解决方案。

原因: Buildroot 的下载应该是恒定的:在同一时间重新下载相同的包 <PKG>_VERSION 应该正好下载 相同源代码。当您将它用作构建系统时,这是正常的,而不是在开发期间使用它(这是您要求的)。

解决方案 1: 使用 <PKG>_OVERRIDE_SRCDIR 功能。使用它,您可以在一个单独的目录中检出您正在开发的所有包,使用 svn、git 或任何您想要的管理。 Buildroot 永远不会触及你的代码,它只会将它复制到它的构建目录中并构建它。您可以编写一个简单的脚本来更新然后重建或重新配置您的包。例如:

for D in $(ls my-repos/); do
    pushd $D
    svn update
    popd
done
make mypkg1-rebuild mypkg2-reconfigure all

每个开发人员都可以将此方法用于一组不同的包,例如只有他们正在开发的那些。

解决方案 2: 将 Buildroot 代码和所有包源代码放在一个唯一的 Subversion 存储库中,并为您的包使用 <PKG>_SITE_METHOD=local。当你 svn update 这个大仓库时,一切都会更新。然后用 make mypkg1-rebuild mypkg2-reconfigure all 重建如上。

此解决方案的一个缺点是,如果您有很多包,唯一的存储库可能会变得非常大。它还会强制您对所有内容都使用 Subversion,并且您不能像第一个解决方案那样选择 "local" 包集。