Android AOSP入门之环境搭建

简介: 最近在做移动机器人项目,要给机器人做一个头台,搭载Android操作系统,要为系统做一些定制。在 好多年前,还是Android 5.0以下系统的时候做游戏画面采集做个AOSP的编译,那个时候电脑配置查,网络也差,搭建一次环境特别费劲。编译完还没有现成的设备可以给刷,一直也没有真正的framework和内核、驱动层的开发经验,现在有了实际的需求了,硬着头皮开搞。

image.png


1. 背景


最近在做移动机器人项目,要给机器人做一个头台,搭载Android操作系统,要为系统做一些定制。在 好多年前,还是Android 5.0以下系统的时候做游戏画面采集做个AOSP的编译,那个时候电脑配置查,网络也差,搭建一次环境特别费劲。编译完还没有现成的设备可以给刷,一直也没有真正的framework和内核、驱动层的开发经验,现在有了实际的需求了,硬着头皮开搞。


这次现在供应商推荐了开发板,买开发板的时候顺带着把资料也带过来了,这是一块开源的板子,支持Android9.0系统,资料里面源码和镜像都有,已经刷机工具,本文开始搭建环境,后续逐步的完善功能。


2. 组装


image.png


组装比较简单,把板子用螺丝固定到另外购买的显示屏上,将LVDS模块接起来,将wifi天线和4G模块安装上就可以加电启动了。


3. AOSP编译环境搭建


编译 AOSP 对机器的配置要求较高:


  • 64 位 CPU
  • 16GB 物理内存+交换内存
  • 30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB, 如果要编译源码则还需要 150GB 的磁盘空间。


这里正好有刚从公司申请的笔记本,512G磁盘, 24G内存,i7处理器,装了ubuntu20操作系统。


编译环境的初始化参考了Android官网提示: source.android.com/source/init…

  • 安装 OpenJDK 8:


sudo apt-get install openjdk-8-jdk


  • 安装 openjdk-8-jdk,会更改 JDK 的默认链接,这时可用下面工具来切换 JDK 版本。:


$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac


  • Ubuntu软件包安装:


sudo apt-get update
sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev \
libesd-java libwxgtk3.0-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip zip


4. 编译9.0固件


解压从资源盘中自带的源码压缩包,这里用了7x压缩工具。然后进入源码路径执行:


cd ./aosp
git reset --hard


4.1 编译显示器驱动


它提供了HDMI、LVDS + HDMI和MIPI + HDMI三种显示屏,执行对应脚本即可,这里我们用的是LVDS,编译LVDS即可。


4.2 编译AOSP


  • 编译前执行如下命令配置环境变量:


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar


  • 编译kernel:


make ARCH=arm64 xxx_defconfig
make -j8 ARCH=arm64 BOOT_IMG=../xxx/Image-xxx/boot.img xxx.img


若进行内核 debug,需要将 resource.img 和 kernel.img 打包进去 boot.img 后对 boot 分区进行烧写才能生效。


  • 编译 uboot


./make.sh 


  • 编译Android


source build/envsetup.sh
lunch xxx-userdebug
make -j8
./mkimage.sh


5. 编译产物


  • boot.img: Android 的 initramfs 映像,包含Android根目录的基础文件系统,它负责初始化和加载系统分区。
  • system.img: ext4 文件系统格式的 Android 文件系统分区映像。
  • kernel.img: 内核映像。
  • resource.img: Resource 映像, 包含启动图片和内核设备树。
  • misc.img: misc 分区映像, 负责启动模式的切换和急救模式参数的传递。
  • recovery.img: Recovery 模式映像。
  • rk3399_loader_v1.12.112.bin: Loader 文件。
  • uboot.img: U-Boot 映像文件。
  • trust.img: Arm trusted file (ATF) 映像文件。
  • parameter.txt: 分区布局和内核命令行。


6. 更新固件(刷机)


开发板有2种工作模式。一般情况下,开机直接进入Normal 模式正常启动系统。如需对板子系统进行升级,可以根据情况选择合适的升级模式进行固件升级。


image.png


目前支持3种升级模式,各有优缺点:


  1. MaskRom 升级模式
  2. Loader 升级模式
  3. SD 升级模式


6.1 MaskRom 升级模式


一般情况下是不用进入 MaskRom 升级模式的,只有在 bootloader 校验失败(读取不了 IDB 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入此模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。当板子变砖无法正常启动或升级程序时,也可以手动进入MaskRom 升级模式.


6.2 Loader 升级模式


Loader 升级模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入此模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。


6.3 SD 升级模式


使用SD升级,本质上是制作一个可启动的SD启动的升级固件,让板子SD启动,擦除和烧写EMMC。


这里我们先使用SD卡将资料盘中自带的系统更新到板子,跑起来看看效果。


7. 总结


本文介绍了基于开发板自带AOSP编译Android镜像过程,整个过程比较顺利,而且由于电脑性能还不错,近20G的压缩包,解压后整个编译过程花了两个半小时,比之前动不动两三天还总失败高效了很多。

目录
相关文章
|
17天前
|
Java API 开发工具
【Android】安Android Studio环境搭建注意点
【Android】安Android Studio环境搭建注意点
31 1
|
7天前
|
编解码 开发工具 Android开发
技术心得:打造自己的智能投屏体验——Android投屏开发入门
技术心得:打造自己的智能投屏体验——Android投屏开发入门
13 0
|
14天前
|
Android开发
杨老师课堂_安卓教程第一篇之入门
杨老师课堂_安卓教程第一篇之入门
14 0
|
2月前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
|
2月前
|
Android开发
Android游戏引擎AndEngine入门资料
Android游戏引擎AndEngine入门资料
22 3
|
2月前
|
Shell Android开发
RK android13编译环境搭建与常用编译命令
RK android13编译环境搭建与常用编译命令
128 0
|
2月前
|
XML 存储 Java
安卓应用开发入门:构建您的第一个移动应用
【4月更文挑战第13天】本文引导读者入门安卓应用开发,首先介绍设置开发环境,包括安装JDK和Android Studio。接着,通过Android Studio创建第一个项目,解析项目结构,重点讲解`AndroidManifest.xml`和`activity_main.xml`。然后,设计一个显示"Hello World!"的布局,并在`MainActivity.java`中编写相应逻辑。最后,运行并调试应用,鼓励读者继续学习安卓开发的更多知识,提升技能。
|
2月前
|
Java Android开发
android AsyncTask入门
android AsyncTask入门
16 0
|
2月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
202 0
|
2月前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
66 0