
Ich versuche mich mit dem Yocto-Build-Prozess vertraut zu machen und arbeite derzeit mit Rezepten. Ich habe ein sehr einfaches Rezept
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
}
Mir wurde gesagt, dass das Installationsprogramm das Verzeichnis für Sie erstellen wird, wenn es es nicht findet. In diesem Fall ist das jedoch nicht der Fall! Der Fehler, den es mir anzeigt, ist
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)
Es ist nicht so, dass dort kein Verzeichnis erstellt werden kann. Das Rezept weigert sich, die Bash-Datei irgendwo abzulegen, sofern sie sich nicht in einem bestimmten Verzeichnis befindet.
Antwort1
Schauen Sie sich die große, aber umfassendeYocto-Referenzhandbuchund daseinfaches Beispieldort. Es zeigt ein typisches Installationsskript, das Dateien in ein Unterverzeichnis von verschiebt ${D}
, z. B.
install -d ${D}${bindir}
Sie müssen eine ähnliche Taktik verwenden, z. B. install -d ${D}/test
usw. Diese Variable wird erklärtHier.
Abschnitt lesen5.3.13. Installierenfür das, was während der Installationsphase voraussichtlich passieren wird.
Antwort2
Sie haben keine Berechtigung, Dateien in Ihrem Zielverzeichnis zu erstellen, das wahrscheinlich root gehört. Vielleicht können Sie die D
Variable irgendwo in Ihrem Home-Verzeichnis festlegen und dann aufrufen do_install
.