我已经接管了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,但是有太多的不一致之处,我不理解,并且很难找到答案。
答案 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版本编写的。无论如何,比起我准备为您执行的工作,整理细节将是一个更深入,更复杂的分析。
* install
。 IIRC是GNU版本的灵感来自同名BSD的程序,并且该版本的当前版本具有相似的选项和行为,包括专门针对-m
和-d
选项的行为。