yocto 離線編譯


使用yocto編譯一個軟件包時,一般會先在本地尋找下載好的源碼包,如果不存在則根據配置從網絡下載。

添加本地源碼包

為了支持離線編譯,添加一個包的配置文件后,需要在本地也准備好源碼包。

可以先打開網絡連接,讓yocto幫我們下載好所需的源碼包。最終連同源碼包一起提交到本地倉庫中,后續即不再需要網絡連接。

打開網絡的方式:

 build/conf/local.conf

配置文件中,修改

 BB_NO_NETWORK = "0"

添加好bb文件,進行一次編譯,或者,單獨執行fetch進行下載,如

 bitbake android-tools -c fetch

指定commit id

如果已經在本地添加了源碼包,但每次編譯,yocto還是提示需要網絡的話,則可能是未配置具體的commit id。

一個例子如下,報錯信息

ERROR: android-tools-5.1.1.r37-r0 do_fetch: Network access disabled through BB_NO_NETWORK (or set indirectly due to use of BB_FETCH_PREMIRRORONLY) but access requested with command git -c core.fsyncobjectfiles=0 ls-remote https://android.googlesource.com/platform/system/core  (for url https://android.googlesource.com/platform/system/core)
ERROR: android-tools-5.1.1.r37-r0 do_fetch: Function failed: base_do_fetch

搜索可找到如下參考資料

https://lists.yoctoproject.org/pipermail/yocto/2012-September/009586.html

https://wiki.yoctoproject.org/wiki/How_do_I#Non-networked_Builds_and_Cached_Git_Respositories

大概的意思是,如果沒有指定具體的commit id,則yocto每次還是需要到遠程倉庫去獲取一下信息。

最終解決方式,即為添加SRC_REV指定具體的commit id。具體到android-tools這個包,官方已有patch解決。

https://github.com/openembedded/meta-openembedded/commit/aeca0185a6190f73f3c12e63f55c208ba3d16f6e

如果poky倉庫已經鎖定到某個版本。則需要自行在其他layer中,創建bbappend文件,在其中配置SRC_REV來解決這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM