现在开始研究安卓framework层 以及了解整个Android的系统架构 ;
那首先第一步就是去下载安卓源代码了,具体可以参考谷歌官方文档下载源代码:http://source.android.com/source/downloading.htm
如果省时间可以直接拿人家已经下载好了的源码来进行编译即可
链接:http://pan.baidu.com/s/1jIeyXds
密码:ij7x
这里有android-6.0.1_r43,从清华镜像拖下来的。成功编译。
建议如果Ubuntu14以上出现严重的错误的话 可以装Ubuntu12.04 我觉得 成功率要高点!
好了 如果有源码了就可以开始编译了
执行以下命令:
1 sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev
2 sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential
3 sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libs libncurses5-dev
那后直接到源码目录 执行 make命令
中途可能会出现一些错误
可以参考这个链接:http://www.linuxidc.com/Linux/2011-07/38430.htm
大概两个小时左右就可以编译完成了(我编译的是2.3的源码)
编译完之后会在out/target/product/generic目录下生成system.img ramdisk.img userdata.img三个镜像文件。
在启动模拟器之前,需要先为模拟器系统设置环境变量,执行gedit ~/.bashrc,新增环境变量如下:
export ANDROID_PRODUCT_OUT=~/Android/source/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/Android/source/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};
最后,同步这些变化并启动模拟器:
$ source ~/.bashrc
$ cd ~/Android/source/out/target/product/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
加载上我们所编译出来的系统文件,终于出现了期待已久的模拟器.
到这里,源码编译就完成了,接下来就可以进行自己的改动测试了
再来第二步 下载安卓内核;
从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件
首先再源码主目录 创建kernel文件夹,再执行以下命令:
xielinhua@ubuntu:~/Downloads/Android/kernel$ git clone https://android.googlesource.com/kernel/common.git kernel
要经过漫长的等待····~~~~~~~~~~~~~~~~~~~~~~~~~~~才能下载完
当内核源码下载完成之后 调用以下命令:
git checkout remotes/origin/android-gldfish-2.6.29
然后再gldfish目录下会有好多文件 打开目录下的 makefile文件 修改以下值:
把红线中的换成 蓝线里面的 也就是
.Makefile文件的以下两行为:
# ARCH ?= (SUBARCH)
# CROSS_COMPILE?=
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
修改好了的话再设置环境
export PATH=$PATH:~Drown/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
到此就可以开始编译内核了,执行以下命令:
make goldfish_defconfig
再执行 make 大概两分钟就编译完成了
最后会出现如下图片:
到此内核编译完成! 现在开始把内核打包进以前编译好的源码中 启动模拟器执行:
先配置下环境变量
xielinhua@ubuntu:~$ export PATH=$PATH:~/Downloads/Android/out/host/linux-x86/bin/
xielinhua@ubuntu:~$ export ANDROID_PRODUCT_OUT=~/Downloads/Android/out/target/product/generic/
然后就可以打开我们刚才编译好内核的模拟器了
xielinhua@ubuntu:~/Downloads/Android$ emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage &
最后如图:
最后来验证一下是不是我们刚才编译的内核:
xielinhua@ubuntu:~/Downloads/Android$ adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
error: device offline
xielinhua@ubuntu:~/Downloads/Android$ adb shell
# cd proc
# cat version
Linux version 2.6.29-g4bb8fa0-dirty (xielinhua@ubuntu) (gcc version 4.4.3 (GCC) ) #1 Tue Jun 28 15:28:56 CST 2016
#
Linux version 2.6.29-g4bb8fa0-dirty 好了 是我们刚才的内核!