1. 基础环境说明
- 开发板型号:
FriendlyARM Tiny4412SDK-1312-S702
- 编译机linux环境:
Ubuntu 14.04.5
下载地址 - Android源码版本:
android-5.0.2-fs-20170116.tar.gz
下载地址 - kernel源码版本:
linux-3.0.86-20170221.tgz
下载地址 - uboot源码版本:
uboot_tiny4412_0929.tar.gz
下载地址
2. 配置步骤
以下配置步骤假设你对linux系统的基本知识已经有所了解,并已经拥有了ubuntu系统的root权限。不要盲目复制命令执行,你需要知道每条命令做了什么,根据自己的实际情况来操作。
2.1 安装交叉编译环境
-
用到的文件:附赠的光盘中的
arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
压缩包 -
配置方法:
-
首先在命令行进入压缩包所在目录并使用
tar
命令解压,假设压缩包所在目录为/mnt/Disk-A/
,则执行cd /mnt/Disk-A tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C /
-
配置系统环境变量。如果正常解压,此时交叉编译器已经被解压到了
/opt/FriendlyARM/toolschain/4.5.1
这个目录,需要设置环境变量以方便使用。假设你使用的shell是bash,使用你常用的编辑器(如vim,gedit)打开
~/.bashrc
,如果没有这个文件,则新建。例如:vim ~/.bashrc
然后将以下语句加入该文件的最后一行。
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
之后保存退出。
- 注销用户并重新登录,此时在命令行执行
arm-linux-gcc –v
,如果能正常输出版本信息,则说明交叉编译器已经安装成功,否则检查前两步是否出现了问题。
-
2.2 配置Android编译环境
-
安装
java
环境- 根据你要编译的android版本选择适合的JDK版本
The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5
-
以我们本次用到的Android 5.0.2 和 Ubuntu14.04为例,我们需要安装
OpenJDK 7
,这个包在ubuntu的软件源里有了,所以我们只需要执行sudo apt-get install openjdk-7-jdk
-
在命令行执行
java
和javac
来检查是否已经成功安装了java环境。
-
安装编译必须的软件包
-
接下来需要在ubuntu上安装编译Android所需要的软件包。
-
如果你是
ubuntu14.04
的版本,在命令行执行以下命令安装:sudo apt-get install git-core gnupg flex bison gperf build-essential zip 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 unzip
-
如果你是
ubuntu12.04
的版本,则执行以下命令:sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
-
推荐使用
ubuntu14.04
版本进行编译工作,避免因为版本不同出现问题。
2.3 解压源码
2.3.1 解压kernel源码
将kernel源码压缩包解压到一个用于编译的文件夹中,假设我们的压缩包放在/tmp/compile/kernel
中,将其解压到当前目录只需要执行以下命令:
cd /tmp/compile/kernel
tar xvzf linux-3.0.86-20170221.tgz
之后就能在当前目录下看到解压好的linux-3.0.86
文件夹。
2.3.2 解压Android源码
与解压kernel类似,同样进入压缩包所在目录将源码包解压。(解压后大概14GB,要保证磁盘空间足够)
例如:
cd /tmp/compile/android
tar xvzf android-5.0.2-fs-20170116.tar.gz
执行后就能得到解压后的android源码文件夹。
2.3.2 解压uboot源码
与前二者类似,都是使用tar
命令解压.tar.gz
压缩包。
例如:
cd /tmp/compile/uboot
tar xvzf uboot_tiny4412_0929.tar.gz
以上的三组命令并非必需,在图形界面里解压也并没有什么影响。
2.4 编译源码
2.4.1 编译kernel
-
首先进入源码所在的目录,例如:
cd /tmp/compile/kernel/linux-3.0.86
-
接下来将源码中tiny4412的内核配置设为默认配置
cp tiny4412_android_defconfig .config
-
然后可以对内核的编译选项进行自己的调整,执行
make menuconfig
会进入一个终端里的简单界面,用于调整kernel的一些编译选项
-
接下来就可以使用make命令进行编译工作了。
make -jN # N代表编译时的线程数,根据实际情况修改,可以加速编译(如 make -j8)
-
编译好后就可以在
arch/arm/boot
路径下得到一个zImage
文件,这就是编译好的内核。下图为编译好内核时的输出
2.4.2 编译Android源码
-
与编译kernel类似,首先cd进入源码所在目录,并载入setenv脚本设置编译时的环境:
cd /tmp/compile/android/android-5.0.2 # 进入目录 . setenv #这个点其实是个source命令,中间要有空格
-
执行make命令开始编译。(需要很长时间)
make -jN # N代表编译时的线程数,根据实际情况修改,可以加速编译(如 make -j8)
我们的8线程笔记本在编译时的情况,CPU全部占用:
编译结束后的输出:用时 1小时18分钟56秒
-
这时还没有结束,还需要执行一个脚本生成一些img文件
./gen-img.sh
然后当前目录就生成了
system.img
,ramdisk-u.img
,这两个就是我们接下来要用到的。
2.4.3 编译uboot
uboot这里被坑了,启动andoird后一段时间lcd灭,无反应,弄好了来填坑
2.5 烧录系统
uboot这里被坑了,启动andoird后一段时间lcd灭,无反应,弄好了来填坑
3. 参考资料
该配置指导所参考的资源、网站、个人博客有: