Yocto 食谱的安装命令中的权限被拒绝

Yocto 食谱的安装命令中的权限被拒绝

我正在尝试熟悉 Yocto 构建过程,目前正在使用配方。我有一个非常简单的食谱

DESCRIPTION = "Hello world"

S = "${WORKDIR}"
SRC_URI="file://bye.sh"
LICENSE = "CLOSED"

LIC_FILES_CHKSUM = "file://${S}/README;md5=e584df0feead52ed7de9b60172adc0cf "

#${D} is /usr and ${bindir} is bin 
    do_install() {
         install  -d /test 
        install -m 0777 bye.sh /test
}

有人告诉我,如果安装找不到该目录,它会为您创建它,但在这种情况下它不会这样做!它给我的错误是

Log data follows:
| DEBUG: Executing shell function do_install
| install: cannot create regular file ‘/usr/bin/bye.sh’: Permission denied
| WARNING: /home/builder/project/runqeme_qemux86/build/tmp/work/i586-poky-linux/directory/1.0-r0/temp/run.do_install.22136:1 exit 1 from 'install -m 0777 bye.sh /usr/bin'
| ERROR: Function failed: do_install (log file is located at /home/builder/project/runqeme_qemux86/build/tmp/work/i586-poky-linux/directory/1.0-r0/temp/log.do_install.22136)

这并不是说它不能在那里构建目录,配方拒绝在任何地方讲述 bash 文件,除非它位于特定目录中。

答案1

查看大而全面的Yocto 参考手册简单的例子那里。它显示典型的安装脚本会将文件移动到 的子目录${D},例如

install -d ${D}${bindir}

您必须使用类似的策略,例如install -d ${D}/test等等。这个变量有解释这里

阅读部分5.3.13.安装中安装阶段预计会发生什么。

答案2

您无权在目标目录中创建文件,该目录可能由 root 用户拥有。也许您可以将该D变量设置为主目录中的某个位置,然后调用do_install.

相关内容