Yocto是一套用于定制Linux系统的开源软件,它提供模板、工具和方法帮你创建定制 Linux 系统。Yocto的编译机制依赖于各layer提供的recipes,也就是python编译方法。许多recipes都会带有自动版本确定功能,SRCREV = “${AUTOREV}”,这个定义会让脚本通过git ls-remote来搜索版本信息并比对,似乎是由于墙的原因,yocto在这个时候会报错,提示无法访问相应的repository。但如果你手动访问对应的repository并无障碍。
之所以许多官方源会用AUTOREV,是因为版本是不断更新的,这可以更方便让用户追随最新版本。但这个参数会导致脱网编译的方法无法使用,墙内使用不畅,所以建议首次编译Yocto项目时,还是先翻再编译。
也许有人会疑惑,我单独执行git命令没有问题啊?为什么用yocto编译时就不行了呢?其实github之类的境外网站的访问,在国内都是不稳定的,就好比第一次执行git clone一样,有时就卡住,但再执行一次就好了,这就是墙的威力,具体原理只有造墙的人才知道,目前只能从现象去判断,这个智能的墙并不会完全阻碍技术网站的访问,但其侦测鉴别过程确实对像git的访问造成障碍。而Yocto编译需要很多时间进行bb解析和对上游资源的查询,相关的python脚本碰上访问不畅时会当成目标不可达。
解决的办法只有这些:
- 用pvpn或其它类似软件翻 (推荐)
- 用境外git代理服务器
- 在recipe文件中尽量不要用SRCREV = “${AUTOREV}”,而是固化为某一版本。