最早以前的手机基本都是下载一个刷机软件(像刷机精灵、刷机大师),一键root,一键刷机,这就以前的傻瓜式刷机,至少我在高中(2015年开始接触)的时候也是这么干的。那时候,好像有种手机开机界面会出现“大神”,有时候莫名其妙开不开机,只能重新刷就好了。(别问为什么不去手机店修,玩手机都得偷偷摸摸的好吗)。后来发现,通过这种方式,手机能够增加一些额外没有功能,甚至是卸载掉最早手机上买回来就有的流氓软件。最初,自己也是在摸爬滚打的摸索着,还烧了两部手机,虽然现在很辣鸡,当时还是很心疼的。当然,能够成为爱好,还是靠了酷安里的一群人,隐藏大神很厉害!

现在就来了解一下安卓手机的分区和一些刷机的术语吧。

手机的ROM存储分成了几个分区:bootloader分区,boot分区,system分区等等(如上图)。刷机我们可以简单的理解成把软件安装在手机的某些分区。

modem分区

实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否则会造成通话不稳定;

bootloader分区和boot分区

bootloader的primarybootloader部分,主要执行硬件检测,确保硬件能正常工作,然后将secondarystagebootloader拷贝到内存(RAM)开始执行。

Secondarystagebootloader会进行一些硬件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大家所熟知的通过电源键和其它一些按键的组合,可以进入到recovery,fastboot或者选择启动模式的启动界面等。

我们经常所说BL锁其实就是Bootloader Lock,其实就是手机主板上加了一串密码。

fastboot模式:fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具(eg.:fastboot flash boot boot.img)来进行刷机。一般的手机厂商不直接提供fastboot模式刷机,会提供自己专有的刷机工具和刷机方法。万变不离其宗,本质将软件直接flash到各个分区中。通常,和它联系最紧密的就是线刷。(OTA 在智能手机中即是我们熟悉的设置—关于手机—系统更新,其全称是 Over-the-Air technology,简单来说就是无需连接电脑,在线下载和升级,与之对应的是 SD 卡升级(把 OTA 包放到 SD 卡上手动升级,卡刷)。)

recovery分区

