android系统的分区结构

android系统的分区结构

转载

ANTIBili_MC 关注

(一)Android的主要分区

Modem分区bootloader分区boot分区recoverty分区system分区data分区1. modem分区

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

2. bootloader分区

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

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

  fastboot模式:fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具来进行刷机。比如说fastboot flash boot boot.img这个命令就是把boot.img的内容刷写到boot分区中。一般的手机厂商不直接提供fastboot模式刷机,总是会提供自己专有的刷机工具和刷机方法。比如说三星的Odin,摩托的RSD,华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接flash到各个分区中。这种通常称为线刷,是比较原始的方法。当手机处于开不了机的情况下,可以使用此厂家提供的工具进行刷入;

3. boot分区

当我们只是按下电源键开机时,会进入正常启动模式。Secondarystagebootloader会从boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是Linux内核,最后是用作根文件系统的ramdisk。当Linux内核启动完毕后,就开始执行根文件系统中的init程序,init程序会读取启动脚本文件(init.rc和init.xxxx.rc)。

android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:

1)设置一些环境变量

2)创建system、sdcard、data、cache等目录

3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals

4)设置一些文件的用户群组、权限

5)设置一些线程参数

6)设置TCP缓存大小

根文件系统中有一个重要的配置文件,叫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允许我们运行adbroot命令。在下一篇我们会详细介绍adb,这是我们做ROM移植的利器。通常大家说得内核ROOT指的就是ro.secure=0。ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。ro.deguggable=1允许调试系统APP。

  

  init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行system分区的程序

4. recovery分区

    recovery模式:recovery是android定义的一个标准刷机协议。当进入recovery模式时,secondarystagebootloader从recovery分区开始启动,recovery分区实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery刷机,多只能进行upate的操作。不能进行卡刷;如果想要自已卡刷,则需要事先刷入第三方的Recovery,然后选择刷机包。

5.system分区

我们把这张android的图贴在这里,除下面的linux Kernel部分位于boot分区外,在其上的Library、runtime、framework、core application都是处于system分区


0、/system/priv-app

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

1、/system/app

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

2、/system/framework

这里放 Android 系统的核心程式库,就是上图中application framework部分的库。像是core.jar, framework-res.apk, framework.jar等等。

3、system/lib

上图中Library部分,存放的是所有动态链接库(.so文件),这些SO是JNI层,Dalvik虚拟机,本地库,HAL层所需要的,因为系统应用/system/app下的apk是不会解压的SO到程序的目录下,所以其相应用的SO,都应放在/system/lib 下面。当一个系统apk的SO加载时,会从此目录下寻找对应用的SO文件;

4、/system/media/audio/(notification, alarms, ringtones, ui)

这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是 ogg 格式。

5、/system/bin

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

6、system/xbin

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

7、system/build.prop

build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:

  ro开头的表示只读属性,即这些属性的值代码是无法修改的。

  persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。

  其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。

8、system/etc

目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律。一般来说,一些脚本程序,还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。像HTC将相机特效所使用的一些文件也放在这个目录下。

6. Data分区

      当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP,这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下。wipedata实质上就是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了。

1、/data/app

放的是使用者自己安装的应用程式执行档(*.apk)。

2、/data/data/<app-package-name>

当你在程式中用Context.openFileOutput() 所建立的档案,都放在这个目录下的files 子目录内。而用Context.getSharedPreferences() 所建立的preferences 档(*.xml) ,则是放在shared_pref 这个子目录中。

3、/data/anr/traces.txt

当你的应用程式发生ANR (Application is Not Responding) 错误时,Android 会自动将问题点的code stack list 写在这个档案内,你直接用cat 命令就可以看他的内容。

4、/data/system/dropbox/***.txt

  主要是系统内apk发生crash时写的日志文件,主要有system_app_crash、data_app_crash等日志。

5、/data/location/gps

是给GPS location provider 用的。其中的 properties 档案的内容如下:

6、/data/system/location/location.gps

一般文字档。主要是记录最后的经纬度座标。 LocationManager.getLastKnownLocation() 就在来这抓值的。

7、/data/property/persist.sys.timezone

这个档案也是个一般文字档。主要是记录目前系统所使用的时区。在我的模拟器上,他记录着Asia/Taipei 这个字串。

7、映像文件打包方式

system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:

file ramdisk.img

输出:ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009

Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来:

将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令

gunzip ramdisk.img.gz

然后新建一个文件夹,叫ramdisk吧,进入,输入命令

cpio -i -F ../ramdisk.img

这下,你就能看见并操作ramdisk里面的内容了。

然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。

1. oem分区是为全球定制功能而增设的一个分区,里面增加了对应不同国家的各种配置参数,如某些功能开关,有些区域要求打开,其它的则要求关闭,此时就需要用到oem.img,否则就需要出两个版本;

2. systeminfo是专门为了添加system分区检查而设立的分区,system分区检查是指检查system分区的资源是否被更改,比如apk被删减或者某些权限被更改,目的是为了防止system被更改导致手机被监控。而systeminfo分区存放一个check.bin文件,此文件里面存储所有system文件和其对应的sha1值。

3. persist分区是用于保存FRP(factory reset protcect)功能用到帐号、密码等受保护的信息,避免在恢复出厂设置后被清空。 什么是Persist分区:

Persist分区是系统的一个ext4分区,由于我们的线刷包都不包含这个分区,所以你需要自己动手修复,这个分区内包含DRM相关文件、传感器注册表、你的wifi、蓝牙、mac地址都在这里了。

一般解锁手机都要强制禁止访问PERSIST分区中的账号信息,因此需要配合修改版的系统,让系统不读取账号信息也能工作(原生安卓表示你们都是渣渣)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 1:InputChannel提供函数创建底层的Pipe对象 2: 1)客户端需要新建窗口 2)new ViewRo...
    自由人是工程师阅读 5,201评论 0 18
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,670评论 0 3
  • Android 通常有以下分区: System分区: 就是我们刷ROM的分区 Data分区: 分区就是我们装A...
    Ed_Lannister阅读 2,145评论 0 0
  • 冥冥之中,似乎总有一股力量,驱使我们去寻找! 仿佛,必须找到,生命才可以开始安宁,才开始感觉,完整。 或许,上天一...
    keeleybj阅读 403评论 0 0
  • 【导读】红心猕猴桃是一种食用与药用为一体的高级营养保健水果哦,想要健康,想要美肤的亲们可以多吃点。根据数据显示,每...
    民间味觉阅读 722评论 0 0