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 桌面版流程,但以下三个环节需要特别注意:

  1. 磁盘分区: 建议为 / 根分区分配至少 150 GB,为 /home 分配 100 GB 以上。AOSP 完整编译需要约 250 GB 空闲空间。
  2. 软件源选择: 安装时选择“中国”或“阿里云”镜像源,可大幅提升后续 apt 包下载速度。
  3. 第三方驱动: 如果宿主机使用 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 开发环境中各工具与系统组件之间的依赖关系和数据流。

Camera HAL 开发环境工具链架构 Ubuntu 22.04 LTS 宿主机 git / repo build-essential / cmake python3 / pip adb fastboot udev / minicom Android 目标设备(手机 / EVB 板) Camera HAL 3.x 实现 V4L2 / ISP 驱动接口 说明:箭头表示数据流或控制流方向;所有工具均运行在宿主机上,通过 USB 与目标设备通信

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