声明

  • 其实我在刚开始接触Android时给手机刷机,很好奇Android的刷机包里面怎么这么多img文件?而且每个img要刷入对应的分区,就有点头大了,就好奇一个破手机分这么多区干什么?;
  • 再加上今天同事问我相关分区的事情,我又细研究了下关于这部分东西,同时很多借鉴了网上很多开源知识及相关书籍内容;

0 写在前面的

    以我的Nexus5手机的cm-14.1的Android AOSP代码来说,编译完成后主要生成的img文件有:boot.img、cache.img、recovery.img、system.img、userdata.img

     而一般刷机时会写一个刷机脚本,执行它刷机就可以了。

#!/bin/bash
echo "Flashing build. If nothing mentions that it flashed anything and it looks stuck, make sure you have the drivers installed."
fastboot flash boot ./boot.img
fastboot flash system ./system.img
fastboot flash recovery ./recovery.img
fastboot flash cache ./cache.img
fastboot flash userdata ./userdata.imgfastboot reboot

    其实,上面列出的就是通常说的Android的五大分区,分区是文件系统的基础,只有在不同分区里才能实现不同的文件系统(就像电脑磁盘有NTFS和FAT,只能在不同的盘里面修改文件系统,而不能在一个盘里分出两种文件系统来,一个道理),手机/平板上的一整块Flash存储器被切割成不交叉的部分,每部分都可以单独格式化,用于不同的使用目的。比如:/system分区就是用来安装操作系统的地方;/data分区就是用来给用户存储数据用的。

    说道Flash就不等不说一个坑,以前买U盘买了个16GB的,买回来插在电脑上一看也就14GB左右,因为我们认为的1GB = 1024x1024x1024B,而Flash商家的1GB = 1000x1000x1000B。

    言归正传,正常的手机/平板的分区可不止这5个,有的厂商的手机分区多达20几个。虽然分这么多区,并不是每个区都会被系统mount上来给用户看到,而且用户也能且仅能向一个分区写入数据(那就是/data分区),以我接触到的一部联发科平板来说,它的分区如下:

      

1 那么问题来了–Android系统为何会分这么多区?

    采用多分区方案的原因是移动设备需要安全和自由,安全方面比如说系统启动时靠的是/boot分区中的内核镜像启动的,在系统升级时,升级包会下载到/cache分区,在刷机时系统进入的是/recovery分区中的内核镜像启动升级的,各个分区各司其职,相互不会冲洗掉彼此。自由方面指的是一些比如像modem或其他组件(比如bootloader)等需要拥有自己独立存储空间来存储配置文件或镜像。

    通过查看/proc/partitions文件中的内容,可查看Android设备的分区映射情况,其中记录了系统中所有块设备:

hammerhead:/ # cat /proc/partitions
major minor  #blocks  name179        0   15388672 mmcblk0179        1      65536 mmcblk0p1179        2       1024 mmcblk0p2179        3        512 mmcblk0p3179        4        512 mmcblk0p4179        5        512 mmcblk0p5179        6        512 mmcblk0p6179        7       2048 mmcblk0p7179        8       1024 mmcblk0p8179        9        512 mmcblk0p9179       10        512 mmcblk0p10179       11        512 mmcblk0p11179       12       3072 mmcblk0p12179       13       3072 mmcblk0p13179       14        512 mmcblk0p14179       15      16384 mmcblk0p15179       16      16384 mmcblk0p16179       17       3072 mmcblk0p17179       18      22528 mmcblk0p18179       19      22528 mmcblk0p19179       20      22528 mmcblk0p20179       21       3072 mmcblk0p21179       22        512 mmcblk0p22179       23        512 mmcblk0p23179       24        512 mmcblk0p24179       25    1048576 mmcblk0p25179       26      30720 mmcblk0p26179       27     716800 mmcblk0p27179       28   13404138 mmcblk0p28179       29          5 mmcblk0p29179       32       4096 mmcblk0rpmb

    还可以使用df或mount命令查看所有的mount点:

