将适用于Raspberry Pi 3的Yocto项目迁移至另一台Ubuntu主机
可以!完全能实现离线复用缓存构建
当然可以!这正是Yocto设计时考虑到的离线/迁移构建场景,完美解决网络差时重复下载包的痛点——我之前在跨主机迁移Yocto项目时就这么操作过,省了好几天的下载时间。
下面是具体的操作步骤和注意事项:
1. 复制下载缓存目录
Yocto所有下载的源码包、二进制依赖包都存在downloads目录里,默认路径是你的Poky构建目录下(比如build/downloads)。
- 用
cp -a或者rsync -av命令把这个目录完整复制到新主机的相同构建路径下(比如新主机的build/downloads),这样能保留文件权限、软链接等信息,避免后续权限问题。 - 如果原主机里通过
local.conf的DL_DIR自定义了下载目录,要确保新主机的DL_DIR配置指向你复制过来的目录,或者直接把缓存目录放到新主机的默认路径下。
2. 同步核心配置文件
把原主机构建目录下conf文件夹里的local.conf和bblayers.conf完整复制到新主机的对应conf目录中:
- 检查
local.conf:确认里面的DL_DIR、SSTATE_DIR(如果用到共享状态缓存)等路径在新主机上是正确的,要是路径和原主机不一样,直接修改成新主机的对应路径。 - 检查
bblayers.conf:确保里面列出的所有层(poky、meta-embedded、meta-raspberrypi等)的路径在新主机上存在且正确,要是新主机的层存放位置和原主机不同,更新路径指向新主机的层目录。
3. 同步各层的Git状态
因为你是通过git clone -b拉取的各个层,新主机上必须保证这些层的代码状态和原主机完全一致:
- 在原主机的每个层目录下,执行
git rev-parse HEAD记录当前的commit哈希,同时确认分支(git branch)。 - 在新主机的对应层目录里,切换到相同分支,然后执行
git checkout <原主机的commit哈希>,确保代码版本完全匹配,避免因为层代码差异导致构建失败。
4. 启动Bitbake构建
完成以上步骤后,在新主机上进入Yocto构建环境:
source poky/oe-init-build-env
然后执行你原来的构建命令,比如:
bitbake core-image-base
Bitbake会自动检测downloads目录里的缓存文件,不会重复下载,直接复用本地文件进行构建。
额外提速技巧
如果原主机构建时生成了sstate-cache(共享状态缓存),也可以把这个目录一起复制过来——这是Yocto的编译中间产物缓存,能大幅减少编译时间,很多已经编译好的组件可以直接复用,不用重新编译。复制方法和downloads目录一样,注意路径对应即可。
注意事项
- 确保新主机的Ubuntu版本(16.04.4)、依赖包和原主机完全一致,比如
build-essential、git、python2.7(Yocto旧版本依赖Python2)等必须安装齐全,避免依赖缺失导致构建失败。 - 如果复制过程中文件损坏,Bitbake会自动校验文件的哈希值,发现不匹配的文件会重新下载对应包,不用担心少量文件出错的问题。
内容的提问来源于stack exchange,提问作者RBB01
相关产品推荐
相关产品推荐

