标签 QCS8250 下的文章

大环境准备

操作系统

高通官方推荐比较老的 Ubuntu 14.04, 18.04 LTS等,但我不信邪,偏用 Debain 12.

软件包

系统软件包

  1. Python2 & pip2
    安装 Python 2.7 并设置 /usr/bin/python 为 python2
    首先引入 Debian 11 的主软件源,并执行 sudo apt update
    随后安装 python2python2-minimal 包。

    sudo rm -f /usr/bin/python
    sudo ln -s /usr/bin/python2 /usr/bin/python

    安装 pip2 并安装 python2 相关库。
    (如果有 pip3,则修改 pip 链接到 pip2)

    pip install pycryptodome future six
  2. OpenSSL 1.1.1
    Debian 12 自带 OpenSSL 3,而且版本会越来越新,因此我们需要手动编译安装 OpenSSL 1.1.1,并且将其设置为默认 openssl 命令的执行程序。
    2.1. 编译 OpenSSL 1.1.1

    wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
    tar zxf openssl-1.1.1w.tar.gz
    cd openssl-1.1.1w
    ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
    make -j$(nproc)
    make install

    2.2. 链接并设置为默认程序

    sudo mv /usr/bin/openssl /usr/bin/openssl3
    sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl1
    sudo ln -s /usr/bin/openssl1 /usr/bin/openssl
  3. GCC 9 & g++ 9
    由于高通的 Bootloader (XBL) 源码中包含 EDK II 项目代码,又由于 EDK II 旧版的部分代码没有修复在新版 GCC 编译器上出现的问题,因此除非手动修改部分程序(如 GetFds)的代码,否则我们还需要安装 GCC 9 和 g++ 9。

    sudo apt update && sudo apt install gcc-9 g++-9

高通软件包

编译高通的系统组件还需要高通自己修改的 LLVM 和 Linaro GCC 等工具,通常情况我们只需要保证下载的工具的主要版本(X.Y)匹配即可,对于小的 Rev 则可以选用最新的。

  1. 下载 Linaro GCC 4.9-2014.07
    此工具可以直接在 Linaro 网站上下载。
  2. 下载 Qualcomm Snapdragon LLVM Compiler for Linux
    我们需要下载 v4.0.17 和 v8.0.3 两个版本,高通要求其私有 Linux 软件包只能通过 QPM3 下载,由于 QPM3 无法在 Debian 12 上正常运行(截至2025年1月17日),所以我们可以直接在高通 QCS8250 的产品页面上,登录高通账号下载。

也可以在 Ubuntu 18.04 中安装 QPM3,登录高通账号下载安装后手动导出。

​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍​‌‌​​‌​‌​​‌​​‌‌‌‍​‌‌​‌‌‌‌‌‌‌​​‌​‌‍​​‌‌​​​‌​​​​​​​‍​​‌‌​‌​‌‌​‌​​​​‍​​‌‌‌​​‌‌‌‌‌‌‌​‍​‌​‌‌​​‌‌‌‌‌​‌​‍‌‌​‌‌‌‌‌‍‌​‌‌‌‌​‌‍‌​‌​‌‌​​‍‌​‌​‌‌‌‌‍‌‌​‌‌‌‌‌‍​​​​​​​‌‌‌​‌​​‌‍​‌‌‌​‌​​​​‌​‌‌‌​‍​​‌‌‌​​‌‌‌‌‌​​​‍​‌​‌‌​​‌​‌​‌​​​‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​‌‌​​‌‌‍‌​​‌‌​‌​‍‌​​​‌​​‌‍‌​​‌​‌‌​‍‌​‌​​​​​‍‌​‌‌​​‌​‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​​‌​​‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​​‌​‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​​‌​​‌‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​‌​‌​​‍‌​​​​‌‌​‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌‌​‌​​​‌‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​‌​​​‌‌‍‌​​​‌‌‌​‍‌​​​‌​‌​‍‌​​‌‌‌‌​‍‌​​‌​​‌‌‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​​‌​​‌​‍‌‌​‌​​‌​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌​​​‌​​‌‍‌​​‌​‌‌​‍‌​​‌‌‌​​‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌​​​‌​​‌‍‌​​‌‌​‌​‍‌​​‌​​‌‌‍‌​​‌​​​​‍‌​​​‌‌‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌​‌​​​‌‌‍‌​​‌‌‌​‌‍‌​​​‌​‌​‍‌​​‌​‌‌​‍‌​​‌​​‌‌‍‌​​‌‌​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​‌‌​​​‍‌​​​‌​‌​‍‌​​‌​‌‌​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​​‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌‌​‌​​‌​‍‌​​​‌‌‌​‍‌​​​‌​‌​‍‌​​‌‌‌‌​‍‌​​‌​​‌‌‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​​‌​​‌​‍‌‌​‌​​‌​‍‌​​​‌‌​​‍‌​​‌​​​​‍‌​​‌‌‌​​‍‌‌​‌​​‌​‍‌​​‌‌‌​‌‍‌​​​‌‌​​‍‌​​​‌‌‌‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

