yocto 离线编译
Posted zqb-all
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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来解决这个问题。
以上是关于yocto 离线编译的主要内容,如果未能解决你的问题,请参考以下文章