
我正在嘗試熟悉 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
.