RK3568 Android 12 编译指南 (正点原子)
环境信息
| 项目 | 值 |
|---|---|
| 开发板 | 正点原子 ATK-RK3568 |
| Android 版本 | Android 12 (SQ3A.220605.009.B1) |
| 内核版本 | Linux 4.19 |
| Kernel DTS | rk3568-atk-evb1-ddr4-v10 |
| U-Boot 配置 | rk3568 |
| Kernel 配置 | rockchip_defconfig |
| 目标产品 | rk3568_s-userdebug |
| SDK 版本 | ATK_SDK v1.1 |
| 编译主机 | WSL2 (Ubuntu 26.04 LTS) |
| CPU | 32 cores |
| 内存 | 16 GB |
| 磁盘 | ~633 GB 可用 |
1. 环境准备
1.1 安装必要工具包
# 基础工具
sudo apt-get update
sudo apt-get install -y openjdk-8-jdk
sudo apt-get 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 \
device-tree-compiler python2 python3 lz4 cpio
1.2 配置 Java 环境
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
2. 解压源码
2.1 解压分卷 ZIP
源码以 4 个分卷 ZIP 形式提供:
03��android12_sdk.zip.001
03��android12_sdk.zip.002
03��android12_sdk.zip.003
03��android12_sdk.zip.004
使用 7zip 合并解压:
7z x 03*.zip.001
解压后得到一个 .tgz 文件(约 32GB)。
2.2 解压 TGZ
tar -xzf <filename>.tgz
解压后得到 rk3568_android12_SDK/ 目录。
3. 编译
3.1 加载编译环境
cd ~/rk/rk3568_android12_SDK
source build/envsetup.sh
lunch rk3568_s-userdebug
3.2 一键编译 (U-Boot + Kernel + Android)
# -U=uboot -K=kernel -A=Android -J=并行线程数
# 注意:16GB 内存建议使用 -J8,避免 OOM
./build.sh -UKA -J8
编译完成后,镜像文件自动输出到 rockdev/Image-rk3568_s/。
3.3 生成 update.img (可选)
./build.sh -u
4. 编译过程中遇到的问题及解决方案
问题 1: python2: not found
现象: U-Boot 编译时 make.sh 脚本检查 python2 不存在。
原因: Ubuntu 26.04 默认不带 python2,但 U-Boot 的 make.sh 使用 make PYTHON=python2。
解决:
sudo ln -sf /usr/bin/python3 /usr/bin/python2
问题 2: Python 2 语法错误
现象: 内核编译时 kernel-4.19/scripts/mkmultidtb.py 报语法错误。
原因: 该脚本使用 Python 2 的 print 语句(如 print __doc__),但系统使用 Python 3 解释。
解决:
# 修改 shebang 为 python3
sed -i 's|#!/usr/bin/env python|#!/usr/bin/env python3|' kernel-4.19/scripts/mkmultidtb.py
# 修复 print 语句
sed -i 's/print __doc__/print(__doc__)/' kernel-4.19/scripts/mkmultidtb.py
sed -i 's/print target_dtb_list/print(target_dtb_list)/' kernel-4.19/scripts/mkmultidtb.py
问题 3: 缺少 .git/HEAD 文件
现象: 编译报错,提示 3 个模块缺少 .git/HEAD。
原因: 从 tarball 解压的源码没有 git 历史,但 Android.bp 文件引用 .git/HEAD 用于版本号生成。
涉及模块:
hardware/rockchip/libmpimmzhardware/rockchip/libhwjpegvendor/rockchip/hardware/interfaces/codec2
解决:
# 对每个模块,删除无效的符号链接并创建 .git/HEAD
for dir in hardware/rockchip/libmpimmz hardware/rockchip/libhwjpeg vendor/rockchip/hardware/interfaces/codec2; do
cd $dir
rm -f .git
mkdir -p .git
echo "ref: refs/heads/master" > .git/HEAD
cd -
done
问题 4: libncurses.so.5 找不到
现象: 预编译的 clang-3289846 需要 libncurses.so.5。
原因: Ubuntu 26.04 只有 libncurses.so.6,没有 libncurses.so.5。
解决:
sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
问题 5: cpio: command not found
现象: 内核编译时 kernel/gen_kheaders.sh 报 cpio: command not found。
原因: 内核配置 CONFIG_IKHEADERS=y 需要 cpio 工具生成内核头文件归档。
解决:
sudo apt-get install -y cpio
问题 6: lz4c: not found
现象: 内核编译时 LZ4C arch/arm64/boot/Image.lz4 报 lz4c: not found。
原因: 内核配置使用 LZ4 压缩,但系统未安装 lz4 工具。
解决:
sudo apt-get install -y lz4
问题 7: OOM (Out of Memory) - R8 进程被杀死
现象: 编译到 ~81% 时,R8 (ProGuard) 优化步骤报 Remote side unexpectedly closed network connection,进程被 OOM killer 杀死。
原因: 使用 -J32 (32 并行线程) 时,多个 Java/R8 进程同时运行,每个需要大量内存,导致 16GB RAM 耗尽。
解决: 降低并行度:
# 16GB 内存建议使用 -J8
./build.sh -UKA -J8
5. 输出文件
编译完成后,镜像文件位于 rockdev/Image-rk3568_s/:
| 文件 | 大小 | 说明 |
|---|---|---|
boot.img | ~33 MB | 内核启动镜像 |
boot-debug.img | ~33 MB | 调试版启动镜像 |
recovery.img | ~69 MB | 恢复模式镜像 |
super.img | ~1.6 GB | 系统超级镜像 (包含 system/vendor/product/odm) |
uboot.img | 4 MB | U-Boot 镜像 |
resource.img | ~965 KB | 资源镜像 (DTB) |
dtbo.img | 623 B | DTBO 镜像 |
MiniLoaderAll.bin | ~454 KB | Rockchip 引导加载器 |
misc.img | 48 KB | Misc 分区 |
vbmeta.img | 4 KB | AVB 验证元数据 |
baseparameter.img | 1 MB | 基础参数 |
config.cfg | 6 KB | 分区配置 |
parameter.txt | 634 B | 分区表 |
6. 烧录说明
使用 RKDevTool (Rockchip 开发工具) 烧录:
- 将开发板切换到 Loader 模式 (按住 RECOVERY 键上电)
- 打开 RKDevTool
- 加载
rockdev/Image-rk3568_s/目录下的镜像 - 点击 “执行” 开始烧录
如果需要整包烧录,先运行 ./build.sh -u 生成 update.img,然后在 RKDevTool 中选择 “固件升级” 模式加载 update.img。
7. 参考
- 正点原子 RK3568 开发板资料: [ATK-RK3568 用户手册]
- Rockchip Android 12 SDK 文档:
ATK_SDK_Note.md
1万+

被折叠的 条评论
为什么被折叠?



