本系列课程主要讲解RK3128平台的系统&驱动开发相关的知识。
RK3128为我司基于RK3128平台定制的一款pad设备。基于瑞芯微官网源码开发。android版本采用5.1。
本章节主要讲解android系统开发环境搭建及编译基础,针对RK3128平台的源码下载及编译流程参考附件文档。本文主要讲解基础性理论知识,并针对RK3128提供的平台讲解下编译脚本。
本文附件文档下载:链接:https://pan.baidu.com/s/1pKFa0gb 密码:dbs6
一、android系统编译开发环境搭建
需要的软件环境如下:
1、宿主机:ubuntu12.04(64bit)
2、JDK:OpenJDK7
3、android版本:5.1
4、NDK,跟随源码下载,编译脚本里会配置响应的
Android版本 | 编译要求的JDK版本 |
---|---|
AOSP的Android主线 | OpenJDK 8 |
Android 5.x至android 6.0 | OpenJDK 7 |
Android 2.3.x至Android 4.4.x | Oracle JDK 6 |
Android 1.5至Android 2.2.x | Oracle JDK 5 |
NDK的概述:
NDK是一系列工具的集合。
对应的一些工具需要apt-get安装,参考附件中有说明。
二、编译
android系统编译分三步:
1、命令加载,例如lunch、mm等命令就是命令加载后才有效的。
运行此命令完成命令加载:source build/envsetup.sh
2、lunch,选择编译平台。输入lunch出现如下提示,这里选择8回车。
lunch里选项的目录可以添加,本例子中RK3128对应的lunch选项配置文件路径为 源码目录/device/rockchip/rk312x/vendorsetup.sh
3、make -j4编译。编译完成后需要打包工具打包。具体方法见附件文档。
问题及说明:
1、JDK的配置,rk3128环境编译时需要运行build.sh脚本(附件文档里有说明),这个脚本主要是配置JDK版本的。脚本内容如下:
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
. build/envsetup.sh
如果编译过程中提示JDK相关的错误有可能是JDK版本匹配问题,因为android系统编译过程中经常出现JDK版本切换不完全的情况,那么需要运行以下两条指令来切换JDK版本:
sudo update-alternative --config java
sudo update-alternative --config javac
输入上面命令后会提示选择对应的JDK版本。2、内核编译与系统编译
android内核采用的是linux内核,其编译过程跟linux系统开发一样。生成的文件格式也是linux标准的zImage格式。
android系统编译其实相当于是类似文件系统的一个编译,会生成ramdisk.img、system.img、userdata.img(本例子中没有生成此文件),三个文件对应源码目录下/out/target/product/rk312x/目录下的root、system、data目录。三个文件存储安卓文件系统中不同的文件数据,具体在此不做详细解释。
3、打包
如上一条所叙述,安卓分为内核和系统部分。那么固件生成的过程其实分为编译和打包两个过程。
linux内核固件也需要二进制文件处理工具进行处理然后生成zImage。
android系统编译生成的文件,编译时生成如上一条所讲的root、system、data目录。然后编译时通过一系列打包工具生成ramdisk.img、system.img、userdata.img。
按照以上所述,生成zImage、ramdisk.img、system.img、userdata.img文件后,还需要将ramdisk.img、zImage合并成一个boot.img文件,然后就可以将此文件烧录到硬件。
这个打包的过程android标准的做法是使用mkbootimg(out/host/linux-x86/bin/)来打包。本例子中使用的是mkimage.sh脚本来打包,这个脚本就是基于mkbootimg来工作的。打包后的固件存储在 /rockdev/image-rk312x目录下(打包脚本中做了cp动作)。