2014-09-03 81 views
4

我目前的項目基於Yocto Daisy,在一個git倉庫中定製圖層聲明,並在另一個git倉庫中包含應用程序代碼。應用程序代碼生命週期與自定義圖層生命週期有些分離,所以我希望能夠在構建中捕獲它。如何在Yocto圖像配方中使用特定的軟件包版本?

爲此,我有兩個擴展core-image的配方:'my-image'和'my-image-dev'。我希望「我的圖像」始終使用「應用程序」的標籤版本(例如v0.1,v0.2等)。我希望'my-image-dev'總是使用git master的'application'HEAD。

我寫了食譜「application_0.1.bb」和「application_git.bb」,並對它們進行了單獨測試。它們的行爲與預期相同 - 'application_0.1.bb'獲取標籤0.1,'application_git.bb'獲取主人。

當我嘗試指示特定圖像使用特定版本的「應用程序」時,問題就出現了。我原以爲這會像將PREFERRED_VERSION_application = "0.1"PREFERRED_VERSION_application = "git%"添加到我的圖像食譜一樣簡單,但是這沒有給我任何愛。 PREFERRED_VERSION似乎工作的唯一地方是在layer.conf和machine.conf中,這對我沒有幫助,因爲這兩個映像都是針對同一個邏輯機器的。

所以這是我的問題 - 有沒有辦法從Yocto圖像聲明對特定版本的包的依賴?

回答

3

我找到了一個解決方案,可以讓我按照我的要求來做。

關鍵是將我的'應用程序'包分成兩個包 - 'application'和'application-git'。然後,我將發行版的配方移至「應用程序」,開發配方移至「application-git」。爲了減少重複的代碼,我將兩個食譜之間的所有公共邏輯移動到一個文件'application/application.inc'中,並使用require recipes-application/application/application.inc將它包含在'application-git.bb'中。

現在我可以在我的圖像中包含適當的包。所以'my-image.bb'包含IMAGE_INSTALL += "application"。 'my-image-dev.bb'需要'my-image.bb',所以我添加了行IMAGE_INSTALL_remove = "application"並添加了IMAGE_INSTALL += "application-git"

這是一個輕微的系統濫用,但由於它產生了一個清晰的結果(圖像發佈版本,dev-dev在image-dev中),我認爲這是值得的。

+0

不,這不是濫用......這是正確的做法。 – Anders 2016-01-25 18:01:17

相關問題