为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

认识安卓系统

2012-04-18 5页 pdf 233KB 54阅读

用户头像

is_305167

暂无简介

举报
认识安卓系统 写这篇文章时想起我的第一部 Android手机 HTC Hero。买回来后,同事告诉我可以去刷机 玩玩。刷机,怎么刷?同事说,你个土人,刷机都不知道,很多刷机论坛的,你去逛逛,挺 简单的。我去逛了逛机锋论坛(那时还不知道 MIUI),打开一看,什么 recovery, radio, root 各种词汇扑面而来,oh my lady gaga,这么复杂。但是为了不被鄙视,而且闲着也是闲着, 还是刷着玩玩吧。后来就结识 MIUI来到了小米。这是题外话,咱们言归正传。 在这纷纷扰扰的 Android世界里,如...
认识安卓系统
写这篇文章时想起我的第一部 Android手机 HTC Hero。买回来后,同事告诉我可以去刷机 玩玩。刷机,怎么刷?同事说,你个土人,刷机都不知道,很多刷机论坛的,你去逛逛,挺 简单的。我去逛了逛机锋论坛(那时还不知道 MIUI),打开一看,什么 recovery, radio, root 各种词汇扑面而来,oh my lady gaga,这么复杂。但是为了不被鄙视,而且闲着也是闲着, 还是刷着玩玩吧。后来就结识 MIUI来到了小米。这是题外话,咱们言归正传。 在这纷纷扰扰的 Android世界里,如何找到那条刷机大道呢,或许它只是个传说,我们只是 一直在探索。让我们从零开始来看一看,看能发现点什么。 1. bootloader 当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这 中间发生了些什么呢,我们从下面这张简化了的手机结构图开始: 注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。 大家可以简单的把手机的 ROM存储类比为我们电脑上的硬盘,这个硬盘被分成了几个分区: bootloader分区,boot 分区,system分区等等。后面我们会逐渐介绍各个分区的用途。所 谓的刷机我们可以简单的理解成把软件安装在手机的某些分区中,类似于我们在电脑上安装 Windows系统。 当按下电源键手机上电启动后,首先从 bootloader分区中一个固定的地址开始执行指令, 如图所示,bootloader分区分成两个部分,分别叫做primary bootloader和secondary stage bootloader。Primary bootloader主要执行硬件检测,确保硬件能正常工作后将 secondary stage bootloader拷贝到内存(RAM)开始执行。Secondary stage bootloader会进行一些硬 件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大 家所熟知的通过电源键和其它一些按键的组合,可以进入到 recovery,fastboot或者选择 启动模式的启动界面等。我们在论坛上看到的 bootloader通常指的就是 secondary stage bootloader。不过我们不需要关心太多的细节,可以简单的理解为 bootloader就是一段启 动代码,根据用户按键有选择的进入某种启动模式。 fastboot模式:fastboot是 android定义的一种简单的刷机,用户可以通过 fastboot 命令行工具来进行刷机。比如说 fastboot flash boot boot.img这个命令就是把 boot.img 的内容刷写到 boot分区中。一般的手机厂商不直接提供 fastboot模式刷机,而是为了显示 他们的牛 B之处,总是会提供自己专有的刷机工具和刷机方法。比如说三星的 Odin,摩托 的 RSD,华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接 flash 到各个分区 中。 recovery模式:recovery是 android定义的一个刷机协议。当进入 recovery 模式时, secondary stage bootloader从 recovery分区开始启动,recovery分区实际上是一个简单 的 Linux系统,当内核启动完毕后,开始执行第一个程序 init(init程序是 Linux系统所有 程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。 通过 recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供 一个简单的 recovery刷机,而大名鼎鼎的 CWM Recovery就是一个加入了很多增强功能的 recovery,要想用上 CWM Recovery前提是 recovery分区可以被刷写。大家在论坛上看到的 解锁 bootloader,通常指的就是解锁 recovery或 fastboot,允许刷写 recovery 分区,这 样大家就可以用上喜爱的 CWM Recovery了。 手机除了普通的 CPU芯片以外,还有 MODEM处理器芯片。该芯片的功能就是实现手机必需的 通信功能,大家通常所的刷 RADIO就是刷写 modem分区。 2. 正常启动 当我们只是按下电源键开机时,会进入正常启动模式。Secondary stage bootloader会从 boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是 Linux 内核,最 后是用作根文件系统的 ramdisk。 一般针对每个机型的完整刷机包中会有一个 boot.img文件,这就是 boot分区镜像文件。如 何编辑该镜像文件可以参照这篇文章 http://android-dls.com/wiki/inde ... Re-Pack_Boot_Images。 当 Linux内核启动完毕后,就开始执行根文件系统中的 init程序,init程序会读取启动脚 本文件(init.rc和 init.xxxx.rc)。启动脚本文件的格式大家可以在网上找到很多参考资料, 这里就不写了,而且我们在原厂 ROM上移植 MIUI的原则是不修改 boot分区,因为有一些机 型无法修改 boot分区。 根文件系统中有一个重要的配置文件,叫 default.prop,该文件的内容一般为: # # ADDITIONAL_DEFAULT_PROPERTIES # ro.secure=1 ro.allow.mock.location=1 ro.debuggable=0 persist.service.adb.enable=1。 文件中的每一行对某个属性赋值,在后续的文章中我们还会谈到属性。这里面大家需要注意 的两个属性:ro.secure和 ro.debuggable。如果 ro.secure=0允许我们运行 adb root命令。 在下一篇我们会详细介绍 adb,这是我们做 ROM移植的利器。通常大家说得内核 ROOT指的 就是 ro.secure=0。ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk) 可以授予程序 root用户的权限。ro.deguggable=1允许调试系统 APP。 init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行 system分 区的程序,下一节我们就来看看 system分区的结构。 3. system分区 在讲 system分区之前,我们先来看下面这张 Android的软件系统架构图。 从上到下依次为: 核心应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电话, 音乐等。应用层往下就是开发人员所接触的。 框架层:这一层是 Android系统的核心,它提供了整个 Android系统运作的机制,像窗口管 理,程序安装包管理,开发人员所接触的 Activity, Service, broadcast等等。 JNI层:JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++ 代码来访问底层操作系统的 API。 Dalvik虚拟机:Android开发使用 Java语言,应用程序的 Java代码会被编译成 dalvik虚 拟机字节码,这些字节码由 dalvik虚拟机解释执行。 本地库:本地库一般是由 C/C++语言所开发,直接编译成相应 CPU的机器码,这其中包含标 准 C库,用以绘制图形的 skia库,浏览器核心引擎 webkit等。 HAL:硬件抽象层,为了和各个厂家的不同硬件工作,Android 定义了一套硬件接口,比如 说为了使用相机,厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以独立于不 同的硬件运行。 厂家适配层:本来 Android 定义的 HAL层是直接和厂家提供的设备驱动打交道的,但是目前 厂家不想开源 HAL部分的代码,因此很多厂家都提供了一个我称之为厂家适配层的代码,这 样在 HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用。 内核:这一层就是大家熟悉的 Linux内核,内核中包含有各种硬件驱动,这些驱动不同的手 机厂商不同的手机是不一样的。Linux内核是支持驱动模块化机制的,简单的说就是允许用 户动态的加载或者卸载某个硬件驱动,但是目前来看,手机厂商除了提供 WIFI 驱动单独加 载外,其它驱动都是和内核绑定在一起的。 从这张软件结构图来看,除了内核是放在boot分区外,其它层的代码都是在system分区中。 下面结合这张图来介绍 system分区的主要目录内容: system/app: app 目录下存放的是核心应用,也就是大家熟知的系统 APP,这些系统自带的 程序是不能简单的卸载的,要通过一些特殊的方式才能删除(大家熟悉的一种方法是用 RE 文件管理器)。 system/lib: lib目录下存放的是组成 JNI层,Dalvik虚拟机,本地库,HAL层和厂家适配 层的所有动态链接库(.so文件)。 system/framework: 该目录下存放的是框架层的 JAR 包,其中对 MIUI 移植来说有 3 个最重 要的 JAR 包(framework.jar, android.policy.jar, services.jar)。后续的文章会重点介 绍这 3个包。 system/fonts: 该目录下存放的是系统缺省的字体文件。 system/media:该目录下存放的是系统所使用的各种媒体文件,比如说开机音乐,动画,壁 纸文件等。不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上对应机 型形形色色的教程,这里不再赘叙。 system/bin: 该目录下存放的是一些可执行文件,基本上是由 C/C++编写的。其中有一个重 要的命令叫 app_process下一节单独介绍。 system/xbin: 该目录下存放的是一些扩展的可执行文件,既该目录可以为空。大家常用的 busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录。 system/build.prop: build.prop和上节说得根文件系统中的 default.prop文件格式一样, 都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性 值有一些命名: ro开头的表示只读属性,即这些属性的值代码是无法修改的。 persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。 其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不 会保留。 很多 ROM制作者都会修改一下 build.prop信息,里面的一些以 ro.build开头的属性就是你 在手机设置中的关于手机里看到的。可以通过修改 build.prop文件来将这个 ROM 打上自己 的印记(XXX所修改)。我见过一个只是删了 system/app的一些程序,然后修改 build.prop 中的 ro.build.display.id 和 ro.build.version.incremental中的两个属性值打上自己的 大名的 ROM。 system/etc: 该目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍 微没那么的有规律。一般来说,一些脚本程序,还有大家所熟悉 GPS 配置文件(gps.conf) 和 APN配置文件(apns-conf.xml)放在这个目录。像 HTC 将相机特效所使用的一些文件也放 在这个目录下。 4. Zygote(app_process) 上一节提到 init 会执行一个重要的命令程序叫 app_process,一般大家称之为 Zygote。 (Zygote是卵的意思,所有的 Android进程都是由它生出来的)。Zygote首先会加载 dalvik 虚拟机,然后产生一个叫做 system_server的进程。system_server顾名思义被称作 Android 的系统服务程序,它主要管理整个 android系统。system_server启动完成后开始寻找一个 叫做启动器的程序,找到之后由 zygote 开始启动执行启动器,这就是我们常见到的桌面程 序。 上面描述的是一个相当简化的启动过程,了解这些对于适配 MIUI 基本上就够了,如果大家 对这些想进一步了解的话,请关注市面上各种 Android内幕书籍。 5. data和 cache分区 这一节简单的介绍一下 data 和 cache分区。当我们开机进入桌面程序后,一般来说我们都 会下载安装一些 APP,这些 APP 都安装在 data/app 目录下。所有的 Android 程序生成的数 据基本上都保存在 data/data 目录下。wipe data 实质上就是格式化 data 分区,这样我们 安装的所有 APP和程序数据就都丢失了。 cache分区从名字上来看是用来缓存一些文件的,比如说一些音乐下载的临时文件,或者下 载管理下载的内容基本上放在这个分区。 6. 小结 本章主要是介绍了一下 Android手机的硬软件结构以及主要分区的内容,并简要的介绍了一 些开机启动过程。了解这些内容有助于我们从整体上理解 ROM移植。
/
本文档为【认识安卓系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索