使用 bitbake 是否可以根据目标图像为包设置不同的 do_install?

Using bitbake is it possible to have a different do_install for a package based on the target image?

我们有一台机器,我们用它来构建两个目标图像; foo-image 和 foobar-image。两个图像都使用相同版本的包,但我们想根据构建的图像对 do_install 任务添加更改。所以包的配方文件看起来像这样:

do_install (){
    //Some work
}

do_install_append_foobar-image(){
   //Some foobar work
}

最终当我们为两个图像构建时:

MACHINE=custom bitbake foo-image
MACHINE=custom bitbake foobar-image

foobar 的图像将包含已完成追加任务中工作的已安装包,但 foo 的图像不会。

有没有什么方法可以做我概述的事情或者有什么替代方法?

不,您不能根据正在构建的映像在配方中执行不同的任务。尽管我非常不确定,但可能会检查 do_install 中的图像名称。

我要做的是:

  • 在配方中,添加包含附加文件的第二个包(如果这是您想要的)。
  • 让你的第二个图像配方包含这个第二个包。

另一种可能性是添加一个 post_install 脚本,这取决于您是否可以检测到您构建的图像。第三种可能不太好的选择是在 ROOTFS_POSTPROCESS_COMMAND.

中进行更改

您选择哪种解决方案,将取决于您想要进行何种定制。

经过深思熟虑,我们可能正在倒退地考虑这个问题。我们可能想在 MACHINE 级别注入分离。由于最终两者都将是单独的产品,因此这是最有意义的。这样做将使我们能够为该特定产品引入更改包。

我们的构建线将变成:

MACHINE=custom1 bitbake foo-image
MACHINE=custom2 bitbake foobar-image

我们的包安装任务可以是:

do_install (){
    //Some work
}

do_install_append_custom2(){
   //Some more work
}