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

BPN与PN的区别是什么?结合bitbake.conf示例详解

PN 与 BPN 在BitBake中的核心区别

基础定义

  • PN(Package Name):每个BitBake recipe的全局唯一标识符。默认是recipe文件名去掉.bb/.bbappend后缀,也可通过在recipe中手动设置PN变量覆盖默认值。
  • BPN(Base Package Name):PN的基础核心名称,当PN包含版本号、分支标识等后缀时,BPN会提取出不带后缀的通用包名;若PN无特殊后缀,BPN与PN完全一致。

核心区别

  • 唯一性:PN是单个recipe的专属ID,同一软件的不同版本会有不同PN(如foo-1.0、foo-2.0);BPN是同一软件所有版本共享的归类名称(上述两个版本的BPN都是foo)。
  • 适用场景:
    • PN用于精准定位特定版本的recipe,比如依赖指定版本包时使用:DEPENDS = "foo-1.0"。
    • BPN用于批量操作同一软件的所有版本,比如编写通用.bbappend时,用${BPN}匹配同软件的所有recipe,无需为每个版本单独编写补丁或配置。

实际示例

示例1:无版本号的普通recipe

假设存在foo.bb,未手动设置PN/BPN:

# foo.bb
SUMMARY = "基础foo包"
LICENSE = "MIT"

此时:

  • PN = "foo"
  • BPN = "foo"
    二者完全相同。

示例2:带版本号的recipe

存在foo-1.0.bb,或在recipe中手动指定PN:

# foo-1.0.bb
PN = "foo-1.0"
SUMMARY = "1.0版本foo包"
LICENSE = "MIT"

此时:

  • PN = "foo-1.0"(唯一标识这个特定版本的recipe)
  • BPN = "foo"(提取出通用基础名称)

示例3:用BPN实现通用补丁

同时存在foo-1.0.bb和foo-2.0.bb,编写foo.bbappend即可为两个版本统一添加补丁:

# foo.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
SRC_URI += "file://common-fix.patch"

这里${BPN}会自动匹配两个recipe的BPN(均为foo),无需分别编写两个版本的bbappend文件。

示例4:用PN指定特定依赖

某个bar包需要依赖1.0版本的foo,直接用PN精准定位:

# bar.bb
DEPENDS = "foo-1.0"

BitBake会直接找到foo-1.0.bb,而非其他版本的foo recipe。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:32:36