下载后解压到特定目录,并记住每个版本文件夹的路径。(如/home/levi/toolchains/qualcomm-sd-llvm-4.0.17等)

编译板支持包 BSP

登录高通 ChipCode 门户,在 Product 中选择产品 QCS8250,选择 qcs8250-la-2-0_ap_standard_oem,进入页面后复制仓库地址。提前设置 http.followRedirectstrue,随后使用 git clone 下载。

需要注意,1.x本和 2.0 的包目录结构不一样,会在外面套一个用于分类软件包的文件夹。例如在 1.x 版本的 BSP 中,直接就是 boot_images/ 文件夹,但在 2.0 中会变成 BOOT.XF.3.2/boot_images/

p.s. 高通就把 Board Support Package 翻译成“板支持包”。

环境准备

  1. Bootloader (XBL) 编译环境准备
    高通在 QCS8250 的 2.0 版本的 BSP 中引入了 UEFI (EDK II),所以编译 XBL 的过程中也编译了 EDK II 的部分源码,因此需要确保 EDK II 的 BaseTools 被正确编译。(否则编译过程会报错 7000,提示无法调用 minigzip)
    执行命令:

    cd <workspace>/qcs8250-la-2-0_ap_standard_oem/BOOT.XF.3.2/boot_images/BaseTools
    make

    需要注意,编译时脚本会自动设置 Sectools 签名策略为 MULTIPLE_DEFAULT_SIGN,不需要再手动设置 Sectools 签名策略。Sectools 的签名策略有下面几个选项:
    DEFAULT_SIGN, DEFAULT_INTEGRITY_SIGN_ATTR, DEFAULT_SIGN_UPDATE_UNSIGN, DEFAULT_UNSIGN, DEFAULT_SUBFOLDER_SIGN, DEFAULT_SUBFOLDER_INTEGRITY_SIGN_ATTR, SUBFOLDER_MULTIPLE_SIGN_AND_ENCRYPT, MULTIPLE_DEFAULT_SIGN, MULTIPLE_DEFAULT_SIGN_ENCRYPT
    如果需要设置的话,直接使用 export 命令设置任意一个策略为 1 就好了,需要注意的是,每次只有一个签名策略被启用,不能同时有两个以上。

还需要注意,如果没有安装和使用 OpenSSL 1.1.1 版本,编译过程会因为 Sectools 失败而中止。

QcomPkg/toolchainconfig.json 中修改 CLANG40CLANG80LINUX 项的值为你安装的 Qualcomm Snapdragon LLVM for Linux 对应的 4.0.X8.0.3 的目录。

编译

使用高通提供的用户手册内的编译命令进行编译即可。为防止泄密,不贴出编译命令,毕竟高通给的所有文件里都有水印,还写着“Confidential - May Contain Trade Secrets”(笑)。

困惑和问题

  1. 观察 Bootloader (XBL) 的编译过程发现,在固件签名时,似乎使用的是默认的 secimagev3.xml 配置文件,为什么不用 QCS8250 (SM8250) 的专用配置文件 sm8250_secimage.xml 呢?