Android HAL层驱动开发入门 - 第3节

3.1 Ubuntu 系统准备

Android HAL 开发环境首选 Ubuntu 长期支持(LTS)版本。当前推荐 Ubuntu 22.04 LTS 或 Ubuntu 20.04 LTS,这两个版本对 AOSP(Android Open Source Project)主分支及主流芯片厂商 BSP 包兼容性最好。

3.1.1 系统安装与基础配置

  • 磁盘空间:至少预留 250 GB 空闲空间(完整 AOSP 源码 + 编译产物约需 150~200 GB)。
  • 内存与 CPU:建议 16 GB 以上内存,8 核以上 CPU;编译时多核并行可大幅缩短时间。
  • 文件系统:推荐 ext4,避免使用 NTFS/FAT32(大小写敏感问题会导致编译失败)。
  • Shell 环境:默认 bash 即可,也可使用 zsh + oh-my-zsh 提升效率。
避坑提示:不要在 Windows WSL1 下直接编译 AOSP,WSL2 虽然可用但 I/O 性能较差,建议原生 Ubuntu 或虚拟机(VMware/VirtualBox)分配足够资源。

3.1.2 必备软件包安装

执行以下命令安装编译 AOSP 所需的依赖包:

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
关键说明:不同 Android 版本对 Python 版本有要求——Android 8~12 需要 Python 2.7 + Python 3.x;Android 13+ 仅需 Python 3。建议安装 python-is-python3 软链接。
Ubuntu 系统准备流程 安装 Ubuntu 22.04 LTS 配置磁盘 & 内存 安装依赖软件包 验证环境 配置 Git & SSH 安装 repo 工具 建议使用 SSD + 至少 16 GB 内存,编译速度提升 3~5 倍

3.2 Android 源码下载与编译环境配置

3.2.1 安装 repo 工具

repo 是 Google 基于 Git 开发的仓库管理工具,用于管理 AOSP 数百个 Git 子仓库。

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# 将 ~/bin 加入 PATH
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

3.2.2 下载 AOSP 源码

以 Android 14(android-14.0.0_r30)为例:

mkdir ~/aosp && cd ~/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r30
repo sync -j$(nproc)  # 根据网络情况,首次同步可能需要 2~6 小时
网络注意事项:国内开发者建议使用清华镜像或中科大镜像加速下载。在 repo init 时将 manifest URL 替换为 https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest。

3.2.3 编译环境配置

进入源码根目录,执行以下命令初始化编译环境:

source build/envsetup.sh
lunch aosp_arm64-eng  # 选择目标设备与编译类型

编译类型说明:

类型适用场景特性
eng开发调试包含调试工具,ro.debuggable=1,默认 root
userdebug驱动/应用调试接近 user 版本,但可 root 并包含调试符号
user正式发布无 root 权限,性能最优,无调试工具

执行编译:

make -j$(nproc) 2>&1 | tee build.log
# 编译完成后,产物位于 out/target/product/<device>/
AOSP 源码下载与编译流程 安装 repo repo init repo sync source envsetup lunch 选择目标 make -jN 国内用户建议使用清华/中科大镜像,避免网络超时

3.3 交叉编译工具链安装

HAL 驱动开发通常需要独立的交叉编译工具链,用于在宿主机(x86_64)上编译目标设备(ARM/ARM64)的驱动模块。AOSP 自带工具链,但部分厂商 BSP 或内核模块开发需要单独安装。

3.3.1 AOSP 自带工具链

执行 source build/envsetup.sh 后,AOSP 会自动将 prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin 等路径加入 PATH。可直接使用 aarch64-linux-android-gcc 编译 ARM64 内核模块。

3.3.2 独立安装 Linaro 工具链(推荐)

对于独立内核模块或 HAL 库开发,建议使用 Linaro 提供的交叉编译器:

# 下载 ARM64 工具链
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
# 设置环境变量
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
aarch64-linux-gnu-gcc --version

3.3.3 工具链对比

工具链来源适用场景优点缺点
AOSP prebuilts与 AOSP 联合编译版本匹配,无需额外下载版本固定,更新慢
Linaro独立内核/驱动模块更新及时,社区支持好需手动配置路径
芯片厂商 BSP特定 SoC 平台针对芯片优化,包含专有库闭源,需签署 NDA
交叉编译工具链架构 宿主机 (x86_64) 交叉编译器 aarch64-linux-gnu-gcc 目标设备 (ARM64) Android HAL / .ko 输出 ELF 文件,目标架构为 aarch64

3.4 adb 与 fastboot 工具使用

adb(Android Debug Bridge)和 fastboot 是 Android 驱动开发中最常用的调试与刷机工具。AOSP 编译后会生成这两个工具,也可单独安装。

3.4.1 安装 adb & fastboot

# 方法一:使用 AOSP 编译产物
cd ~/aosp
source build/envsetup.sh
lunch aosp_arm64-eng
make adb fastboot  # 仅编译这两个模块

# 方法二:apt 安装(版本可能较旧)
sudo apt install android-tools-adb android-tools-fastboot

3.4.2 adb 常用命令

命令功能示例
adb devices列出已连接的设备adb devices
adb shell进入设备 shelladb shell
adb push/pull文件传输adb push hal_module.so /vendor/lib/hw/
adb logcat查看日志adb logcat -s HAL:V
adb reboot重启设备adb reboot bootloader

3.4.3 fastboot 常用命令

命令功能示例
fastboot devices列出 fastboot 模式设备fastboot devices
fastboot flash刷写分区fastboot flash boot boot.img
fastboot boot临时启动内核/镜像fastboot boot kernel.img
fastboot oem unlock解锁 bootloaderfastboot oem unlock
调试技巧:HAL 开发中,使用 adb root 获取 root 权限,然后 adb remount 将系统分区挂载为可读写,即可直接替换 HAL 库文件进行测试,无需每次刷机。
adb & fastboot 工作流程 开发主机 adb USB 调试 Android 设备 正常启动模式 fastboot Bootloader 模式 Bootloader 刷写/解锁模式 HAL 开发流程:adb push 库 → adb shell 重启服务 → logcat 验证

3.5 环境验证清单

完成上述步骤后,建议执行以下验证,确保环境可用:

  1. Ubuntu 版本:lsb_release -a 确认为 20.04 或 22.04 LTS。
  2. 磁盘空间:df -h ~ 确认剩余空间 > 100 GB。
  3. repo 工具:repo --version 正常输出版本号。
  4. AOSP 编译:执行 make -j4 编译一个小目标(如 make adb)无报错。
  5. 交叉编译器:aarch64-linux-gnu-gcc --version 输出版本信息。
  6. adb 连接:连接 Android 设备后 adb devices 显示设备序列号。
  7. fastboot 连接:设备进入 bootloader 后 fastboot devices 显示设备。
推荐实践:将上述验证步骤写入脚本 check_env.sh,每次搭建新环境时一键运行,避免遗漏关键组件。