Android移植本章目标整体框架介绍(2-1)整体框架介绍(2-2)•1.最低层是linuxkernel,主要负责内存管理、进程调度等系统管理以及终端的硬件驱动。Binderdriver,google为android设计的一个增强系统的进程间通信能力的模块。•2.Kernel的上一层是libraries,包含了核心库、第三方库和android虚拟机。android并没有直接采用传统的j2se或j2me的java虚拟机,而是自己建立了一个称为dalvik的虚拟机,号称更节省字节码的空间,性能更好。但这也成为了google与sun关于java版权争议点。以上两层是采用C语言或汇编语言实现的。•3.Framework是android为应用开发者设计的一套软件框架,提供了丰富的api和一些现成的开发元素。Framework是采用java语言实现的。在NDK出来之前,android应用开发者基本上只能用java来开发应用。Android使用JNI连接了libraries和framework。•4.Application就是在framework的基础上开发的各种应用移植主工作•驱动移植•硬件抽象层移植•Android目标文件系统移植•系统优化驱动移植•在具有了特定的硬件系统之后,需要实现各个设备的驱动程序,这些驱动程序通常是Linux的标准驱动程序,在Android平台和其他Linux平台基本上是相同的。硬件抽象层移植•Android系统移植,主要的实现方面是Android系统中的硬件抽象层(HardwareAbstractLayer)•硬件抽象层对下调用Linux中的驱动程序,对上提供接口,以Android系统的其他部分(通常为Android本地框架层)调用。Android目标文件系统移植•移植文件系统存储介质:NAND,NOR,INAND等驱动•移植文件系统策略•移植文件系统格式•移植文件系统的更新(烧写)方式系统优化•缩减系统启动时间•裁减目标设备中不需要模块•修正bugAndroid版本•Android版本本英文名Linux内核版本•1.5Cupcake2.6.27•1.6Donut2.6.29•2.0/2.1Eclair2.6.29•2.2Froyo2.6.32•2.3Gingerbread2.6.35•3.0/3.1/3.2Honeycomb2.6.36开发环境和工具•确保系统上安装以下工具包•git-coregnupgflexbisongperfbuild-essentialzipcurl•zlib1g-devlibc6-devlibncurses5-devx11proto-core-dev•libx11-devlibreadline6-devlibgl1-mesa-devtofrodos•python-markdownlibxml2-utilsxsltprocJAVA环境•Android2.2及以前的版本用jdk5•Android2.2以上的版本用jdk6•Java环境配置如下:•JAVA_HOME=/usr/local/jdk1.5.0_22•PATH=$PATH:$JAVA_HOME/bin:JRE_HOME/bin•CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib•exportJAVA_HOMEPATHCLASSPATHAndroid源码下载•参考•确保git-corecurl已安装•$mkdir~/bin•$PATH=~/bin:$PATH•使用git获取Android源码的时候一般需要使用repo脚本•$curl~/bin/repo•$chmoda+x~/bin/repo•repoinit-u(-b后加android版本)•reposyncLinux内核下载•使用git获取Android源码的时候一般需要使用repo脚本,但是使用repo脚本得到的源码并不带kernel内核的,所以如果需要下载kernel内核还必须使用git手动下载•gitclone•gitbranch//列出本地分支•gitbranch–r//列出远程服务器的分支•gitbranch-a//列出可用的内核版本•gitcheckoutremotes/origin/android-2.6.39//checkout出想要使用的内核编译android•..build/envsetup.sh•lunch•make•编译完后在out/target/product/generic目录下生成如下三个文件:•ramdisk.imgsystem.imguserdata.imgramdisk.img•ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。根文件系统制作•生成的system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:•fileramdisk.img,输出:ramdisk.img:gzipcompresseddata,fromUnix,lastmodified:WedMar1817:16:102009,我们可以学习怎么样把ramdisk.img解压出来。将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令•gunzipramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入命令cpio-i-F../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和userdata里的文件复制到ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。•用mkyaffs2image工具将解压出来的文件制作一个根文件系统rootfs.img以便烧到开发板(mkyaffs2imagerootfsrootfs.img)