作者: TD-龙王             



简介:安卓 4.0×××及编译,内核下载及编译。模拟器启动,sdk安装。一步到位!
现在很多机型都有尝鲜版的安卓 4.0了,即便很多功能不能用,画面不够完善。大家依旧那么兴奋的烧鸡测试。大家想不想把自己的机器也搞成4.0,下面由我从4.0源码及编译的最底层来揭晓安卓4.0的奥秘吧。
注:感谢大家欣赏我的教程。本教程不属于小白教程,教程如有不足之处还望多多指出。
欢迎有兴趣的朋友加QQ群:183940436参与内核移植让1.6 和 2.3等机型升级



二下载并编译 Android4.0源码(图文)
1 开始
本教程笔者是在ubuntu10.04上用虚拟机完成的,建议将虚拟机设成80G以上,内存为1.5G,否则编译过程会出错。



1.1    初始化构建环境



    这节主要是描述如何设置你的本地工作环境,怎么使用repo这个工具获取Android文件,怎么创建你机器上的文件。使用Linux或Mac Os才能构建Android源文件,Windows目前不支持.



注:源文件有6G大小。构建时,你需要25G空间来完成单独构建,而完整构建时需要80G空间。



 



1.2    设置Linux构建环境
注:在虚拟机内构建Android也是可以的。如果那样的话,那么你至少需要16G内存或交换分区和30G以上的磁盘空间。
一般来说你需要以下工具:
Python 2.4 -- 2.7, 你可从这下载python.org.
JDK 6 (Gingerbread 或更新版本), JDK 5 (Froyo 或更老版本.) 这些你都可以从 java.sun.com下载.



Git 1.7 或更新版本. 你可以git-scm.com下载.



 



1.2.1 安装JDK
     Sun JDK不再包含在Ubuntu的服务器上了,如果你要下载,你需要添加源和指明那个版本是你想要下载的.
安装Java6的方法:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk



1.2.2 安装需要的包



安装如下包:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \



  libxml2-utils



执行如下指令:



$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so



 



1.3 配置USB
在GNU/linux系统下,默认情况下,正常用户不能访问USB设备,而此时需要配置其可以访问.建议方法是在目录/etc/udev/rules.d/下以root权限创建一个51-android.rules文件:
$sudo gedit /etc/udev/rules.d/51-android.rules
然后将以下的内容复制并保存,注:需要将字符串username替换成你的用户名,即开机登陆时你的用户名.
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on maguro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"



这样配置完成只有重新插入USB才会生效.



 



2 下载源文件
2.1 下载源文件树
2.1.1 安装repo
       Repo是Android的源码管理工具,以下步骤是安装,初始化,配置repo.
第一步:要主目录下新建一个bin文件夹,并将其设置为环境参数PATH内.
$ mkdir ~/bin



$ PATH=~/bin:$PATH



 



第二步:下载repo脚本文件,并使其可执行.
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
2.1.2 初如化repo客户端
第一步:在主目录上新建一个文件夹WORKING_DIRECTORY,然后进入这个路径.
$ mkdir WORKING_DIRECTORY第二步:清单库初始化
$ repo init -u https://android.googlesource.com/platform/manifest
这个命令会要求你输入你的用户名和邮箱

2.2 获取Android源文件
同步:
$ repo sync
接下来就是正式开始下载源码了,要很长时间才能下完,可以使用
$ repo sync -j10
来加快下载速度,即使用10个线程并行下载.
接下来就是等了,一直等到下载完,估计要两三天才能下完哦,要做好心理准备.

注:在下载过程中,在WORKING_DIRECTORY目录会自动生成一个隐藏的目录.repo,这个目录就是下载的内容,不过是隐藏的,用ls是看不见的.
如果在下载过程中出现错误的话,可再打开另一个终端,输入以下命令:
$ PATH=~/bin:$PATH
$ repo init -u https://android.googlesource.com/platform/manifest
$ cd WORKING_DIRECTORY
 



注意:以上这个下载的是安卓4.0完整版版本号包括4.0。1—到4.0.9



$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
注意:单独下载的话可以选4.0。1的这个



$ repo sync




然后再重复上述三条指令即可,如此,就可以完成×××了。



下载结束如下图所示:

 



OK,下载完了,查看一下你的WORKING_DIRECTORY目录,下面就是Android4.0的源文件了.(下载过程是很漫长的笔者下载了8-10小时。建议晚上睡觉前挂机下载)



3 开始编译



