Skip to main content

简介

本文提供从源代码构建固件组件并将其集成到 Qualcomm BSP 镜像中的 概要说明。 固件源代码可供已签署所需协议的用户获取。如果您尚未获得访问权限,请创建 Qualcomm ID, 并查看 Working with Qualcomm 页面以了解有关帐户 验证和访问级别的更多信息。 从整体上看,您将学习以下内容:

支持的 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 元数据层 访问级别与固件发行版的映射 固件发行版与 git 仓库的映射
Qualcomm_Linux.SPF.2.0|AP|Standard|OEM|Qualcomm_Linux.SPF.2.0|AMSS|Standard|OEM| 发行版仅在 QCS6490 芯片组上受支持。

构建固件

  • 为固件源码创建一个工作区目录并进入该目录。 后续所有指令均假定该目录为工作目录。
  • 使用 固件源码映射 表中的发布标签和克隆 URL,从 Chipcode 克隆固件源码。
  • 根据所选的访问配置文件,将以下命令中的 <firwmare-root><distro-clone-directory> 替换为正确的值。
前提条件
  • 确保当前工作 shell 为 bash
    该命令的预期输出应为 bash。如果不是,请进入 bash shell。
  • 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包, 它用于从 IDL 文件生成头文件和源文件。
  • 为 AOP、Qualcomm® 可信执行环境 (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 关键和拆分固件二进制文件)
此步骤仅适用于 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 环境中可见:
  • 将 CUST_ID 值设置为 “213195”,用于 meta-qcom-extras 的编译。
  • 设置该层的对外(outbound)许可证及其校验和。该层中的每个配方都需要 CUST_LICENSECUST_LIC_CHKSUM
    • 客户必须在配方中指定合适的对外许可证,才能构建专有源码。
    • 客户应咨询自己的法律团队,以获取有关对外许可决策的指导。
    • 所选的对外许可证必须与 PKLA 兼容。
  • 以下值与源码仓库中已有的占位 LICENSE 文件相匹配。可将它们用于内部构建和评估,无需替换任何许可证文件。 请勿将这些值用于生产构建。任何部署都应定义你自己的许可证值。
  • 构建前请更新源码仓库中的许可证文件。meta-qcom-extras 使用的所有源码默认都包含一个占位 LICENSE 文件。配方会在构建时根据该文件验证 CUST_LICENSE,因此必须将其替换为你选择的对外许可证。 上游仓库无法直接修改。请将每个仓库镜像到你自己拥有的本地或远程服务器上,替换占位 LICENSE 文件,然后更新受影响配方中的 SRC_URI 变量,使其指向新的 URI。
上述同步和层设置步骤适用于所有开发板。但是, meta-qcom-extras 尚未为在 IQ-X7181 和 IQ-X5121 上加载自定义 固件二进制文件提供现成的配方(recipe);请改用 devtool 修改 上游配方,如下方”IQ-X7181”和”IQ-X5121”标签页所示。
固件设置
  • FWZIP_PATH 设置为包含固件 ZIP 文件的目录,以便在构建中包含本地编译的固件 zip 路径。
  • 覆盖 Linux-firmware 二进制文件 如果您想修改 Linux 固件二进制文件,请使用本节将它们替换到构建中。
    • meta-qcom-extras/ci/firmware.yml 创建一个包含以下内容的 kas 配置文件:
    • 然后使用 devtool 修改 linux-firmware recipe:
    • 解压固件压缩包:
    • 将固件 zip 文件的内容复制到 devtool 工作区
      当您覆盖 linux-firmware 中的固件时,还必须同时覆盖 Hexagon DSP 二进制文件。
  • 覆盖 DSPSO 二进制文件 如果您想修改 Hexagon DSP 共享对象二进制文件,请使用本节将 ADSP 和 CDSP 二进制文件替换到构建中。
    • hexagon-dsp-binaries 初始化一个 devtool 工作区:
    • 解压固件压缩包:
    • 将 ADSP 二进制文件复制到 devtool 工作区:
    • 将 CDSP 二进制文件复制到 devtool 工作区:
  • 覆盖启动固件二进制文件 如果您想修改启动关键固件二进制文件,请使用本节将它们替换到构建中。
    • 为启动固件 recipe 初始化一个 devtool 工作区:
    • 解压启动二进制文件压缩包:
    • 将启动二进制文件复制到 devtool 工作区:
      然后将所需的配置追加到 .bbappend 文件:
所有覆盖步骤完成后,后续的 Yocto 镜像构建将自动使用本地提供的固件二进制文件,而不是上游来源。构建镜像
  • 运行安装脚本,将这些参数应用到构建环境。
  • 使用 kas 构建软件镜像。您可以基于机器和发行版组合定义构建目标。

相关主题