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,无需为每个版本单独编写补丁或配置。
- PN用于精准定位特定版本的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
相关产品推荐
相关产品推荐

