1. 全志平台Android10编译环境准备
全志(Allwinner)平台的Android系统编译与传统AOSP编译存在显著差异,主要体现在其特有的BSP(Board Support Package)分层架构上。作为一名长期从事全志平台开发的工程师,我将详细解析这套编译体系的运作机制。
全志平台的BSP编译系统默认采用lichee或longan架构,与Android代码仓库分离。这种设计源于全志芯片的异构特性——需要先完成底层硬件适配(bootloader、内核、板级配置),再构建上层Android系统。在实际操作中,我们需要先搭建完整的交叉编译环境:
code复制sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
注意:建议使用Ubuntu 18.04 LTS系统,这是全志官方测试最充分的版本。较新的系统版本可能导致工具链兼容性问题。
2. BSP系统编译流程详解
2.1 配置编译选项
进入lichee/longan目录后,执行./build.sh config会启动交互式配置界面。这个步骤决定了后续编译的硬件目标和功能特性:
code复制Welcome to mkscript setup progress
All available platform:
0. android
1. linux
Choice [android]: 0 # 选择Android平台
All available ic:
0. r818
1. a133
2. t133
3. t527
Choice [r818]: 0 # 选择R818芯片
All available board:
0. evb1
1. evb2
2. fpga
3. perf1
4. perf2
5. qa
6. dev1
7. ver
Choice [dev1]: 6 # 选择开发板型号
配置完成后,系统会自动生成内核的defconfig文件。以R818为例,实际使用的是sun50iw10p1smp_r818_axp717_android_defconfig这个预置配置。
2.2 执行BSP编译
运行./build.sh开始完整编译流程,这个脚本会依次处理:
- Bootloader(通常是U-Boot)
- Linux内核(默认4.9版本)
- 板级配置文件(sys_config.fex等)
编译成功的关键日志如下:
code复制sun50iw10p1 compile Kernel successful
INFO: build kernel OK.
INFO: build rootfs ...
INFO: skip make rootfs for android # Android使用自己的rootfs
INFO: build lichee OK.
避坑指南:如果编译中途失败,建议先执行
./build.sh clean清理中间文件。常见问题包括工具链路径未设置、依赖库缺失等。
3. Android系统编译实战
3.1 环境初始化
进入Android源码目录后,需要初始化编译环境:
bash复制source build/envsetup.sh
lunch r818_android10_dev1-eng # 选择对应的产品配置
关键步骤是使用extract-bsp命令将之前编译的BSP产物整合到Android系统中:
bash复制extract-bsp # 该命令会将lichee/out目录下的内核镜像、dtb等文件拷贝到Android的out目录
3.2 全量编译与镜像生成
执行全量编译(首次编译建议使用-j参数控制线程数):
bash复制make -j8 2>&1 | tee build.log # 建议保存日志便于排查
编译成功后会看到类似输出:
code复制lpmake I 02-26 21:36:36 23148 23148 builder.cpp:949] [liblp]Partition vendor will resize from 0 bytes to 149028864 bytes
#### build completed successfully (33:25 (mm:ss)) ####
4. 固件打包与安全启动
4.1 标准打包流程
使用pack命令生成可烧录镜像:
bash复制pack # 生成位于lichee/out目录下的.img文件
打包过程会处理以下关键文件:
- sunxi_mbr.fex:分区表信息
- boot.fex:内核和initramfs
- super.fex:动态分区镜像(包含system/vendor等)
- vbmeta*.fex:AVB验证相关
4.2 安全启动配置
如需启用安全启动,需要额外步骤:
- 准备RoT PK(Root of Trust Public Key)
- 烧录efuse中的rotpk哈希值
- 使用-s参数打包:
bash复制pack -s # 生成带签名的固件
安全提示:rotpk一旦烧录将无法修改,务必在开发阶段确认测试密钥可用。
5. 常见问题排查手册
5.1 编译错误速查表
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 内核编译失败 | 工具链路径错误 | 检查lichee/out目录下的工具链是否完整 |
| extract-bsp报错 | BSP未编译或路径不符 | 确认lichee/out下有对应板型的输出 |
| super.img生成失败 | 分区大小不足 | 调整device/xxx/xxx/partition.xml中的分区表 |
5.2 性能优化技巧
-
使用ccache加速编译:
bash复制export USE_CCACHE=1 export CCACHE_DIR=/path/to/ccache prebuilts/misc/linux-x86/ccache/ccache -M 50G -
增量编译技巧:
bash复制make snod # 快速重建system.img make bootimage # 仅编译内核和boot.img -
并行编译建议:
- 16GB内存机器建议-j8
- 32GB内存机器可尝试-j16
在实际项目开发中,全志平台的这套编译体系虽然初期学习曲线较陡,但一旦掌握后能高效支持多款芯片的定制化开发。建议开发者建立自己的编译脚本库,将常用操作(如cleanbuild、快速打包等)封装成自动化脚本。