2016-03-22 57 views
1

我正在嘗試編寫一個配方,可以在創建整個圖像時簡單地將兩個文件(MyfileA,MyfileB)複製到特定目錄。這是我的目錄結構是什麼樣子:bitbake食譜 - 做一個簡單的圖像副本

MyDir/MyRecipe.bb 
MyDir/files/MyfileA 
MyDir/files/MyfileB 

我想這兩個文件複製到家裏的一個文件夾(這也就不存在了最初因此目錄應創建)的文件夾可以說,被稱爲「 Testfolder」 這是我的文件bitbake的樣子

DESCRIPTION = "Testing Bitbake file" 
PR = "r0" 

SRC_URI = "file://MyfileA \ 
      file://MyfileB " 

do_install() { 
     install -d MyfileA ~/TestFolder/ 
} 

請讓我知道,如果我在這裏做錯了什麼? 當我在這個bitbake的運行,我得到了這方面的以下

The BBPATH variable is not set and bitbake did not find a conf/bblayers.conf file in the expected location. 
Maybe you accidentally invoked bitbake from the wrong directory? 
DEBUG: Removed the following variables from the environment: LANG, LS_COLORS, LESSCLOSE, XDG_RUNTIME_DIR, SHLVL, SSH_TTY, OLDPWD, LESSOPEN, SSH_CLIENT, MAIL, SSH_CONNECTION, XDG_SESSION_ID, _, BUILDDIR 

任何幫助,將不勝感激。

回答

6

首先,要創建自己的元層,您應該在Yocto環境中運行命令yocto-layer create MyRecipe。這是爲了確保你的元層有所有必要的元素。確保把新的元層到的conf/bblayers.conf

創建的HelloWorld配方視頻可以發現here

其次,將文件從一個到另一個目錄複製。

DESCRIPTION = "Testing Bitbake file" 
SECTION = "TESTING" 
LICENSE = "MIT" 
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" 
PR = "r0" 

SRC_URI = "file://MyfileA \ 
      file://MyfileB " 

#specify where to get the files 
S = "${WORKDIR}" 

inherit allarch 

#create the folder in target machine 
#${D} is the directory of the target machine 
#move the file from working directory to the target machine 

do_install() { 
     install -d ${D}/TestFolder 
     install -m ${WORKDIR}/MyfileA ${D}/TestFolder 
} 

爲了獲得更多的細節,這是我對Yocto文件如何移動的理解。

您有一個在/sourced/meta-mylayer/recipes-myRecipe/中存儲元數據的目錄。在該目錄中,將會有一個與配方名稱相同的文件夾。 I.E. myRecipe/myRecipe_001.bb

你會存儲相關的myRecipe.bb文件(通常是一個補丁)在myRecipe/使SRC_URI將進入該目錄myRecipe/搶文件。 I.E. myFileAmyFileB

然後,您指定S。這是生成目錄中解包配方源代碼所在的位置。這意味着,當myRecipe構建時,myFileAmyFileB被移動/複製到那裏。

通常,S等於${WORKDIR},這相當於${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}

實際目錄取決於幾個因素:

TMPDIR:頂級構建輸出目錄

MULTIMACH_TARGET_SYS:目標系統標識

PN:配方名稱

EXTENDPE:曆元 - (如果未指定PE,則這通常是最配方的情況下,然後EXTENDPE爲空)

PV:配方版本

PR:配方修訂

之後,我們inherit allarchThis class is used for architecture independent recipes/data files (usually scripts)

然後,我們要做的最後一件事就是複製文件。

${D}是構建目錄中由do_install任務安裝組件的位置。此位置默認爲${WORKDIR}/image

${WORKDIR}/image也可以被描述爲目標系統中的/目錄。

轉到${D}目錄,創建一個文件夾調用TestFolder 然後,從${WORKDIR}複製myFileA到${D}/TestFolder

附:請添加評論來解決。這裏可能有錯誤的信息,因爲我自己學到了這一切。

+0

你能告訴我什麼是WORKDIR變量的值嗎? - 這是否需要絕對或相對路徑? –

+0

你也可以告訴我$ {D}是什麼?值D分配在哪裏? –

+0

WORKDIR定義如下:'$ {TMPDIR}/work/$ {MULTIMACH_TARGET_SYS}/$ {PN}/$ {EXTENDPE} $ {PV} - $ {PR}'。路徑必須是絕對的。 TMPDIR在'/ yocto-environment/build/tmp /'中。[http://www.yoctoproject.org/docs/2.0/ref-manual/ref-manual.html#var-WORKDIR] –