求助:从零开始将AOSP移植到树莓派3的技术方法
树莓派3 Model B 从零移植AOSP实操指南
兄弟,我太懂你这种处境了——想在树莓派3B上跑个完整的Android,结果RT Android停更变付费,Android Things又不是正经全量系统,被逼得只能从零搞AOSP移植,刚下完主分支看着满屏文件一脸懵的滋味,我当初也经历过。下面给你捋一套实操步骤,都是踩过坑总结出来的:
一、先把前期准备捋明白
- 硬件清单:树莓派3B+稳定电源(至少5V 2.5A)+ 64GB以上UHS-I级别SD卡+串口调试线(必备!初期没屏幕全靠它看启动日志排查问题)
- 主机环境:推荐用Ubuntu 20.04/22.04(AOSP对这俩版本兼容性拉满),先把编译依赖装全:
sudo apt install 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 - 源码调整:你下的主分支是给最新设备用的,树莓派3B属于ARM32老设备,建议切换到**Android 11(R)**分支(对老ARM设备支持最完善),命令:
(提示:一定要挂代理,不然同步源码能慢到你怀疑人生)repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r48 repo sync
二、搞定树莓派专属的适配层
AOSP本身不带树莓派的硬件适配,得找社区维护的设备配置:
- 克隆第三方的树莓派AOSP适配仓库,把设备树、内核补丁、板级支持包(BSP)放到AOSP源码的
device/raspberrypi/rpi3目录下 - 内核方面,树莓派官方内核需要打Android专属补丁(比如Ashmem、Binder驱动支持),嫌麻烦直接用社区已经打好补丁的对应Android版本内核
三、编译前的配置工作
- 进入AOSP源码根目录,先加载编译环境:
source build/envsetup.sh - 选择树莓派3B的编译目标:
(注:lunch rpi3-engeng是工程调试版,带完整调试功能,适合开发阶段;如果要做稳定版可以选userdebug)
四、开始编译(耐心等待!)
- 先单独编译内核(避免和系统编译混在一起报错难排查):
(make bootimage -j$(nproc)-j后面跟你主机的CPU核心数,比如8核就写-j8,能大幅加快编译速度) - 再编译整个AOSP系统:
这个过程少则3-4小时,多则大半天,期间别断网,可能会自动下载依赖包make -j$(nproc)
五、烧录到SD卡
编译完成后,out/target/product/rpi3目录下会生成boot.img、system.img、vendor.img等镜像文件,烧录步骤:
- 把SD卡分成两个分区:第一个是FAT32格式(约512MB,放引导文件),第二个是EXT4格式(剩余全部空间,放系统)
- 用Etcher工具(图形化友好)或者
dd命令烧录:- 把
boot.img烧录到FAT32引导分区 - 把
system.img、vendor.img转成普通镜像后烧录到EXT4分区(稀疏镜像转普通镜像用命令:simg2img system.img system_raw.img)
- 把
六、踩坑预警
- 编译报错找不到依赖:回去检查Ubuntu的32位库有没有装全,AOSP编译对32位组件需求很高
- 内核编译失败:大概率是内核版本和AOSP版本不匹配,或者补丁没打好,尽量找对应Android版本的树莓派内核补丁
- 启动卡在logo界面:插串口线看内核日志,一般是设备树不匹配或者驱动没加载,检查
device/raspberrypi/rpi3里的设备树配置 - SD卡空间不够:编译AOSP至少需要200GB主机硬盘空间,SD卡务必64GB以上,不然烧录时会直接失败
内容的提问来源于stack exchange,提问作者Brad Bondurant
相关产品推荐
相关产品推荐