hammerhead:/ # df
Filesystem            1K-blocks   Used Available Use% Mounted on
tmpfs                    949800    488    949312   1% /dev
tmpfs                    949800      0    949800   0% /mnt
/dev/block/mmcblk0p25   1033516 593500    440016  58% /system
/dev/block/mmcblk0p28  13162172 382548  12779624   3% /data
/dev/block/mmcblk0p27    706392  12872    693520   2% /cache
/dev/block/mmcblk0p16     16164   4292     11872  27% /persist
/dev/block/mmcblk0p1      65488  45392     20096  70% /firmware
/dev/fuse              13162172 382548  12779624   3% /mnt/runtime/default/emulated
/dev/fuse              13162172 382548  12779624   3% /mnt/runtime/read/emulated
/dev/fuse              13162172 382548  12779624   3% /mnt/runtime/write/emulated

2 文件系统

    目前Flash采用的几乎都是eMMC和MMC,所以后面的Android4.4以后的文件系统普遍升级到了Linux ext4,抛弃了弊端很多的YAFFS文件系统(具体为啥抛弃它就先不管了,感兴趣可以自行百度),而且ext4文件系统自从Linux2.6.27已经成为Linux默认文件系统,因为它经历过很多良好测试而稳定的文件系统。

    但是,ext4并不是针对Flash进行优化的文件系统,所以三星设计了另外一个文件系统F2FS(Flash Friendly File System),某些厂商将此文件系统用在/data分区上,此文件系统专为NAND Flash优化,据说在随机写请求上的性能提升超过了Ext4,但目前还是大部分厂商依然采用ext4文件系统。Linux 3.8已经将F2FS合并入主线版本,高版本内核的Android系统是可以使用的。

    采用文件系统的好处是只要它们能够正常工作,用户就可以完全不用管到底底层使用的是什么文件系统,对于不同的文件系统,Android提供了对应各自文件系统的默认检查/修复的二进制程序(e2fsck、fsck_msdos和fsck.f2fs),当文件系统被vold或init进程mount时这些二进制程序会被自动执行检查。

3 Android设备的分区

    Android设备中的各个分区都是有名字的(通常看不懂名字啥意思),不同的芯片组和制造商还会使用不同的分区,甚至会给功能完全一样的分区取不同的名称。

3.1 标准Android分区

    这类分区都有一个共同的特性:它们是被硬编码到Android系统自身中的, 会出现在源码树的各个不同的位置上。这些分区构成了操作系统的核心。

    标准分区基本上都是可以mount,仅有boot和recovery分区是例外。

分区 文件系统 作用
boot bootimg 内核+ initramfs。含有内核和l默认启动过程中所需的initramfs
cache Ext4 用来进行系统升级或recovery
recovery bootimg 用于把系统启动到recovery模式下,内核将系统启动至recovery 模式的initramfs
system Ext4 用于存放操作系统的二进制可执行文件和框架
data Ext4/F2FS 存放用户数据和配置文件

    Android设备中有一张文件系统mount表,位于/system/etc/vold.fstab或/fstab.hardware目录下,在系统启动过程中会被vold(卷守护进程)加载并指出了哪些分区应该被自动mount上来。

3.2 芯片组专用分区

    芯片组制造商经常需要一些分区用来存储支持芯片组工作的程序和数据。以高通为例,它的MSM芯片组分区如下所示(网上盗图):

       

3.3 厂商专用分区

    Android设备上能找到的其他分区就是厂商专用的了。它们根据自己的目的(大多用于设备配置维护和升级操作)来使用这些分区。这些分区使用的文件系统格式多为专用格式(再从网上盗图一张):

       

Enjoy it

    写的有点粗略,不过分区的大概框架就是这个意思了。下一篇写下各个分区里面存放的都是些什么?

