2016-08-11 207 views
5

yocto project允許在其大多數配置文件中使用相對路徑,但不允許在./build/conf/bblayers.conf文件中使用相對路徑。阻止使用除絕對路徑之外的任何東西的原因是什麼?BBLAYERSBBLAYERS_NON_REMOVABLE變量?爲什麼yocto bblayers.conf文件使用絕對路徑?

我看過BitBake user manual for yocto version 2.0(當前版本),但這並不能解釋推理。我也檢查了一些舊的手動版本,但在談到bblayers.conf文件或BBLAYERS變量時,他們似乎沒有提到推理。同一個文件也包含BBPATH = "${TOPDIR}",它至少是動態分配的,並且離根yotco目錄不遠。

我最好的猜測是,bblayers.conf文件是特定於它正在運行的系統。這將使其不適合通過源代碼控制在開發人員之間共享,並且絕對路徑會強制人們在收到副本時編輯文件。這似乎不是一個很好的理由,因此,這個問題。

+0

你有沒有想過如何做到這一點?現在坐在同一條船上:) –

+0

@MarioTacke不,我沒有。我認爲答案是'bblayers.conf'文件是專門針對某臺機器上的用戶的,只是暫時的。一旦你完成了你想要的圖層,你應該製作一個替代大部分'bblayers.conf'內容的配方。您可以使用'$ {HOME}','$ {TOPDIR}'和其他一些替代品,但不能使用相對路徑。 – TafT

+0

沒有人回答這個問題。我不是問「我如何使用相對路徑」我問「爲什麼阻止它們的使用」。現在回想一下,我猜測答案是效率。對於絕對路徑,您可以直接導航到目標文件。對於一個相對路徑,你必須找出一個當前的工作目錄,找出N個「../」高於這個目錄並移動到那裏,然後向下移回另一個目錄路徑。這聽起來像比去/ home/TafT/yocto/meta更多的工作。 – TafT

回答

3

您可以在bblayers.conf中使用相對路徑。

有可能是這條線在你bblayers.conf

BBPATH = "${TOPDIR}" 

當你想找出這個變量的內容,你可能會發現你的build目錄的頂級目錄:

bitbake -e | grep ^TOPDIR 
# searches for bitbake variables 

在這個目錄中,您可以創建一個圖層meta-test並將其添加到bblayers.conf中,其相對路徑爲:

BBLAYERS ?= " \ 
    meta-test \ 
    [...] 
    " 

所以你的問題的答案爲什麼在bblayers.conf有絕對路徑,你可以把你的編譯目錄放在系統的任何地方,而不是依賴於Yocto。

圖層的相對路徑必須始終相對於構建目錄。

+0

你的答案似乎表明,相對於構建目錄的路徑是可能的。沒有什麼說實際上可以使用相對路徑。如果Yocto(或bitbake)系統只接受$ {TOPDIR}的絕對路徑,然後使用字符串操作來附加BBLAYERS路徑,那麼仍然只使用絕對路徑。你是否說過,將構建目錄放在任何地方的能力都是通過絕對路徑的需求來維護的?是否有這些陳述的來源。 – TafT

+0

我不明白這一點。相對路徑總是需要一個參考點。這就是「相對」這個詞。在這一點上它將是BBPATH。只要安全設置合適,您可以通過相對路徑訪問文件系統上的任何文件。 – h0ch5tr4355

+0

如果我在我使用的路徑中輸入'。/'或'../../',它們會失敗。這是我所問的那種相對路徑。我可以看到,使用bitbake系統可以在bitbake生態系統中有一些相對於其他事物的路徑。我在問,爲什麼我在bblayers.conf文件中不能有一個被定義爲'../ foo/bar.txt'的路徑,在我嘗試使用的大多數其他文件中似乎是可能的。 – TafT

4

我找到了一種使用相對路徑的方法。

您可以使用inline python遍歷文件系統。以下腳本使用提供的TOPDIR變量,然後通過python的os.path api導航到其父項。

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf 
# changes incompatibly 
LCONF_VERSION = "6" 

BBPATH = "${TOPDIR}" 
BBFILES ?= "" 

YOCTOROOT = "${@os.path.abspath(os.path.join("${TOPDIR}", os.pardir))}" 

BBLAYERS ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
    ${YOCTOROOT}/poky/meta-yocto-bsp \ 
" 

BBLAYERS_NON_REMOVABLE ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
" 

參考

+0

YOCTOROOT與BBPATH或TOPDIR?我想它會給你有效的../操作,它可以解決問題並允許你執行'$ {YOCTOROOT}/my-layer /'。 – TafT

+0

是的,這是正確的。 –

1

我設法得到bblayers.conf文件 「相對路徑」 通過更換

工作
BBLAYERS ?= " \ 
    /home/username/poky/meta \ 
    ... 

BBLAYERS ?= " \ 
    ${TOPDIR}/../meta \ 
    ... 

我想一個警告這個方法是我在依靠meta-XXX層目錄中的TOPDIR父文件夾始終是。這似乎是使用yocto的默認方式,但可能不適合更多自定義的構建設置。

+1

聽起來像你設法得到我可能沒有做的工作。也許這些工具已經更新,現在就允許這種行爲。謝謝你的回答,但它沒有解決他們被阻止的問題。雖然我認爲這表明現在他們可能不再被阻止,所以答案可能是沒有理由的錯誤。 – TafT

相關問題