Skip to main content

简介

本文提供如何从源代码构建固件组件并将其集成到 Qualcomm BSP 镜像的高层概述。 固件源代码仅向已签署所需协议的用户开放。如果您尚未获得访问权限, 请访问 Working with Qualcomm 页面创建 Qualcomm ID,并了解有关账户验证和访问级别的更多信息。 从高层次来看,您将学习以下内容:

支持的 SoC

本文档支持以下 SoC。如果您的芯片组未 列出,则此处描述的固件构建流程不适用于您的设备。

主机系统要求

  • 操作系统
    • Ubuntu 22.04
  • 配置
    • x86 机器
    • 四核 CPU,例如 3.4 GHz 的 Intel i7-2600(同等或更高配置)
    • 300 GB 可用磁盘空间(交换分区 > 32 GB)
    • 16 GB 内存
  • 工具
    • Git 1.8.3.1 或更高版本
    • Tar 1.28 或更高版本
    • Python 3.10.2 或更高版本
    • GCC 10.1 或更高版本
    • GNU Make 4.0 或更高版本
    • Kas 4.8 或更高版本
  • 权限
    • 运行某些命令需要 sudo 权限

安装 QSC-CLI

qsc-cli 是 Qualcomm 提供的命令行工具,为访问、管理和构建 Qualcomm 软件提供端到端的工作流。请按照以下步骤在您的系统上安装 qsc-cli:
  • 访问 Qualcomm 支持页面注册您的 Qualcomm 电子邮箱 ID。
  • 下载 qsc-cli 的 Debian 软件包:
  • 安装 qsc-cli Debian 软件包:
  • 使用您的 Qualcomm ID 登录 qsc-cli。对于大多数用户,您的 Qualcomm ID 就是您的 电子邮箱地址。此操作会打开浏览器窗口以完成身份验证。如果浏览器 没有自动打开,请复制终端中打印的链接并将其粘贴到您的 浏览器中完成身份验证。

主机设置

以下说明适用于 Ubuntu 主机系统。Yocto 构建也支持与 Yocto 兼容的其他 发行版, 但未对它们进行验证。
  • 安装以下软件包,为 Yocto 构建准备主机环境
  • Qualcomm 使用 kas 工具来同步和构建 Yocto 项目。请按照 以下步骤在系统上安装 kas
    在较旧的 Ubuntu 版本上,系统包管理器提供的 kas 版本 可能已过时。推荐使用 pipx 来安装 kas。
    1. 安装 pipx
    2. 将 pipx 的安装位置添加到您的 PATH 中
      此命令会更新您 shell 的启动文件,因此更改仅在 新的 shell 会话中生效。请在继续下一步之前 重新启动您的 shell 会话。
    3. 安装 kas(要求版本 4.8 或更高)
  • 验证 kas 是否安装成功。
  • 编译固件还需要以下软件包:
  • 使用 qsc-cli 获取用于访问 Chipcode 的 PAT 令牌。该 令牌将在两周后过期。
    Sample output
  • 将以下条目添加到您的 ~/.netrc 文件中,以完成对 Chipcode 仓库访问的身份验证:
  • 更新 git 配置:

配置参数

下表描述了当前版本的构建标签。这些 值需要替换到构建命令中。

映射固件源代码

下表描述了您可以下载的固件发行版。 有关 Yocto 层的更多信息,请参阅 Qualcomm Linux 元数据层。 访问级别与固件发行版的映射 AP = 应用处理器(Application Processor);AMSS = 高级移动用户软件(Advanced Mobile Subscriber Software) 固件发行版与 git 仓库的映射
Qualcomm_Linux.SPF.2.0|AP|Standard|OEM| 和 Qualcomm_Linux.SPF.2.0|AMSS|Standard|OEM| 发行版仅在 QCS6490 芯片组上受支持。

切换 Python 版本