recovery模式:recovery是android定义的一个标准刷机协议。当进入recovery模式时,secondary stage bootloader从recovery分区开始启动,recovery分区实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux内核启动的第一个用户级进程)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。这是recovery刷机。(常见的TWRPMagisk

正常启动模式。Secondary stage bootloader会从boot分区开始启动。boot分区的格式是固定的,首先是一个头部,然后是Linux内核,最后是用作根文件系统的ramdisk。
    一般针对每个机型的完整刷机包中会有一个boot.img文件,这就是boot分区镜像文件。当Linux内核启动完毕后,就开始执行根文件系统中的init程序,init程序会读取启动脚本文件(init.rc和init.xxxx.rc)。根文件系统中有一个重要的配置文件,叫default.prop,该文件的内容一般为:

#
# ADDITIONAL_DEFAULT_PROPERTIES
# ro.secure=1
ro.allow.mock.location=1
ro.debuggable=0
persist.service.adb.enable=1。

如果ro.secure=0允许我们运行adb root命令。

ro.deguggable=1允许调试系统APP

通常大家说得内核ROOT指的就是ro.secure=0。ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。 init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行system分区的程序。

system分区

核心应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电话,音乐等。应用层往下就是开发人员所接触的。

框架层:这一层是Android系统的核心,它提供了整个Android系统运作的机制,像窗口管理,程序安装包管理,开发人员所接触的Activity, Service, broadcast等等。

JNI层:JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API。

Dalvik虚拟机:Android开发使用Java语言,应用程序的Java代码会被编译成dalvik虚拟机字节码,这些字节码由dalvik虚拟机解释执行。(在Android4.4,被ART替换掉了之前一直使用的Dalvik虚拟机,不在本文中过多介绍)至于Dalvik虚拟机,我是对比着Java种的虚拟机来理解的。Java种的虚拟机JVM是把平台无关的.class里面的字节码翻译成平台相关的机器码,来实现跨平台。当你启动一个Java程序,一个虚拟机实例就诞生了;程序退出时,这个实例也随之消亡。Dalvik则是安卓中的JVM。它是Google公司自主设计的运行于Android平台的Java虚拟机。JVM是归Oracle公司所有的,运行在基于PC机上的Window 和Linux操作系上的java虚拟机。Google工程师之所以设计Dalvik虚拟机主要有以下两点原因:若要使用JVM需要获得授权许可,这意味着需要缴纳大量的费用;JVM主要是针对于CPU快,内存大的传统PC机,不适合移动设备。和jVM很像,只不过他编译的其实是.dex文件(本质上是多个.class),另外为了进一步提高运行速度,Dalivk虚拟机可以运行八进制的文件.Odex。Dalvik允许多个实例,每一个实例作为一个独立的linux进程执行,可以防止一个程序的崩溃导致所有程序都崩溃。来张图片更明了:

本地库:本地库一般是由C/C++语言所开发,直接编译成相应CPU的机器码,这其中包含标准C库,用以绘制图形的skia库,浏览器核心引擎webkit等。

HAL:硬件抽象层,为了和各个厂家的不同硬件工作,Android定义了一套硬件接口,比如说为了使用相机,厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以独立于不同的硬件运行。

厂家适配层:本来Android定义的HAL层是直接和厂家提供的设备驱动打交道的,但是目前厂家不想开源HAL部分的代码,因此很多厂家都提供了一个我称之为厂家适配层的代码,这样在HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用。

内核:这一层就是大家熟悉的Linux内核,内核中包含有各种硬件驱动,这些驱动不同的手机厂商不同的手机是不一样的。Linux内核是支持驱动模块化机制的,简单的说就是允许用户动态的加载或者卸载某个硬件驱动,但是目前来看,手机厂商除了提供WIFI驱动单独加载外,其它驱动都是和内核绑定在一起的。

刷机的机友们,对RE管理器一定不陌生,尤其是那些习惯用第三方ROM的伙计。除了这个分区的组成,补充一下,该分区的一些路径,

/system/priv-app 特权App,比system_app权限还要高,其不仅System_app标识是true,同时还置了Priv-app标识。

/system/app  核心应用程序档(*.apk),都是放在这。像是Phone、Alarm Clock, Browser, Contacts 等等。

/system/framework 这里放 Android 系统的核心程式库。

/system/lib上图中Library部分,存放的是所有动态链接库(.so文件),这些SO是JNI层,Dalvik虚拟机,本地库,HAL层所需要的,因为系统应用/system/app下的apk是不会解压的SO到程序的目录下,所以其相应用的SO,都应放在/system/lib 下面。
/system/media/audio/(notification, alarms, ringtones, ui) 这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是 ogg 格式。

/system/bin存放的是一些可执行文件,基本上是由C/C++编写的。(有一个重要的命令叫app_process。一般大家称之为Zygote。(Zygote是卵的意思,所有的Android进程都是由它生出来的)。Zygote首先会加载dalvik虚拟机,然后产生一个叫做system_server的进程。system_server顾名思义被称作Android的系统服务程序,它主要管理整个android系统。system_server启动完成后开始寻找一个叫做启动器的程序,找到之后由zygote开始启动执行启动器,这就是我们常见到的桌面程序。)

/system/xbin存放的是一些扩展的可执行文件,既该目录可以为空。大家常用的busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录。

/system/build.propbuild.prop和根文件系统中的default.prop文件格式一样,都称为属性配置文件。
/system/etc目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律。GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。

data和cache分区

当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP,这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下。wipe data实质上就是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了。作为一个刷基友来说,双清肯定都干过,其实擦除的也就是这一部分数据。

【拓展:

双清就是 TWRP 的恢复出厂设置,跟手机系统的恢复出厂设置还有点不同,它会卸载所有用户安装的应用,但保留 SD卡的文件。

三清就是手机系统所谓恢复出厂设置,删除用户下载的应用也删除 SD 卡的文件。

四清则是在三清的基础上把手机系统也删除掉,除非你确定手机里有完全可用的 ROM,不然用不着清理那么干净。

FC,Force Close,即强制退出也叫闪退。如果是第三方应用闪退那就是应用自己的问题,如果是系统本身一些组件闪退那就说明当前系统不稳定,需要更换了。

变砖,一般是系统文件被删除或损害导致无法开机,当然硬件损坏也会变砖。

救砖:刷机失败,手机完全没反应,变板砖了,拯救手机。通常玩的比较六的机友会,使用9008模式救砖,这是一种利用9008端口物理线刷的方式)

