保姆级教程:在Ubuntu 18.04上从零编译瑞芯微RK3568的Android 11源码
第一次接触Android系统移植的开发者,面对庞大的源码和复杂的编译环境往往会感到无从下手。本文将手把手带你完成从Ubuntu系统配置到最终镜像生成的全过程,特别针对RK3568开发板进行优化适配。不同于简单的操作记录,我们会深入每个步骤背后的原理,并分享实际项目中积累的调试技巧。
1. 环境准备与基础配置
1.1 硬件与系统要求
在开始之前,请确保你的开发机满足以下最低配置要求:
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 内存 | 16GB | 32GB+ |
| 存储 | 300GB SSD | 1TB NVMe |
| CPU | 4核 | 8核+ |
| 系统 | Ubuntu 18.04 64位 | Ubuntu 20.04 LTS |
为什么选择Ubuntu 18.04?这是Google官方推荐的AOSP编译环境,对新老硬件都有较好的兼容性。如果你使用其他Linux发行版,可能会遇到依赖库版本冲突的问题。
1.2 基础工具链安装
首先更新软件源并安装必要的开发工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y git curl python3配置Git用户信息(后续repo工具会用到):
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"验证配置是否生效:
git config --list2. 源码获取与repo工具配置
2.1 repo工具安装与配置
repo是Google开发的用于管理多个Git仓库的工具。由于网络原因,建议使用国内镜像源:
mkdir -p ~/bin curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo chmod a+x ~/bin/repo将repo添加到PATH环境变量:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc source ~/.bashrc2.2 AOSP源码下载
对于RK3568开发板,我们需要特定版本的Android 11源码。清华镜像源提供了完整的AOSP仓库:
mkdir ~/aosp && cd ~/aosp repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r48开始同步源码(建议使用-j4参数根据CPU核心数调整):
repo sync -j4常见问题处理:
- 同步中断:执行
repo sync -j4 --fail-fast继续 - 空间不足:使用
df -h检查磁盘空间,建议保留至少200GB空闲
3. 编译环境配置
3.1 安装依赖包
Android编译需要大量开发库支持,执行以下命令安装:
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 python-is-python33.2 JDK安装
Android 11需要OpenJDK 8:
sudo apt install -y openjdk-8-jdk验证Java版本:
java -version # 应显示 openjdk version "1.8.0_xxx"4. RK3568专用配置与编译
4.1 设备特定源码准备
从瑞芯微获取的BSP包通常包含以下关键目录:
device/rockchip/rk356x/ kernel/ u-boot/ vendor/rockchip/将这些目录复制到AOSP源码对应位置,覆盖原有文件。
4.2 环境初始化
source build/envsetup.sh lunch rk3568_r-userdebug选项说明:
rk3568_r-userdebug:带调试符号的user版本rk3568_r-eng:工程师版本,更多调试功能
4.3 开始编译
使用瑞芯微提供的一键编译脚本:
./build.sh -UKAup参数解析:
-U:编译U-Boot-K:编译Kernel-A:编译Android-u:生成update.img-p:打包镜像
编译过程可能需要2-6小时,取决于硬件性能。建议使用-jN参数(N=CPU核心数*1.5)来加速:
make -j125. 输出镜像与烧录
编译完成后,在out/target/product/rk3568_r/目录下会生成以下关键文件:
| 文件 | 说明 |
|---|---|
| boot.img | 内核和初始RAM磁盘 |
| system.img | Android系统镜像 |
| vendor.img | 厂商定制内容 |
| update.img | 完整升级包 |
使用瑞芯微提供的烧录工具RKDevTool将镜像写入开发板:
- 开发板进入Loader模式(按住Recovery键上电)
- 连接USB到PC
- 运行RKDevTool,加载
update.img - 点击"执行"开始烧录
6. 常见问题排查
6.1 编译错误处理
案例1:Java版本冲突
You are attempting to build with the incorrect version of java解决方案:
sudo update-alternatives --config java # 选择Java 8案例2:内存不足
Out of memory error解决方法:
- 增加swap空间
- 减少编译线程数:
make -j4
6.2 启动问题
如果系统无法正常启动,可以通过串口查看内核日志:
sudo apt install minicom minicom -D /dev/ttyUSB0 -b 1500000常见启动问题:
- 缺少驱动:检查kernel config是否正确
- 分区表错误:确认parameter.txt配置
- 文件系统损坏:重新烧录vendor.img
7. 进阶调试技巧
7.1 单独编译模块
修改单个模块后无需全量编译:
mmm packages/apps/Settings7.2 生成补丁文件
使用repo创建提交补丁:
repo start branch-name . git add . git commit -m "your changes" repo upload --current-branch7.3 性能优化建议
- 使用ccache加速后续编译:
export USE_CCACHE=1 ccache -M 50G- 在
build/core/ccache.mk中设置CCACHE_DIR到高速存储
在RK3568开发过程中,我发现最耗时的往往是第一次编译后的增量构建。合理使用ccache可以将后续编译时间缩短60%以上。另外,记得定期执行make clean来避免一些奇怪的缓存问题。