标签 骁龙 下的文章

大环境准备

操作系统

高通官方推荐比较老的 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 呢?