Kaspar温馨提示:刷机一时爽,翻车火葬场。数据及时备份,谨慎行车!

Android手机的分区以及一些刷机术语的了解的更多相关文章

  1. 谷歌pixel手机解BL锁、刷机、破解电信(史上最详细的帖子)

    本文根据网上已有内容进行整理,对每一个步骤都进行了实践,运气爆棚,几乎没有出现什么重大错误,小错误也进行了很好地解决.因此,十分感激那些为折腾google pixel的IT爱好者,为我提供了无穷的帮助 ...

  2. (转)Android刷机的一些知识整理

    刷机概述刷机原因刷机可以升级和破解固件(在Android上:即可以升级系统,更改系统,获取Root权限):破解系统的原因①安装第三方软件不需要签名,不受证书的束缚:②修改系统的文件,达到系统的瘦身,以 ...

  3. 手机刷机软件与ROM的盈利模式分析

    一. 智能手机的兴起不过短短几年时间,更新迭代已经让实体键盘成为回忆.智能手机带来的是人们生活习惯的改变,对于手机的重度依赖,是好是坏不去评价.智能手机相对于之前的手机最大的改变不仅仅是屏幕的飞速变大 ...

  4. android 与 小米1S刷机学习

    本文内容为本博客作者原创,转载请注明出处或者发私信. [名词] 1.ROM包 :安卓手机系统,以.ZIP结尾,类似windows的 win7系统包,300M-700M不止 2.卡刷(Recovery模 ...

  5. Android刷机

    1.安装第三方recovery 下载自己手机适配的recovery包 https://twrp.me/lg/lgnexus5.html fastboot 卡在 waiting for device $ ...

  6. 小米手机刷机工具MiFlash怎么用

    刷机包的获取:直接登陆MIUI系统官网(miui.com),在其“下载”栏目中根据手机类型找到对应的刷机包进行下载.   接下来就需要下载“小米手机刷机工具MiFlash”程序,可以直接从以下地址中获 ...

  7. [android]不解锁刷机

    本人因为误操作进入andriod recovery模式,显示failed to boot 2,致手机无法恢复出厂值, 当时那叫一个郁闷.上论坛搜寻无数,唉让刷底包的无数(在此不解释),万恶的刷底包. ...

  8. [转]设置Android手机以使用ARM Streamline进行性能分析(二)

    原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位   Posted by Fang Bao, Leave C ...

  9. 使用fastboot刷机流程【转】

    本文转载自:http://www.voidcn.com/blog/Qidi_Huang/article/p-6236224.html [准备工作] 首先需要准备好刷机包,可以是自己编译的,也可以是从别 ...

随机推荐

  1. install_config

    #! /bin/bash REPO='10.10.238.114:4507' zabbix='10.10.238.110' osmaster=`cat /etc/redhat-release |awk ...

  2. 通过三层交换机实现不同VLAN间的通信

    主机的IP地址以及子网掩码已列出,下面将讲解如何配置利用三层交换机来实现不同VLAN间的相互通信 SW1的命令: en  //进入特权模式 conf  t   //全局模式 vlan 10    // ...

  3. 洛谷 P4017 最大食物链计数 题解

    P4017 最大食物链计数 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧 ...

  4. 缺失值处理(Missing Values)

    什么是缺失值?缺失值指数据集中某些变量的值有缺少的情况,缺失值也被称为NA(not available)值.在pandas里使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值 ...

  5. vue子组件与子组件之前传值-----最简单办法

    1.在main.js中定义一个值(红色为重点) new Vue({ el: '#app', data: { Bus: new Vue() }, router, store, render: h =&g ...

  6. Java连接excel实现:通过姓名查找id和通过id查找姓名

    注意每个方法结束都要关闭workbook: 还有getIdbyname()方法中字符串flag与name的比较,一定要用equals()方法!!!: 剩下的不多解释,注释都在代码中: import j ...

  7. 【Excel】多条件查找

    例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C ...

  8. Lomok @Data使用

    看了廖师兄的Springboot视频发现很多很好玩的小工具,lombok就是其中一个.lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来 ...

  9. SDN第七次上机作业

    1.补充并运行basic代码 任务是实现基础的交换机转发数据包功能 补充后代码如下: /* -*- P4_16 -*- */ #include <core.p4> #include < ...

  10. Redis的常用JavaAPI(Jedis)实现

    一.  pom依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency> & ...