高通学习5--高通SDK结构(TODO)

(TODO)

在高通的开发生态里,从确定硬件基线(比如你提到的 Gen 2 平台,或者你正在碰的 AR1/AR1+ Gen 1 平台)到成功把整套 AOSP + QKI 源码拉到你的本地服务器,需要通过高通官方的 Manifest(清单文件) 体系来操作。

高通的代码并不是一个庞大的单一 Git 仓库,而是由数百个独立的 Git 子仓库组合而成的。拉取代码的核心工具是谷歌的 repo

以下是标准的、企业级的完整拉取代码基线全流程:

1. 核心前置:获取高通的"暗号"(基线版本号)

高通的每一代芯片、每一个 Android 版本都有一个行业内通行的"接头暗号",叫做 Tag(标签)Chipset Code

在拉代码前,你必须拿到这个 Tag。通常有两个正规渠道:

  • 渠道 A(商业授权) :去高通的 CreatePoint 官网,根据你的芯片型号(如 AR1+ 对应的 SG8125 / AR1 或手机端的 SM8550 Gen 2),查找最新的 Release Note 。里面会写明当前的软件基线,例如:LA.UM.14.9.c1(Linux Android, Android 14, 某个具体的分支版本)。

  • 渠道 B(开源白嫖) :如果你没有商业账号,直接去我们上一轮聊到的 CodeLinaro 官网的分支列表 网页里,搜索你的芯片代号或 Android 14 关键字,能直接看到公开的、最新的公开 Tag(例如 LA.UM.14.xxxx)。

2. 第一步:环境准备(安装 Repo 工具)

确保你的 Ubuntu 编译服务器上安装了谷歌的 repo 脚本:

Bash

复制代码
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

3. 第二步:初始化 Repo 仓库(瞄准清单文件)

高通的代码清单文件托管在 CodeLinaro 上。你需要用 repo init 去绑定这个清单仓库。

💡 核心命令:

Bash

复制代码
# 1. 创建你的工作目录
mkdir -p ~/qcom_gen2_aosp14
cd ~/qcom_gen2_aosp14

# 2. 初始化 repo,-b 后面跟的是你查到的高通官方精准分支名,-m 后面是清单文件名
repo init -u https://git.codelinaro.org/clo/la/la/manifest.git \
          -b release/LA.UM.14.9.c1 \
          -m AU_LINUX_ANDROID_LA.UM.14.9.C1.XM.XX.RXX.xml

注意-b 后面指定的是高通大版本的 Release 分支,-m 后面的 .xml 文件则是高通精确到某一天发版的"快照清单"(包含了当时几百个 Git 仓库各自最稳定的 Commit ID)。

4. 第三步:全面开拉(多线程同步)

初始化完成后,本地只会生成一个隐藏的 .repo/ 目录。接下来才是真正耗费硬盘和带宽的阶段:

Bash

复制代码
# 开启 8 个线程(根据你的服务器带宽和CPU核心数调整)并发下载
repo sync -j8 -c --no-tags --fail-fast

参数内幕:

  • -c:只拉取当前指定分支(Current Branch)的代码,不拉取历史无用分支,能极大节省几十个G的硬盘空间

  • --no-tags:不下载复杂的 Git Tags,进一步加快下载速度。

  • --fail-fast:遇到某个不重要的仓库报错时立刻跳过或报错,方便你及时处理。

由于整套基线包含 AOSP 14 官方源码 + 高通私有开源组件(如 msm_drm 驱动等),总大小通常在 150GB ~ 250GB 之间,根据网速,通常需要挂机拉几个小时。

5. 第四步:把高通闭源的私有"固件包"补进去

这时候你拉出来的代码,其实还只是"开源和半开源部分 "(也就是能编译出 msm_drm.ko、Android 核心镜像的代码)。

但是高通 Gen2 / AR1 平台里最核心的 Hexagon DSP 编译好的二进制固件(如 ADSP/CDSP 的算法包、Modem 射频固件、GPU的闭源 Lib 库) 是绝对不放在公共 Git 上的。

  • 操作手法 :你必须从高通 CreatePoint 网站上,下载对应这个 Tag 的闭源私有包(通常叫 Proprietary Release Package,一堆 .tar.gz 压缩包)。

  • 怎么做 :把它们解压到你的代码根目录下,它们通常带有一个 install.sh 脚本。运行它,它会自动把这些闭源的驱动、固件精准地释放到 vendor/qcom/proprietary/ 目录下。

🏁 终点线:验证基线并准备拉起编译

当你完成了 repo sync 并且释放了闭源 proprietary 包后,你的代码基线就彻底完全体了。你可以直接运行高通的标准全量编译命令来验证:

Bash

复制代码
# 1. 初始化高通编译环境
source build/envsetup.sh

# 2. 选择你的硬件平台单板配置(以 gen2 或 ar1 对应的组合为例)
lunch qssi-userdebug  # 或者是厂商特定的 target 名,如 lunch kalama-userdebug

# 3. 开始编译整个 SoC 固件
./build.sh -j16

只要整套代码能顺利跑完编译并吐出 dtbo.img, vendor.imgboot.img,就说明你的这条大基线已经完美躺在你的服务器里,接下来就可以在这个基础上,大刀阔斧地去修改你的显示驱动和总线配置了!

基于 6.1-android14-qki 内核做多芯片平台的唤醒和驱动移植,你的思维可以直接切换到现代高通 Android 手机/穿戴的标准底层套路

  1. 别找 .dts 源码了,找 dtbo 源码 : 在 QKI 统一内核架构下,主内核(GKI/QKI image)是完全闭源死掉的,不准动。你所有的物理硬件改动(比如调 I2C 传感器、配 GPIO 镜腿触控引脚),都必须写在独立的产商设备树插件(Device Tree Blob Overlay) 仓库里,最后编译成 dtbo.img 强行合入。

  2. 驱动全部模块化(KMI 约束) : 你的外设驱动(比如新屏幕的驱动、外挂 MCU 的总线驱动)不能直接编译进内核(obj-y 废了),必须全部编译成独立的内核模块 .ko 文件(obj-m),并在开机时通过 init.rcvendor_dlkm 分区动态加载。

相关推荐
是隼人8 分钟前
buuctf-pwn wustctf2020_closed(文件描述符)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
励志不掉头发的内向程序员13 分钟前
【LibreCAD 2D架构】从两个坐标到图形实体:RS_ActionDrawLine如何创建RS_Line
开发语言·c++·qt·学习·系统架构
sunshine22 girl23 分钟前
Java学习一 环境配置1 安装JDK,配置环境变量
java·开发语言·学习
我爱cope35 分钟前
【计算机网络 | 传输层5:TCP 如何实现可靠传输?滑动窗口、累计确认与重传机制】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
zfoo-framework43 分钟前
kotlin技术栈各种 学习文档
学习
是隼人1 小时前
buuctf-pwn wdb_2018_3rd_soEasy(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
mykj15519 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手10 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
~kiss~11 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
HugoStudio_SWAN11 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活