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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:02