2. 开发环境搭建

Android BSP 开发的第一步不是写代码,而是把“能编译出镜像”的环境搭起来。高通平台的 BSP 源码体量巨大,一个完整的 Android + QCOM 基线往往在 100GB 以上,涉及数百个 Git 仓库,因此它既不是简单 git clone 能拿下来的,也不是随便一台笔记本能编得动的。本节围绕四件事展开:从 CodeAurora 获取源码、用 repo 管理多仓库、配置编译服务器、安装必备软件包。

一、CodeAurora 与源码获取方式

CodeAurora Forum(CAF)是高通对外开放的源码托管平台,地址为 https://source.codeaurora.org。高通把 Android BSP 拆成两类内容:一类是公开的 CAF 仓库(如 kernel/msm、platform/vendor/qcom-opensource/...),另一类是需授权才能访问的专有仓库(如 vendor/qcom/proprietary)。公开部分可直接匿名拉取,专有部分需要高通账号并绑定到具体项目后,通过 git:// 或 https:// 带凭据访问。

实际项目中,源码通常由高通或方案商以“发布包”形式提供,包含一个 manifest.xml(repo 清单)和若干 .git 仓库。获取方式有两种:

  • 方式 A:repo init 直接拉取——适用于公开基线,如 repo init -u https://source.codeaurora.org/quic/la/platform/manifest -b release。
  • 方式 B:解压发布包 + repo sync——适用于含专有仓库的项目,先解压厂商提供的 *.tar.gz,再在已有 .repo 目录上执行 repo sync 补齐。

无论哪种方式,最终目录结构都应包含 .repo/、build/、kernel/、device/、vendor/、platform/ 等顶层目录。判断源码是否完整,可检查 .repo/manifest.xml 是否存在、repo status 是否无报错。

二、repo 工具的使用

repo 是 Google 为 Android 多仓库管理写的 Python 工具,本质是对 git 的封装。它通过 manifest.xml 描述“哪些仓库、放在哪个路径、用哪个分支”。常用命令如下:

# 1. 安装 repo(放到 PATH 中)
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

# 2. 初始化,指定 manifest 仓库与分支
repo init -u https://source.codeaurora.org/quic/la/platform/manifest -b release

# 3. 同步全部仓库(-j 并发数,-c 只拉当前分支)
repo sync -j8 -c --no-tags

# 4. 查看状态与分支
repo status
repo branches
repo forall -c 'git log -1 --oneline'   # 批量查看各仓库最新提交

几个关键点:repo sync 首次执行耗时长,建议加 -j8 以上并发;-c 只同步当前分支可显著减少下载量;--no-tags 避免拉取大量标签。若中途失败,重复执行 repo sync 即可续传。修改代码后,用 repo forall -c 'git diff' 可批量查看所有仓库改动,repo upload 用于向 Gerrit 提交评审。

CodeAurora 源码获取与 repo 多仓库管理流程 CodeAurora 公开仓库 kernel/msm platform/manifest qcom-opensource/* 匿名可拉取 专有仓库 vendor/qcom/proprietary 部分 device 配置 需高通账号授权 或厂商发布包 repo 工具 repo init -u ... -b release repo sync -j8 -c repo status / branches repo forall -c 'git diff' manifest.xml 驱动 本地源码树(~120GB) .repo/ build/ kernel/ device/ vendor/ platform/ out/ 编译输出(后续生成) 校验:.repo/manifest.xml 存在 repo status 无报错 编译服务器配置要点 硬件 ≥16 核 / 32GB 内存 ≥500GB SSD 空间 系统 Ubuntu 20.04 LTS ext4 / 大小写敏感 必备软件包 git / python3 / openjdk flex bison gcc g++ make 环境变量 PATH 含 ~/bin JAVA_HOME 指向 JDK

三、编译服务器配置

高通 BSP 编译对机器要求较高。以 Android 13 + 骁龙 8 系基线为例,官方推荐至少 16 核 CPU、32GB 内存、500GB 以上 SSD 可用空间;若开启 ccache 或保留多套 out/,建议 1TB。内存不足 16GB 时,soong 与 ninja 并行编译极易触发 OOM,表现为 Killed 或 signal 9。

操作系统推荐 Ubuntu 20.04 LTS(64 位)。文件系统必须是大小写敏感且支持符号链接的 ext4,不要放在 NTFS 或挂载的共享目录上,否则会出现 Permission denied 或 Invalid argument。若使用虚拟机,需开启嵌套虚拟化并分配足够内存。

环境变量方面,把 ~/bin 加入 PATH 以便直接调用 repo;设置 JAVA_HOME 指向 Android 要求的 JDK(如 Android 13 用 OpenJDK 11);USE_CCACHE=1 与 CCACHE_DIR 可加速重复编译。示例:

export PATH=~/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export USE_CCACHE=1
export CCACHE_DIR=~/.ccache
ccache -M 50G

四、必备软件包安装

在 Ubuntu 上,先更新源,再一次性安装编译依赖。以下命令覆盖了 AOSP 与高通 BSP 常见依赖:

sudo apt update
sudo apt install -y git-core gnupg flex bison build-essential zip curl \
  zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev \
  libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \
  python3 python3-pip openjdk-11-jdk rsync bc ccache

安装完成后,用 git --version、python3 --version、java -version、ccache -V 逐项确认。若 repo 报 python: command not found,说明系统只有 python3,可创建软链接 sudo ln -s /usr/bin/python3 /usr/bin/python,或使用较新版本 repo(已兼容 python3)。

首次 repo sync 建议在网络稳定时段执行,并保留 .repo 目录备份。若同步中断,直接重跑 repo sync 即可续传,无需删除已下载内容。
不要用 root 身份执行 repo init 与 repo sync,否则生成的 .repo 文件属主为 root,后续普通用户操作会频繁报权限错误。若已误操作,可用 sudo chown -R $USER:$USER .repo 修复。

完成以上四步后,可用一条最小验证命令确认环境可用:进入源码根目录执行 source build/envsetup.sh,再执行 lunch 查看可选目标列表。若能看到类似 qssi-userdebug、msmnile-userdebug 的选项,说明源码、repo、编译服务器与依赖包均已就绪,可以进入后续的编译与烧录环节。