整个编译过程大致分为四个步骤:

1.安装相应依赖库文件,以及交叉编译工具和配置环境变量;

2.编译u-boot;

3.编译kernel;

4.编译android;

请认真阅读每个步骤上的提示,以及文件放置的相应路径。如果错误,欢迎批评指正,谢谢!

如果执行.sh 脚本出现问题,请按照步骤在终端手动执行命令。

#!/bin/bash
echo =======================================
echo RK3288 Android6.0.1 源码编译
echo =======================================

echo ======如果在windows下编译执行出现‘损坏的编译器’ sed -i 's/\r$//' filename.sh即可恢复正常======
echo ======.sh文件在哪个目录下执行,Android6.0.1 源码编译也在该目录下进行,本脚本默认在Android6.0.1 源码目录下执行======


echo 1.Ubuntu 12.04.5 LTS 下载安装jdk,并配置环境变量,该过程需要手动按enter键(默认下载到目录/usr/lib/jvm/java-7-openjdk-amd64 ,若要永久变量打开 vim /etc/profile进行设定)
sudo apt-get install openjdk-7-jdk
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile

echo 2.安卓源码目录下有自带的ndk,将其复制到/usr/lib/jvm/ 目录下,添加环境变量即可使用(若要永久变量打开 vim /etc/profile进行设定)
cp -a ndk /usr/lib/jvm
export NDK_HOME=/usr/lib/jvm/ndk
export PATH=$NDK_HOME:$PATH
NDK_HOME=/usr/lib/jvm/ndk
export PATH=$NDK_HOME:$PATH
source /etc/profile

echo 3.测试jdk、ndk是否安装成功
java -version
java
javac
ndk-build -v

echo 4.安装交叉编译工具
sudo apt-get install gcc-arm-linux-gnueabihf lzop libncurses5-dev libssl1.0.0 libssl-dev libc6:i386 zip unzip git-core gnupg flex bison gperf build-essential 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

echo 5.编译u-boot,先产生.config文件,最后产生RK3288UbootLoader_V2.30.10.bin文件
cd u-boot
make rk3288_defconfig
make

echo 6.编译kernel(生成kernel.img 和 resource.img)
cd ../kernel
make rockchip_defconfig -j4
make rk3288-miniarm.img -j4

echo 7.编译android6.0.1 AOSP(在目录rockdev/Image-rk3288下生成boot.img、pcba_small_misc.img 、recovery.img、misc.img、pcba_whole_misc.img、system.img)
cd ..
source build/envsetup.sh
lunch rk3288-userdebug
make
./mkimage.sh

echo 8.收集img 和 mkupdate (在目录RKTools/linux/Linux_Pack_Firmware/rockdev_rk3288下生成RK3288UbootLoader.bin 和 update.img)
cd RKTools/linux/Linux_Pack_Firmware/rockdev_rk3288
./collectImages.sh && ./mkupdate.sh

echo 9.在windows 下打开 SpiImageTools.exe 加在update.img,会在当前文件夹下产生bin 档(该工具在源码目录下 RKTools\windows)

echo 10.打开Win32diskImager.exe 将bin 档烧写到SD卡中,然后上电启动RK3288

echo ===================================================================================
echo ============= 编译android6.0.1 AOSP 时遇到的问题以及解决方法 ======================
echo ===================================================================================

echo 1)out/host/linux-x86/bin/jack: 行 131:  8399 已杀死 ERROR: Cannot launch Jack server
echo 解决方法:vim $HOME/.jack(该文件在你的用户目录下) 可以把$HOME/.jack中的配置文件中的SERVER=true设成false,不用jack,jack现在还不稳定。

echo 2)out/target/common/JAVA_LIBRARIES/framwork_intermediates/with-lal/classes.dex 错误
echo 解决方法:重新编译即可。

echo 3)out/target/common/obj/JAVA_LIBRARIES/sdk_v19_intermediates/classes.jack] 错误 1
echo 解决方法:如果在虚拟机内,别使用-j 这样会导致内存不够,编译卡住或者出现错误,直接使用make即可。

echo 4)Warning: This may have produced partial or corrupted output. ninja: build stopped: subcommand failed. make: *** [ninja_wrapper] 错误 1
echo 解决方法:打开目录:vi prebuilts/sdk/tools/jack-admin (该目录位于源码目录)
echo 1.找到如下语句:JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
echo 2.将上述语句修改为:JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
echo 主要是添加了-Xmx4096m参数,接下来在源码目录下执行如下命令重启jack-admin服务:
echo $ ./prebuilts/sdk/tools/jack-admin stop-server 
echo $ ./prebuilts/sdk/tools/jack-admin start-server

echo 5)the required version is :1.7.x  make failed to build some targets
echo 解决方法:android6.0.1 必须使用1.7.x 版本的openjdk

配置图文:

1)执行完上述步骤 7 中的make 后,如果编译正常通过,将会看到如下显示;

android编译系统root android kernel编译_rk3288 uboot

 

2)执行完上述步骤 7 中的 ./mkimage.sh 后,如果编译正常通过,将会看到如下显示;

android编译系统root android kernel编译_android编译系统root_02

 3)执行完上述步骤 8 中的 ./collectImages.sh && ./mkupdate.sh 后,如果编译正常通过,将会看到如下显示;

android编译系统root android kernel编译_.sh_03

 

注意事项:1)android6.0.1 编译必须使用1.7.x 版本的openjdk ,否则会出现错误

android编译系统root android kernel编译_rk3288 uboot_04

 2)如果先安装了openjdk8 ,出现错误,再安装openjdk7,安装不上,则从网上下载,将其解压到/usr/lib/jvm 目录下并配置环境变量

android编译系统root android kernel编译_.sh_05

3) 通过下面命令从jdk7 切换到jdk8

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-openjdk-amd64/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java-7-openjdk-amd64/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java-7-openjdk-amd64/bin/javah 300   
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java-7-openjdk-amd64/bin/javap 300   

sudo update-alternatives --config java

 4)通过 java -version 命令查看当前使用的jdk 版本

android编译系统root android kernel编译_rk3288 kernel_06