不删除仓库解决Kas构建Yocto时的多初始化脚本冲突问题
解决Yocto构建中meta-openembedded与poky的初始化脚本冲突问题
问题背景
用Kas 4.5搭建Yocto构建环境,因依赖meta-xilinx层,在Kas配置中添加meta-openembedded仓库后,执行构建命令时触发错误:Multiple init scripts found (meta-openembedded vs. poky). Resolve ambiguity by removing one of the repos,需要在保留两个仓库的前提下解决冲突。
错误构建日志
./myimage/tools/myimage_docker.sh kas build Using /home/spire/air/myimage/docker/docker-compose.yml running kas -l debug build /air/myimage/bitbake/kas.yml Creating docker_yocto_run ... done 2024-12-12 16:14:56 - INFO - kas 4.5 started 2024-12-12 16:14:56 - DEBUG - Using selector: EpollSelector 2024-12-12 16:14:56 - DEBUG - /air/myimage/bitbake$ git rev-parse --show-toplevel 2024-12-12 16:14:56 - DEBUG - /air/myimage/bitbake$ git rev-parse --show-toplevel 2024-12-12 16:14:56 - DEBUG - execute setup_dir 2024-12-12 16:14:56 - DEBUG - execute setup_home 2024-12-12 16:14:56 - DEBUG - execute init_setup_repos 2024-12-12 16:14:56 - DEBUG - execute repo_setup_loop 2024-12-12 16:14:56 - DEBUG - Loop repo_setup_loop: execute setup_repos_step 2024-12-12 16:14:56 - DEBUG - execute finish_setup_repos 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/poky$ git remote set-url origin https://git.yoctoproject.org/git/poky 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/meta-openembedded$ git remote set-url origin https://git.openembedded.org/openembedded-core 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/meta-openembedded$ git cat-file -t scarthgap 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/poky$ git cat-file -t scarthgap 2024-12-12 16:14:56 - INFO - Repository meta-openembedded already contains scarthgap as commit 2024-12-12 16:14:56 - INFO - Repository poky already contains scarthgap as commit 2024-12-12 16:14:56 - DEBUG - Configuration from config file: {'distro': 'poky', 'header': {'version': 17}, 'machine': 'qemu64', 'repos': {'meta-openembedded': {'commit': 'scarthgap', 'layers': {'meta-networking': None, 'meta-oe': None, 'meta-python': None}, 'url': 'https://git.openembedded.org/openembedded-core'}, 'poky': {'commit': 'scarthgap', 'layers': {'meta': None, 'meta-poky': None}, 'url': 'https://git.yoctoproject.org/git/poky'}}, 'target': 'core-image-minimal'} 2024-12-12 16:14:56 - DEBUG - execute repos_checkout 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/poky$ git status -s 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/poky$ git checkout -q scarthgap 2024-12-12 16:14:56 - INFO - Repository poky checked out to scarthgap 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/meta-openembedded$ git status -s 2024-12-12 16:14:56 - DEBUG - /opt/myimage/build-env/meta-openembedded$ git checkout -q scarthgap 2024-12-12 16:14:56 - INFO - Repository meta-openembedded checked out to scarthgap 2024-12-12 16:14:56 - DEBUG - execute repos_apply_patches 2024-12-12 16:14:56 - DEBUG - execute setup_environ 2024-12-12 16:14:56 - ERROR - Multiple init scripts found (meta-openembedded vs. poky). Resolve ambiguity by removing one of the repos ERROR: 2
解决方案
冲突原因
你配置里的meta-openembedded实际指向的是openembedded-core仓库,这个仓库和poky一样包含oe-init-build-env初始化脚本,Kas无法自动选择使用哪一个,因此触发冲突。而真正的meta-openembedded仓库是用来提供附加层(比如meta-oe、meta-networking)的,本身不带核心初始化脚本。
具体修正步骤
修改Kas配置中的仓库URL
将meta-openembedded仓库的URL替换为真正的meta-openembedded仓库地址:https://git.openembedded.org/meta-openembedded,该仓库包含你需要的meta-oe、meta-networking、meta-python等层,且不会与poky的初始化脚本冲突。修改后的Kas配置示例
repos: poky: url: https://git.yoctoproject.org/git/poky commit: scarthgap layers: meta: meta-poky: meta-openembedded: url: https://git.openembedded.org/meta-openembedded commit: scarthgap layers: meta-oe: meta-networking: meta-python:重新执行构建
修改配置后,重新运行kas build命令,Kas会拉取正确的仓库,此时只有poky提供初始化脚本,冲突即可解决。
内容的提问来源于stack exchange,提问作者Werner Thomassen Andrade
相关产品推荐
相关产品推荐

