RK3128系统&驱动开发分享——(一)、开发环境搭建

本系列课程主要讲解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

不同版本的android对应的JDK如上图。

NDK的概述:

NDK是一系列工具的集合。

  • NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
  • NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
  • NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
源码的下载可以通过repo在瑞芯微源上下载,具体方法可参考附件文档。

对应的一些工具需要apt-get安装,参考附件中有说明。


二、编译

android系统编译分三步:

1、命令加载,例如lunch、mm等命令就是命令加载后才有效的。

运行此命令完成命令加载:source build/envsetup.sh

2、lunch,选择编译平台。输入lunch出现如下提示,这里选择8回车。

RK3128系统&驱动开发分享——(一)、开发环境搭建_第1张图片

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动作)。

你可能感兴趣的:(RK3128系统&驱动开发分享,android系统)