我正在尝试熟悉 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
.