编译环境:ubuntu12.04/16.10
1、解压Android源码
7za x /media/oo/Disk2/nanopi2/android-5.1.1_r6-20160401.tar.7z.001 -onanopi2/
2、JDK配置
查看需要的jdk版本
# Check for the current JDK.
#
# For Java 1.7, we require OpenJDK on linux and Oracle JDK on Mac OS.
# For Java 1.6, we require Oracle for all host OSes.
requires_openjdk := false
ifeq ($(LEGACY_USE_JAVA6),)
ifeq ($(HOST_OS), linux)
requires_openjdk := true
endif
endif
# Check for the current jdk
ifeq ($(requires_openjdk), true)
# The user asked for java7 openjdk, so check that the host
# java version is really openjdk
ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
$(info ************************************************************)
$(info You asked for an OpenJDK 7 build but your version is)
$(info $(java_version_str).)
$(info ************************************************************)
$(error stop)
从脚本build/core/main.mk观察,需要open jdk1.7,这和版权协议有关系,设置requires_openjdk := false;
下载jdk1.7
ubuntu没办法直接下载open-jdk1.7,我到甲骨文公司下载jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
解压jdk
tar -xvf jdk-7u79-linux-x64.tar.gz -C env/jdk1.7
设置jdk环境变量,在.bashrc添加jdk路径
export JAVA_HOME=/home/oo/env/jdk1.7/jdk1.7.0_79
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
验证jdk版本
oo@oo:~/nanopi2$ source ~/.bashrc
oo@oo:~/nanopi2$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
3、编译Android源码
更新Android环境变量,选择版本,2线程编译,根据自己电脑实际CPU核的数量
source build/envsetup.sh
lunch aosp_nanopi2-userdebug
make -j2
编译可能会遇到缺库
ia32-libs
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install iceweasel:i386
也可以
sudo apt-get install libgl1-mesa-dri:i386
新版本的ubuntu可以直接,前提是你的source.list配置对了
sudo apt-get install lib32z1
其他库
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install gperf
sudo apt-get install libxml2-utils
sudo apt-get install curl
编译的时候,检查一下Android版本信息是否正确
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=5.1.1
TARGET_PRODUCT=aosp_nanopi2
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a9
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-32-generic-x86_64-with-Ubuntu-12.04-precise
HOST_BUILD_TYPE=release
BUILD_ID=LMY48G
OUT_DIR=out
============================================
4、编译Linux内核
加入交叉编译路径
export PATH=/home/oo/env/arm-linux-compile/bin:$PATH
如果配置正确后依然提示错误,原因是缺少32位库,参考文章上面的ia32-libs库安装,即可解决这个问题。
ncurses库,menuconfig配置时候使用
sudo apt-get install libncurses5-dev
mkimage工具
sudo apt-get install uboot-mkimage
16.10版本可以能弃用,需要更换安装包
sudo apt-get install u-boot-tools
编译:
make nanopi2_android_defconfig
make uImage
生成内核镜像文件:arch/arm/boot/uImage
5:调试
Android调试工具
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb