对使用Yocto的install -m和install -d感到困惑

时间:2019-05-30 09:51:29

标签: linux makefile yocto bitbake rootfs

我已经接管了Yocto项目,并且在.bb配方文件中,看到以下几行以在映像中安装新目录:

  export default function loadImages(){
     return {
        img1:require("../../images/001.png"),
        img2:require("../../images/002.png"),
        ...
     }
  }

这有效,但是我很困惑。从关于Yocto的阅读和做do_install的角度来看,我认为 -m 选项仅用于安装文件,而不用于目录。

使用install命令执行 -m -d 选项 install -m 0755 -d 有什么作用?

此外,为什么像我看到的大多数其他目录安装一样没有$ {D}变量? 对于这样的问题,我通常不求助于Stack Overflow,但是有太多的不一致之处,我不理解,并且很难找到答案。

1 个答案:

答案 0 :(得分:1)

有问题的任务定义为外壳函数。内部使用的install命令是一个shell命令,不是Yocto或BitBake特定的任何命令,因此您应该参考its docs来获得启发,而不要依赖BitBake文档或示例。但是,特别是在Yocto的上下文中,您应该查看install程序的GNU coreutils版本的文档(如上所示),您可以在Linux系统上找到该文档。 > *

  

从我对Yocto和do_install的阅读中,我认为-m选项仅用于安装文件而不是目录。

除了只是以前不认为它适用于目录外,我不确定是什么让您觉得如此。

  

使用install命令同时使用install -m 0755 -d-m选项的-d有什么作用?

-m选项设置已安装对象的模式(访问控制位)。目录具有与常规文件相同的模式,并且-m选项的安装意义与安装常规文件的意义相同。

-d选项指定将指定用于安装的名称作为要创建的目录,以及指定路径中所有缺少的目录。正如@jww在评论中观察到的,其效果类似于mkdir -p的效果。

这些选项是正交的。当一起使用时,它们的效果以自然的方式结合在一起:创建指定的目录,并在需要时创建带有父目录的目录,并为所有创建的目录分配指定的模式。但是,将模式显式设置为0755是多余的,因为这是默认设置。这就是为什么您不习惯看到用于目录的-m选项的原因。

  

为什么在我看到的大多数其他目录安装中都没有$ {D}变量?

do_install的Yocto规范表示应安装相对于${D}的文件,而the variable DEPLOY_DIR_IMAGE则是指准备安装映像的位置。似乎安装到${DEPLOY_DIR_IMAGE}是错误的事情,但这并不一定意味着它不会产生所需的最终效果。或者,该食谱只是为某些更老的BitBake版本编写的。无论如何,比起我准备为您执行的工作,整理细节将是一个更深入,更复杂的分析。


POSIX未标准化

* install。 IIRC是GNU版本的灵感来自同名BSD的程序,并且该版本的当前版本具有相似的选项和行为,包括专门针对-m-d选项的行为。