【问题标题】:Confused about install -m and install -d using Yocto对使用 Yocto 安装 -m 和安装 -d 感到困惑
【发布时间】:2019-10-15 23:08:36
【问题描述】:

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

do_install() {
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/apiary
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/lib
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/config
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/scripts
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/keys

这可行,但我很困惑。根据我对 Yocto 和 do_install 的阅读,我认为 -m 选项仅用于安装文件而不是目录。

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

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

【问题讨论】:

  • install(1) man page-d 就像 mkdir -p-m 设置模式(权限)。请注意,带有 -d 之类的选项的 install 是非标准的。它在某些操作系统上不可用,例如 AIX 或 Solaris install
  • 另一个感兴趣的标准可能是 GNU Coding Standard 和 Makefile 的 INSTALL command variable
  • @jww 谢谢。如果没有 ${D} 变量,这如何工作你知道吗?我猜这是 Yocto 特有的 tho

标签: linux makefile yocto bitbake rootfs


【解决方案1】:

有问题的任务被定义为一个 shell 函数。其中使用的install 命令是一个shell 命令,而不是任何特定于Yocto 或BitBake 的命令,因此您应该查看its docs 以获得启发,而不是依赖BitBake 文档或示例。但是,特别是在 Yocto 的上下文中,您应该查看install 程序(如上链接)的 GNU coreutils 版本的文档,这是您在 Linux 系统上总是会找到的文档。*

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

除了以前没有看到它应用于目录之外,我不确定是什么让你这么想。

在安装命令中使用install -m 0755 -d-m-d 选项有什么影响?

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

-d 选项指定为安装指定的名称将被视为要创建的目录,以及指定路径中缺少的任何目录。正如@jww 在 cmets 中观察到的,效果类似于mkdir -p

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

另外,为什么没有像我看到的大多数其他目录安装那样的 ${D} 变量?

do_install 的 Yocto 规范说它应该安装相对于${D} 的文件,而the variable DEPLOY_DIR_IMAGE 指的是准备安装映像的位置。似乎安装到${DEPLOY_DIR_IMAGE} 是错误的做法,但这并不一定意味着它不会产生预期的最终效果。或者,也许这个配方只是为一些旧版本的 BitBake 编写的,它更有意义。无论如何,整理细节将是比我准备为您执行的更深入和更复杂的分析。


*install 没有被 POSIX 标准化。 GNU 版本的灵感来自 BSD 的同名程序,当前版本具有类似的选项和行为,尤其是在 -m-d 选项方面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多