android系统的分区结构
android系统的分区结构
转载
ANTIBili_MC 关注
华为linux系统下载(⼀)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程序会读取启动脚本⽂件(和)。
android内核挂载/nfsroot/androidfs之后,根据,来初始化并装载系统库、程序等直到开机完成。脚本包括了⽂件系统初始化、装载的许多过程。的⼯作主要是:
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
  k.location=1
  ro.debuggable=0
  persist.able=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 配置⽂件(f)和APN配置⽂件(l)放在这个⽬录。像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 ⼦⽬录内。⽽⽤SharedPreferences() 所建⽴的preferences 档(*.xml) ,则是放在shared_pref 这个⼦⽬录中。
3、/data/
当你的应⽤程式发⽣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
⼀般⽂字档。主要是记录最后的经纬度座标。 LastKnownLocation() 就在来这抓值的。
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复制⼀份到任何其他⽬录下,将其名称改为,并使⽤命令
gunzip
然后新建⼀个⽂件夹,叫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分区中的账号信息,因此需要配合修改版的系统,让系统不读取账号信息也能⼯作(原⽣安卓表⽰你们都是渣渣)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。