Android 系统的分区和文件系统(一)--Android分区的大概框架相关推荐

  1. 把android系统装到sd卡,在Android系统中将软件安装在SD卡的方法

    这样就可以装上更多自己喜欢的软件了. 在Android手机刚面世的时候,系统版本1.5至后来的2.1都不支持把程序装到SD卡上,由于系统内置的空间较小,装不了太多软件,于是人们 想出App2SD的概念 ...

  2. Android 系统(57)---深入理解Android输入系统

    <深入理解Android 卷III>第五章 深入理解Android输入系统 <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Fra ...

  3. 树莓派2b刷android系统,树莓派2B如何快速安装Android TV

    最近,由于我内网NAS升级,性能已经完全足够跑原来跑在树莓派2B上的服务了,所以,我的树莓派就光荣退役了-不过,前几天上网的时候看到树莓派2B也能安装Android,但是过程比较复杂,于是我决定用这题 ...

  4. android系统的iphone,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

  5. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名

    刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到 /system/app/*,咨询导师,得到反馈 app 需要使用系统的权限 在 Androi ...

  6. Android 系统(207)---如何自学 Android?

    如何自学 Android? 原文:gityuan.com 看到很多人提问非科班该如何学习编程,其实科班也基本靠自学.有句话叫"师傅领进门修行靠个人",再厉害的老师能教你的东西都是很 ...

  7. android系统功耗优化(2)---Android最佳实践之性能 - 电池续航时间优化

    Android最佳实践之性能 - 电池续航时间优化 Doze和App Standby的优化(API23) 参考地址:http://developer.android.com/training/moni ...

  8. android系统手机流量控制方法amp;,基于Android的手机流量控制软件全解.doc

    基于Android的手机流量控制软件全解 基于Android的手机流量控制软件 设计与实现 1 绪论 1.1 手机移动互联网进展 这些年,移动通信和互联网成为当今世界发展最快.市场潜力最大.前景最诱人 ...

  9. 手机android系统问题怎么解决方案,4解决Android系统崩溃问题的解决方案

    第1部分:如何抢救Android系统崩溃的数据? 当您遇到Android系统崩溃时,在寻找解决方案以解决问题之前,请确保检索存储在设备上的所有数据和信息.这可能听起来很乏味,但确实是非常重要的一步. ...

  10. 修复 Android 系统问题的 9 款最佳 Android 手机维修软件和应用

    您可能会对新的 Android 手机印象深刻,因为它令人兴奋的性能.然而,随着时间的推移,您可能会发现系统与过去不一样.您可能会遇到屏幕无响应. Android 应用程序崩溃.连接问题.电池耗尽等现象 ...

最新文章

  1. WPF怎么寻找在ItemTemplate内部的各种控件
  2. 编译安装nginx1.9.7+php7.0.0服务器环境
  3. 高通5G旗舰升级!骁龙855Plus发布,主打游戏和AI;网友:牙膏厂
  4. 三次握手和四次断开问题
  5. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
  6. 3D网页游戏场景打包与加载
  7. [Part 3]API对接,这些坑你一定掉过!
  8. 致远表单代办状态删除
  9. PL/SQL Developer使用技巧、快捷键
  10. win10系统更新补丁时进度条一直卡在0%不动的解决方案
  11. python爬取美女图片
  12. 计算机消极影响英语作文,大学英语作文:电脑游戏的危害
  13. linux下制作dos启动u盘启动,在Linux系统下创建FreeDOS可启动U盘
  14. OpenCV入门学习笔记之常用的图像处理操作
  15. vue-giant-tree模糊搜索,自动展开匹配子节点,再次搜索可重新加载节点
  16. 将html导出为PDF文件(为PDF加盖章)
  17. 计算机怎么更换硬盘,如何更换电脑新硬盘无需重装系统_换硬盘不重装系统方法...
  18. throw语句以及throw “error“ 和 throw new Error(“error“)的区别
  19. The 19th Zhejiang Provincial Collegiate Programming Contest
  20. iPhone越狱开发环境搭建

热门文章

  1. python中无法安装xpath库,Python爬虫 | xpath的安装
  2. 关于小熊派Cat1资料收集
  3. java自学笔记(4)-Stanford CS106A 弹球动画 20.9.9
  4. iphone图片编辑画笔_iPhone手机怎么编辑图片?还不知道的话真的要了解一波了~...
  5. webform list页面执行删除操作,使用ajax请求
  6. 求推荐三本左右 高级的java开发者的相关书籍。类似 大型网站技术架构:核心原理与案例分析+李智慧 之类的书籍。...
  7. E575: viminfo: Illegal starting char in line:
  8. 服务器开发系列(四)——网络基础
  9. QQ被盗恢复原来QQ的好友有妙招
  10. Github项目:AI消除马赛克实战