3.1 初始化环境
$ source build/envsetup.sh
3.2 选择目标
$ lunch full-eng
大概会再现如下提示:



3.3 编译源码
$ make -j4
大概会出现如下提示:



接下来就会编译很长时间,然而编译过程并不会是一帆风顺的,如果你的OS是32位Ubuntu 10.04,有可能会出现很多错误,笔者出现了至少5个错误,编译过程是锻炼开发者毅力的时候一个错误下来就要重新编译一次就是5个小时以上, 希望大家,有恒心有毅力!         稍后请留意我的一篇编译错误集结篇。
解决问题后:重新 make –j4即可



编译过程大概花了2+个小时.



完成后如下图所示:



3.4 运行



$emulator




第一次打开模拟器会很慢。请大家,多等待
下载并编译Android4.0内核goldfish(图文)



第一步:下载goldfish源码



在Android源码根目录下新建kernel文件夹



1. $mkdir kernel  



2. $cd kernel  



1. $git clone http://android.googlesource.com/kernel/goldfish.git   



下载完毕如下图:



 



此时在kernel目录下会生成一个goldfish文件夹。进入此目录:



1. $cd goldfish  



此目录下有一个隐藏的目录.git,通过



1. $ls -al  



可看到此目录:



查看所有分支:



1. git  branch -a  



如下图:
 



1. $git checkout remotes/origin/android-goldfish-2.6.29  



此时你会看到goldfish目录下会出现很多文件:



1. $ls  



这个时候goldfish源码就已经下下来了,接下来的事情就是编译了.



第二步:编译goldfish



导出交叉编译工具目录到$PATH环境变量中去.



1. export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin  



arm-eabi-gcc



3.    然后在glodfish目录下用gedit打开Makefile文件,找到这两行文字:



# ARCH



?= (SUBARCH)



 # CROSS_COMPILE?=
修改为 :
ARCH ?= arm



CROSS_COMPILE     ?= arm-eabi-



8. $gedit Makefile  



注意:ARTH ?=arm,的arm后边不要有空格,不然就会出现如下类似错误:
Make:...../kernel/goldfish/arch/arm: Is a directory.  Stop.



关闭gedit,接下来就开始make了,执行如下指令:



1. $ make goldfish_armv7_defconfig  



2. $ make  



注:用$make goldfish_defconfig这样配置也可以编译通过,模拟器也可以启动,但是Android的开机画机就显示不了,$adb shell也死活连不上,原因就是这个goldfish_defconfig这个配置文件问题.
注意:编译过程如有错误请到我的编译错误集结篇上查看!



提示:
$make goldfish_armv7_defconfig指令的意思是将目录WORKING_DIRECTORY/kernel/goldfish/arch/arm/configs/下的goldfish_armv7_defconfig文件内的Kconfig配置内容复制到WORKING_DIRECTORY/kernel/goldfish/目录下的.config文件中,.config文件是一个隐藏目录,保存着各个目录下Kconfig文件的配置.
最终结果如下图所示:



 



 



这样就表示编译成功了.



1. $ ls arch/arm/boot/  



可以看到zImage文件



第三步:在模拟器中启动编译好的内核



1. $ export PATH=$PATH:~/WORKING_DIRECTORY/out/host/linux-x86/bin  



2. $ export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic  



3. $ emulator -kernel ~/WORKING_DIRECTORY/kernel/goldfish/arch/arm/boot/zImage &   



 



注意:我们还可以加载现前编译后的system.img ramdisk.img userdata.img等镜像来测试。
-system /root/WORKING_DIRECTORY/out/target/product/generic/system.img



-data /root/WORKING_DIRECTORY/out/target/product/generic/userdata.img



-ramdisk /root/WORKING_DIRECTORY/out/target/product/generic/ramdisk.img



模拟器启动界面:



进入模拟器从设置里看版本信息:



从上图可以看出当前Android版本是4.0.1,内核版本是2.6.29,说明成功了



 



到这里。教程基本结束下面是位开发者讲到的开发环境搭建及 sdk的安装及使用。



编译sdk 因为下载的源码里面包含SDK的源码我们直接编译即可,想下载的可以上官网下载,这里我们主要讲的是底层源码编起。
进入WORKING_DIRECTORY
$cd WORKING_DIRECTORY
$make PRODUCT-sdk-sdk
等待30多分钟后编译生成后的SDK存放在out/host/linux-x86/sdk/目录下。
(建议将SDK备份并牢牢记住sdk的存放位置)
下面可以在sdk里加载开发环境。
请看下一章!