不同的固件镜像构建步骤需要不同的 Python 版本, 具体版本在每个构建步骤下列出的 Python 版本要求中 说明。您可以使用 Python 版本管理工具来安装并在 所需版本之间切换,而不会影响系统级的 Python 安装。常见的选择包括 pyenv 和 uv。本节介绍如何使用 pyenv。
  • pyenv 会从源码构建每个 Python 版本,因此请先安装构建 依赖项。如果缺少这些软件包,构建会静默跳过 诸如 readline、sqlite3 和 lzma 之类的模块:
  • 安装 pyenv。这需要 git 和 curl 软件包,它们已作为 主机系统要求的一部分安装。
  • 通过在您的 ~/.bashrc 文件末尾添加以下几行来 配置 shell:
  • 重新加载 shell 配置:
  • 列出可用的 Python 版本,并找到您正在执行的构建步骤 所需的版本(例如 Python 3.8.2):
  • 安装所需的 Python 版本:
  • 激活已安装的版本。使用 pyenv global 将其设置为 您用户账户的默认版本,或使用 pyenv local 将其仅限于当前 目录:
    验证已激活正确的版本:
pyenv global 和 pyenv local 仅通过 pyenv 更改您 用户账户的 Python 版本。它们不会修改或替换系统级的 Python 安装,因此其他用户和系统应用程序不受 影响。
  • 要恢复到系统 Python 版本:
  • 要完全禁用 pyenv,请删除上面 shell 配置步骤中添加到 ~/.bashrc 的那几行,然后重新加载 shell 配置:

构建固件

  • 为固件源码创建一个工作区目录并进入该目录。 后续所有说明均假定此目录为工作目录。
  • 使用 Firmware Source Mapping 表中的发布标签和克隆 URL,从 Chipcode 克隆固件源码。
  • 根据所选的访问配置文件,将以下命令中的 <firmware-root> 和 <distro-clone-directory> 替换为正确的值。
先决条件
  • 确保当前使用的 shell 是 bash:
    该命令的预期输出应为 bash。如果不是,请进入 bash shell。
  • 使用以下命令安装 libffi6 软件包。QAIC 编译器需要 该软件包,它用于从 IDL 文件生成头文件和 源文件。
  • 安装用于 AOP、Qualcomm® Trusted Execution Environment (TEE) 和 boot 编译的 LLVM:
  • 导出 SECTOOLS 变量并编译固件构建 (<firmware-root>/<distro-clone-directory> 是顶层目录):
  • 安装并设置 Qualcomm® Hexagon™ 处理器。将 环境变量 HEXAGON_ROOT 设置为 Hexagon SDK 的 安装路径。若要在使用 qsc-cli 时更改安装路径,请参阅 更改 Hexagon 工具安装路径。
构建 cDSP所需工具
  • 编译器版本:Hexagon 8.4.07
  • Python 版本:Python 3.10.2
  • libffi6 软件包
构建步骤
  • 进入以下目录:
  • 清理构建:
  • 构建镜像:
构建 aDSP所需工具
  • 编译器版本:Hexagon 8.4.07
  • Python 版本:Python 3.10.2
  • libffi6 软件包
构建步骤
  • Nanopb 集成(一次性设置):
  • 进入以下目录:
  • 清理构建:
  • 构建镜像:
构建 Boot所需工具
  • 编译器版本:LLVM 版本必须更新为 14.0.4
  • Python 版本:Python 3.10
  • libffi6 软件包
构建步骤
  • 安装设备树编译器:
  • 进入以下目录:
  • 安装依赖项:
  • 清理构建:
  • 构建镜像:
    对于 debug 变体构建,请将 RELEASE 替换为 DEBUG。
构建 Qualcomm TEE 固件所需工具
  • 编译器版本:LLVM 16.0.7
  • Python 版本:Python 3.10
构建步骤
  • 安装 LLVM:
  • 清理构建:
  • 构建镜像:
构建 AOP 固件所需工具
  • 编译器版本:LLVM 14.0.4
  • Python 版本:Python 3.10
构建步骤
  • 进入以下目录:
  • 清理构建:
  • 构建镜像:
构建 MPSS
此步骤仅适用于 Qualcomm_Linux.SPF.2.0|AMSS|Standard|OEM|。
所需工具
  • 编译器版本:Hexagon 8.4.10
  • Python 版本:Python 3.8.2
构建步骤
  • Nanopb 集成(一次性设置):
  • 进入以下目录:
  • 清理构建:
  • 构建镜像:
CPUCP 固件Qualcomm 以二进制形式发布 CPUCP 固件,您无需编译 该构建。CPUSYS.VM 固件Qualcomm 以二进制形式发布 CPUSYS.VM 固件,您无需 编译该构建。BTFM 固件Qualcomm 以二进制形式发布 BTFM 固件,您无需编译 该构建。WLAN 固件Qualcomm 以二进制形式发布 WLAN 固件,您无需编译 该构建。生成固件预构建产物(boot-critical 和 split-firmware 二进制文件)
此步骤仅适用于 Qualcomm_Linux.SPF.2.0|AP|Standard|OEM|。
  • 使用您编译的各个组件创建一个集成的固件 二进制文件:
  • 如果在 <firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/build/ufs/bin 目录中生成了以下 zip 文件,则表明固件预构建成功:
    • QCM6490_bootbinaries.zip
    • QCM6490_dspso.zip
    • QCM6490_fw.zip

构建 BSP 镜像

本节介绍如何使用 meta-qcom-extras 层将固件二进制文件和其他源代码 组件集成到完整的 BSP 镜像中。BSP 镜像构建将上一步中编译好的固件与 Yocto 层栈相结合,生成一个包含所有必需 二进制文件的可刷写镜像。
  • 下载 Qualcomm 的 Yocto 层 meta-qcom-extras。有关最新的 <meta-qcom-extras-release-tag>,请参阅配置参数。
层设置
  • 导出 NETRC_FILE 参数,以确保 ~/.netrc 凭据在 kas 环境中 可见:
  • 设置该层的对外许可证及其校验和。层中的每个 recipe 都需要 CUST_LICENSE 和 CUST_LIC_CHKSUM。
    • 客户必须在 recipes 中指定合适的对外许可证,才能构建 专有源代码。
    • 客户应咨询自己的法务团队,以获取有关对外许可决策的指导。
    • 所选的对外许可证必须与 PKLA 兼容。
  • 以下值与源代码仓库中已存在的占位 LICENSE 文件相匹配。可将其用于 内部构建和评估,而无需替换任何许可证文件。 请勿在生产构建中使用这些值。对于任何部署,请定义您自己的许可证 值。
  • 在构建之前更新源代码仓库中的许可证文件。 meta-qcom-extras 使用的所有源代码默认都包含一个占位 LICENSE 文件。Recipes 会在构建时根据此文件校验 CUST_LICENSE,因此必须 将其替换为您选择的对外许可证。 上游仓库无法直接修改。请将每个仓库镜像到您自己拥有的本地或远程 服务器上,替换占位 LICENSE 文件,然后更新受影响 recipes 中的 SRC_URI 变量,以指向新的 URI。
固件设置
  • 将 FWZIP_PATH 设置为包含固件 ZIP 文件的目录,以便在构建中包含 本地编译的固件 zip 路径。
  • 设置调制解调器专用许可证及其校验和。仅在构建调制解调器固件时才需要 CUST_MDM_LICENSE 和 CUST_MDM_LIC_CHKSUM。
  • 以下值与源代码仓库中已存在的占位 LICENSE 文件相匹配。可将其用于 内部构建和评估,而无需替换任何许可证文件。 请勿在生产构建中使用这些值。对于任何部署,请定义您自己的许可证 值。
  • firmware-qcom-selective.inc 在解析时应用以下规则:
    • 如果未设置 FWZIP_PATH 或 FWZIP_NAME,则该 recipe 将被静默跳过。
    • 如果两者均已设置但 ZIP 文件缺失,构建将因致命错误而失败。
    • 如果没有 PREFERRED_RPROVIDER 指向该 recipe,则该 recipe 将被静默跳过。
  • 编辑 meta-qcom-extras/ci/providers.yml,添加所需的 FWZIP_NAME 赋值,以在镜像编译期间启用 recipe。
  • 在构建之前更新固件 ZIP 中的许可证文件。 meta-qcom-extras 使用的所有 ZIP 默认都包含一个占位 LICENSE 文件。Recipes 会在构建时根据此文件校验 CUST_LICENSE,因此必须 将其替换为您选择的对外许可证。
构建镜像
  • 运行 setup 脚本,将这些参数应用到构建环境中。
  • 使用 kas 构建软件镜像。您可以根据机器和发行版 的组合来定义构建目标。

相关主题