目录
一、概述
这次源码编译和仿真的是android2.3.4和android4.4,手头的环境暂时就这两个sdk ok,至于android N和android O后续会添加。
二、编译和仿真
1、编译Android:
source setenv一般设置android sdk的环境变量,setenv为脚本,如果没有就略过这一步。
source ./build/envsetup.sh,设置android编译的一些环境变量和一些脚本函数,具体了解要分析一下这个脚本。
lunch,加载sdk中的工程combo,选择默认generic-eng。然后make -j8.
以上就是一般android编译的步骤,当然编译过程中由于环境等问题会出现一些错误,这些错误就只能挨个上网寻求答案。
2、编译kernel
下载kernel,这个要科学上网才能下载,在国内暂时没有找到镜像源或者我这里不清楚,后续了解到了再添加相应的下载方法。git clone http://android.googlesource.com/kernel/goldfish.git;git branch -a查看版本,选择对应Android版本的kernel去下载。如android4.4,应下载kernel3.4;然后check out出代码,git checkout remotes/origin/android-goldfish-3.4。
添加交叉工具链到环境变量中,export PATH=android-4.4.4_r1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin:$PATH,或添加到~/.bashrc中.这个工具链的位置在不同的sdk中位置可能不太一样。在2.3.4中在这个位置android2.3.4/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin。这个要灵活处理
然后改顶层Makefile ARCH ?=arm;CROSS_COMPILE ?= arm-linux-androideabi,添加编译的架构和交叉编译工具链,
在android2.3.4中这个工具链又不同。
然后选择配置文件在android4.4中是 make goldfish_armv7_defconfig,而android2.3.4中是make goldfish_defconfig
最后make,变出zImage
3、仿真
如果在前面直接编译好的终端,直接emulator.如果另开终端需要 source ./build/envsetup.sh;lunch;emulator
最后要先source 一下前面的环境变量,不然可能搞错,这个默认的是android sdk中自带的kernel,如果在kernel中修改驱动或其它改动需要验证,则 emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage;这个可以在setting中的about phone中找到是android sdk自带的kernel还是你自己编译的。
下面的方法是emulator完整运行的命令
用编译处理的kernel,out/host/linux-x86/bin/emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage -sysdir ./out/target/product/generic/ -system ./out/target/product/generic/system.img -ramdisk ./out/target/product/generic/ramdisk.img -data ./out/target/product/generic/userdata.img -memory 1024 -partition-size 1024
用android sdk自带的kernel,emulator -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu -sysdir ./out/target/product/generic/ -system ./out/target/product/generic/system.img -ramdisk ./out/target/product/generic/ramdisk.img -data ./out/target/product/generic/userdata.img -memory 2048 -partition-size 1024
最后把编译出来host的一些bin工具添加到环境变量中,export PATH=./out/host/linux-x86/bin:$PATH;
然后通过adb shell,就可以登录到主机中,然后在里面logcat等调试打印
三、总结
这次把android整个编译和仿真的步骤和命令大概理了一下,具体的android系统开发的步骤如上,下面做的就是在kernel里面编写驱动和在android hal、native层、framework层中修改然后验证了。这个当然是通过仿真的形式了,具体涉及到硬件的操作就需要真实的硬件板。后续的时候把android N和O的添加上去。