1. 程式人生 > >RK3128系統&驅動開發分享——(一)、開發環境搭建

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.0OpenJDK 7
Android 2.3.x至Android 4.4.xOracle JDK 6
Android 1.5至Android 2.2.xOracle 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回車。


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