第2章:开发环境搭建

Ubuntu环境配置

做车机HAL开发,环境搭建是第一道坎。我见过太多人卡在这一步,其实没那么玄乎。

我个人习惯用Ubuntu 20.04 LTS。为什么?因为AOSP官方对它的支持最成熟。你非要用22.04也行,但有些依赖包得自己折腾,我踩过这个坑。

装好系统后,第一件事是换源。别用默认源,慢得让人抓狂。我一般用清华或中科大的镜像站。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(Ubuntu 20.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

然后安装必备工具包。这里有个坑——千万别一股脑全装,有些包会冲突。我列个清单,都是经过验证的:

包名 用途 备注
git 版本控制 必须
python3 脚本支持 建议3.8+
openjdk-8-jdk AOSP编译 别用11,会出问题
flex bison 词法/语法分析 编译内核需要
libssl-dev 加密库 缺了编译报错
注意:我曾经因为装了openjdk-11,编译AOSP时卡了整整两天。后来发现是JDK版本不兼容。老老实实用8吧,别折腾。

AOSP源码下载

源码下载是重头戏。AOSP代码量巨大,动辄几十G。你想想看,光git仓库就有几百个。

我推荐用repo工具来管理。repo是Google专门为AOSP设计的,说白了就是一堆git仓库的管家。

# 安装repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# 初始化仓库
mkdir ~/aosp
cd ~/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r32

这里有个小技巧。我建议用 -b 参数指定分支。车机开发一般选Android 12或13的稳定分支。别用master,那是给Google内部用的,天天变。

同步代码时,加上 -j4 参数。为什么是4?因为网络带宽才是瓶颈,CPU再多也没用。我曾经用 -j16 跑,结果路由器直接挂了。

repo sync -j4 -c --no-tags

加 --no-tags 可以省不少空间。标签信息对车机开发来说基本没用。

经验之谈:如果网络不稳定,可以分多次同步。repo支持断点续传。我第一次下AOSP时断了三次,每次重新跑repo sync就行,不会从头开始。

交叉编译工具链安装

车机HAL开发,交叉编译是基本功。为什么?因为你的代码最终要跑在ARM架构的芯片上,而开发机是x86架构。

我常用的工具链有两种:

  1. GCC交叉编译器 - 传统方案,稳定可靠
  2. Clang/LLVM - Google推荐,AOSP默认用这个

对于车机场景,我建议两个都装。GCC用来做底层BSP调试,Clang用来编译HAL层代码。

# 安装GCC交叉编译器
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

# 验证安装
arm-linux-gnueabihf-gcc --version

# AOSP自带Clang,在prebuilts目录下
cd ~/aosp
ls prebuilts/clang/host/linux-x86/

嗯,这里要注意。AOSP自带的Clang版本可能比较新,如果你的芯片厂商提供的BSP比较老,可能会有兼容性问题。我遇到过好几次,编译出来的so库在目标板上跑不起来。

解决办法是:用芯片厂商提供的工具链。比如高通平台用qnx工具链,NXP平台用Yocto生成的工具链。

核心要点:交叉编译工具链的选择,取决于你的目标芯片。别盲目用最新的,稳定第一。车机产品对稳定性要求极高,你总不想因为工具链问题导致OTA失败吧?

最后,配置环境变量。我习惯把工具链路径加到 ~/.bashrc 里:

export PATH=$PATH:~/aosp/prebuilts/clang/host/linux-x86/clang-r416183b/bin
export CROSS_COMPILE=aarch64-linux-android-
export CC=clang
export CXX=clang++

配置完记得 source ~/.bashrc 让它生效。

好了,环境搭建就这些。说白了就是三步:配好Ubuntu、拉下AOSP、装对工具链。别被那些花里胡哨的教程吓到,车机开发没那么玄乎。下一章我们开始写第一个HAL模块,到时候你就知道这些准备工作的价值了。