You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Yocto Kirkstone无法排除GPL-3.0代码的问题求助

Yocto Kirkstone排除GPL-3.0代码未生效的排查与解决

核心原因分析

问题核心在于INCOMPATIBLE_LICENSE配置覆盖不全,或目标包的LICENSE字段存在多协议兼容情况,再加上meta-gplv2的替换范围有限,导致GPL-3.0包未被正确拦截。

具体排查与修复步骤

1. 补全INCOMPATIBLE_LICENSE配置

Yocto中GPL-3.0存在多个变体协议,仅写GPL-3.0无法覆盖所有情况。修改local.conf:

INCOMPATIBLE_LICENSE = "GPL-3.0 GPL-3.0-only GPL-3.0+ LGPL-3.0 LGPL-3.0-only LGPL-3.0+"
  • GPL-3.0-only:仅遵循GPL-3.0协议的包
  • GPL-3.0+:允许GPL-3.0及后续版本的包
  • 同时覆盖LGPL-3.0的所有变体,确保完全排除(L)GPL-3.0代码

2. 检查目标包的LICENSE字段

以ufw为例,查看其配方文件(recipes-connectivity/ufw/ufw_*.bb)中的LICENSE字段:

  • 如果是LICENSE = "GPL-3.0":补全INCOMPATIBLE_LICENSE后应该会被拦截
  • 如果是LICENSE = "GPL-3.0 | MIT":因为存在兼容协议(MIT),Yocto会认为该包可接受,此时需要手动处理:
    EXCLUDE_FROM_IMAGE = "ufw"
    EXCLUDE_FROM_WORLD = "ufw"
    

3. 确认meta-gplv2的作用范围

meta-gplv2仅提供部分GPLv3包的GPLv2替代版本(如bash替换为bash-compat),并非所有GPLv3包都有对应替换。如果ufw不在其替换列表中,无法依赖meta-gplv2自动排除,需手动处理。

4. 排查强制依赖

使用以下命令生成ufw的依赖图,确认是否有核心包强制依赖ufw:

bitbake -g ufw
cat pn-depends.dot | grep -E "(ufw|->"

如果存在强制依赖,需要替换依赖包,或修改对应包的配方移除对ufw的依赖。

5. 彻底清理构建缓存

旧缓存可能导致配置不生效,执行以下操作后重新构建:

bitbake -c cleansstate <你的镜像名>
rm -rf tmp/deploy/licenses
bitbake <你的镜像名>

6. 检查是否有配置冲突

确认local.conf或其他配置文件中没有设置LICENSE_FLAGS_WHITELIST白名单GPL-3.0相关协议,该配置会覆盖INCOMPATIBLE_LICENSE的限制。

无关配置说明

你提到的PARSE_ALL_RECIPES和SOURCE_MIRROR_FETCH与LICENSE拦截机制无关,无需额外设置。

内容的提问来源于stack exchange,提问作者PhilBot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:42:18