2. 开发环境准备:Ubuntu 22.04 LTS 系统安装与必要软件包
Camera HAL 层开发对宿主机的操作系统环境有较高要求。Ubuntu 22.04 LTS 是目前与 Android 源码(AOSP)主线及 Qualcomm / MediaTek 平台 BSP 兼容性最好的 Linux 发行版之一。本章将引导你完成从系统安装到核心工具链部署的全过程,确保后续编译、烧录、调试环节零阻塞。
2.1 为什么选择 Ubuntu 22.04 LTS
下表对比了常见 Linux 发行版在 Camera HAL 开发场景下的关键差异,帮助你理解选择 Ubuntu 22.04 的理由。
| 发行版 | GCC 默认版本 | Python 默认版本 | AOSP 官方支持 | 驱动包兼容性 | 推荐度 |
|---|---|---|---|---|---|
| Ubuntu 22.04 LTS | 11.2 | 3.10 | ✅ 完全支持 | ✅ 最佳 | ⭐⭐⭐⭐⭐ |
| Ubuntu 20.04 LTS | 9.4 | 3.8 | ✅ 支持(需升级工具链) | ✅ 良好 | ⭐⭐⭐⭐ |
| Debian 11 | 10.2 | 3.9 | ⚠️ 部分支持 | ⚠️ 需手动适配 | ⭐⭐⭐ |
| Fedora 36 | 12.2 | 3.10 | ⚠️ 社区补丁 | ⚠️ 驱动签名问题 | ⭐⭐ |
💡 版本选择建议: 如果你正在使用 Qualcomm 或 MediaTek 的 BSP,请务必确认其官方文档中标注的 Ubuntu 版本。绝大多数 2023–2025 年的 BSP 均以 Ubuntu 22.04 作为第一验证环境。
2.2 Ubuntu 22.04 LTS 系统安装要点
安装过程遵循标准 Ubuntu 桌面版流程,但以下三个环节需要特别注意:
- 磁盘分区: 建议为
/根分区分配至少 150 GB,为/home分配 100 GB 以上。AOSP 完整编译需要约 250 GB 空闲空间。 - 软件源选择: 安装时选择“中国”或“阿里云”镜像源,可大幅提升后续
apt包下载速度。 - 第三方驱动: 如果宿主机使用 NVIDIA 显卡,安装时勾选“安装第三方图形驱动”,避免后续编译时出现 OpenGL 兼容性问题。
⚠️ 避坑提醒: 不要使用 WSL1 或 WSL2 作为 Camera HAL 的主开发环境。WSL 的 USB 设备透传和内核模块加载能力有限,无法支持
fastboot flash 和 adb 设备枚举的完整功能。建议使用原生 Ubuntu 双系统或独立物理机。
2.3 必要软件包安装
系统安装完成后,打开终端,执行以下命令安装 Camera HAL 开发所需的核心工具链。
2.3.1 基础编译工具
sudo apt update
sudo apt install -y \
build-essential \
cmake \
git \
repo \
python3 \
python3-pip \
python3-venv \
ninja-build \
pkg-config \
libssl-dev \
libncurses5-dev \
flex \
bison \
gperf \
libxml2-utils \
xsltproc \
zip \
unzip \
curl \
wget
2.3.2 调试与烧录工具
sudo apt install -y \
adb \
fastboot \
minicom \
screen \
usbutils \
udev
2.3.3 版本管理工具验证
安装完成后,使用以下命令验证关键工具的版本:
git --version
repo version
cmake --version
python3 --version
adb --version
fastboot --version
预期输出示例:
git version 2.34.1
repo version v2.32
cmake version 3.22.1
Python 3.10.12
Android Debug Bridge version 1.0.41
fastboot version 33.0.3
2.4 开发环境整体架构
下图展示了 Camera HAL 开发环境中各工具与系统组件之间的依赖关系和数据流。
2.5 udev 规则配置(关键步骤)
为了让 adb 和 fastboot 在非 root 用户下正常识别设备,必须配置 udev 规则。创建文件 /etc/udev/rules.d/51-android.rules:
sudo vim /etc/udev/rules.d/51-android.rules
写入以下内容(覆盖主流厂商的 USB VID):
# Google (Pixel / Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
# Qualcomm
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
# MediaTek
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", GROUP="plugdev"
# Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
# Xiaomi
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", MODE="0666", GROUP="plugdev"
# OnePlus / OPPO
SUBSYSTEM=="usb", ATTR{idVendor}=="22d9", MODE="0666", GROUP="plugdev"
保存后执行:
sudo udevadm control --reload-rules
sudo udevadm trigger
🔍 验证方法: 将 Android 设备通过 USB 连接到电脑,开启“开发者选项”和“USB 调试”,执行
adb devices。如果输出显示 List of devices attached 且设备编号不为空,则 udev 规则生效。
2.6 环境验证清单
完成上述所有步骤后,使用下表逐项确认环境就绪状态:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| git 可用 | git --version |
≥ 2.34 |
| repo 可用 | repo version |
显示版本号 |
| cmake 可用 | cmake --version |
≥ 3.22 |
| python3 可用 | python3 --version |
3.10.x |
| adb 识别设备 | adb devices |
显示设备序列号 |
| fastboot 识别设备 | fastboot devices |
显示设备序列号 |
| udev 规则生效 | ls -l /dev/bus/usb/ |
设备文件权限为 0666 |