Yocto自定义全局变量添加方法及环境变量生命周期咨询
Yocto全局变量配置与环境变量生命周期问题解答
1. 如何添加可在bbclass或bb文件中使用的全局变量
有三种常用实现方式,可根据需求选择:
全局配置文件定义
在local.conf、distro.conf这类全局配置文件中直接添加变量:ABC = "19990909"若需要让该变量能被bbclass中的
os.getenv()获取(即成为bitbake执行环境的环境变量),需同时添加白名单配置:EXPORT_ENV_WHITELIST += "ABC"配置完成后,bb文件中可直接用
${ABC}引用,bbclass中既可以用d.getVar('ABC')获取,也能通过os.getenv("ABC")读取。命令行临时传递
执行bitbake时在命令行前附加变量,仅对本次构建会话有效:ABC="19990909" bitbake <目标recipe名称>该方式下,bb文件和bbclass都能通过对应方法获取变量值。
bbclass全局定义
在自定义bbclass中添加变量定义,若要让所有recipe都能使用,需将该class加入BBDEFAULTCLASSES:ABC ?= "19990909"继承该class的recipe可直接用
${ABC}引用,bbclass内部也能通过d.getVar('ABC')获取变量。
2. 环境变量的生命周期
系统级环境变量(如shell中export的变量)
- 仅在当前shell会话内有效,bitbake启动时会继承当前shell的环境,但Yocto构建环境默认做隔离处理,只有被加入
EXPORT_ENV_WHITELIST的系统变量才会被保留并可被os.getenv()读取。 - 修改
/etc/profile这类全局配置后,需重新登录shell,新启动的bitbake进程才能继承到该变量,且同样需要加入白名单才能在构建体系内访问。
Yocto构建体系内的变量
- 配置文件定义的变量:在bitbake启动时加载,整个构建进程的生命周期内(从bitbake启动到结束)都有效,所有recipe和bbclass均可访问。
- 命令行传递的变量:仅对当前bitbake运行实例有效,进程结束后变量立即失效。
- recipe/bbclass内定义的变量:
- recipe内定义的变量:仅在该recipe的构建流程中有效,构建完成后失效。
- bbclass内定义的变量:作用范围取决于class的继承关系,仅继承该class的recipe在构建时可访问,构建完成后失效。
内容的提问来源于stack exchange,提问作者littlebox
相关产品推荐
相关产品推荐

