编译树莓派AOSP
本文总结:使用开源项目raspberry-vanilla,编译通过源码编译一个树莓派可用的镜像,android源使用的是清华镜像源。
你也可以先刷一个Konstakang制作的树莓派Android镜像,看看效果,下载地址见6.4节,下载后用Rpi Imager刷入SD卡,连接HDMI屏幕即可看到效果。
1. 安装repo工具
这里直接从清华源下载的repo.
$ mkdir ~/bin $ PATH=~/bin:$PATH $ cd ~/bin $ curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo $ chmod +x repo
Note: 也可以使用google官方的repo, [https://storage.googleapis.com/git-repo-downloads/repo].
2. 安装开发环境
Ubuntu 22.04:
$ sudo apt update $ sudo apt install openjdk-17-jdk $ sudo apt install dosfstools e2fsprogs fdisk kpartx mtools rsync $ sudo apt install build-essential flex bison gawk bc git ssh \ g++-multilib gcc-multilib gperf libxml2-utils zlib1g-dev:i386 \ zip unzip liblz4-tool libncurses-dev libssl-dev python-is-python3 \ u-boot-tools file curl mtools kpartx $ sudo apt install crossbuild-essential-arm64
3. 下载源码
3.1 下载Manifest
基于raspberry-vanilla开源项目。
创建目录:
$ mkdir ~/android16 $ cd ~/android16
有两种选择,一种是完整版(占用空间多,版本控制友好),一种是浅克隆版(占用空间少,版本控制不友好),两者二选一:
完整版:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r4 $ curl -o .repo/local_manifests/manifest_brcm_rpi.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-16.0/manifest_brcm_rpi.xml --create-dirs
浅克隆版:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r4 --depth=1 $ curl -o .repo/local_manifests/manifest_brcm_rpi.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-16.0/manifest_brcm_rpi.xml --create-dirs $ curl -o .repo/local_manifests/remove_projects.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-16.0/remove_projects.xml
Note:可选android 版本参考列表,见6.1节。
3.2 下载代码
$ repo sync -j4
如果你选择浅克隆版,这个过程通常会下载超过86 GB的文件。如果是全克隆会更多一些。
3.3 编译代码
初始化环境:
$ cd ~/android16 $ source build/envsetup.sh
然后选择设备配置,可供选择的设备配置见6.2节。
我的是树莓派5,所以选择:[aosp_rpi5-bp4a-userdebug],执行如下:
$ lunch aosp_rpi5-bp4a-userdebug
编译:
$ make bootimage systemimage vendorimage -j$(nproc)
Note:由于编译可能会读取配置,内存占用可能会超过34GB,所以,如果你的计算机内存小于等于32 GB则通过swap扩展内存,操作方法可以参考第6.5节相关内容。
编译完成之后,打包镜像,树莓派4打包:
$ ./rpi4-mkimg.sh
树莓派5打包:
$ ./rpi5-mkimg.sh
编译之前,浅克隆总占用86GB,编译完,并且打包后,总占用190 GB。
4. 刷机
编译完生成的文件是松散的,通过rpiX-mkimg.sh 打包后的文件,以rpi5为例,位置在:
out/target/product/rpi5/Raspberry-Vanilla-aosp16.img
直接使用树莓派官方的RaspberryPi-Imager把镜像下载到SD卡即可,软件可以从6.4节获取。
刷机成功,把卡插在开发板上,连接HDMI显示器,顺利的话,通电即可启动并进入android系统。
5. 编译内核
执行:
$ cd kernel/rpi-kernel $ export ARCH=arm64 $ export CROSS_COMPILE=aarch64-linux-gnu- $ make rpi5_defconfig $ make -j$(nproc)
会产生:
- Image
- DTBs
- Kernel modules
修改内核之后,执行本步骤上述编译过程,然后再按第3节编译整个android即可在新的image文件中,获得修改后的内核。
6. 其它
6.1 Android版本列表
| Version | Vanilla Example | Latest(2025) | API Level |
| Android 16.0 | android-16.0.0_r4 | android-16.0.0_r4 | 36 |
| Android 15.0 | android-15.0.0_r32 | android-15.0.0_r36 | 35 |
| Android 14.0 | android-14.0.0_r67 | android-14.0.0_r75 | 34 |
| Android 13.0 | android-13.0.0_r75 | android-13.0.0_r83 | 33 |
| Android 12.1 | android-12.1.0_r22 | android-12.1.0_r26 | 32 |
6.2 树莓派设备配置
| No. | Android 16.0 | Android 15.0 | Android 14.0 | Android 13.0 | Android 12.1 |
| 1 | aosp_rpi4-bp4a-userdebug | aosp_rpi4-bp1a-userdebug | aosp_rpi4-ap2a-userdebug | aosp_rpi4-userdebug | aosp_rpi4-userdebug |
| 2 | aosp_rpi4_tv-bp4a-userdebug | aosp_rpi4_tv-bp1a-userdebug | aosp_rpi4_tv-ap2a-userdebug | aosp_rpi4_tv-userdebug | / |
| 3 | aosp_rpi4_car-bp4a-userdebug | aosp_rpi4_car-bp1a-userdebug | aosp_rpi4_car-ap2a-userdebug | aosp_rpi4_car-userdebug | / |
| 4 | aosp_rpi5-bp4a-userdebug | aosp_rpi5-bp1a-userdebug | aosp_rpi5-ap2a-userdebug | / | / |
| 5 | aosp_rpi5_tv-bp4a-userdebug | aosp_rpi5_tv-bp1a-userdebug | aosp_rpi5_tv-ap2a-userdebug | / | / |
| 6 | aosp_rpi5_car-bp4a-userdebug | aosp_rpi5_car-bp1a-userdebug | aosp_rpi5_car-ap2a-userdebug | / | / |
配置含义,以Android 16和树莓派5为例:
- Tablet UI: aosp_rpi5-bp4a-userdebug
- Android TV: rpi5_tv-bp4a-userdebug
- Android Automotive: aosp_rpi5_car-bp4a-userdebug
6.3 树莓派配置链接
# Android 16.0 https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-16.0/manifest_brcm_rpi.xml # Android 15.0 https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-15.0/manifest_brcm_rpi.xml # Android 14.0 https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-14.0/manifest_brcm_rpi.xml # Android 13.0 https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-13.0/manifest_brcm_rpi4.xml # Android 12.1 https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-12.1/manifest_brcm_rpi4.xml
6.4 链接
Konstakang镜像:[https://konstakang.com/devices/rpi5/].
Raspberry Pi Imager:[https://www.raspberrypi.com/software/].
6.5 扩展内存
根据实际扩展,这里以扩展4 GB为例(4096B * 1024KiB == 4 GiB):
# 创建一个4 GiB容量的swapfile. $ sudo dd if=/dev/zero of=/swapfile bs=4096 count=1024K # 改变访问权限 $ sudo chmod 600 /swapfile # 格式化swapfile $ sudo mkswap /swapfile # 启用swap $ sudo swapon /swapfile # 查看swap空间 $ free -m
不用了这块swap是可以删除的,删除就可以腾出给内存使用的,扩展大小也比较灵活的。
当然,你也可以用zram技术,如果内存满足条件,也能达到类似效果。

浙公网安备 33010602011771号