使用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來解決這個問題。