声明

  • 其实我在刚开始接触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

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

转载于:https://my.oschina.net/XiaoMaPedro/blog/3062345

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

  1. [日更-2019.4.8、4.9、4.12、4.13] cm-14.1 Android系统启动过程分析(一)-init进程的启动、rc脚本解析、zygote启动、属性服务...

    2019独角兽企业重金招聘Python工程师标准>>> 声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的. 本文 ...

  2. [日更-2019.4.26、27、28] cm-14.1 Android系统启动过程分析(四)-应用程序进程启动过程...

    2019独角兽企业重金招聘Python工程师标准>>> 声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的: 本文 ...

  3. [日更-2019.5.2、3、4] 关于JVM的概略分析

    2019独角兽企业重金招聘Python工程师标准>>> 声明 上一篇写了[日更-2019.4.29.30] 关于JVM.Dalvik.ART的基础分析 ,本篇就单独对JVM进行一下分 ...

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

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

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

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

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

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

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

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

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

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

  9. iphone上安装android系统,如何在iPhone上安装Android操作系统?

    关于"如何在iPhone上安装Android操作系统?"相关问题,库巴帮助小帮手为您解答. 本文是教各位如何安装谷歌的Android操作系统到iPhone上.事先警告,动手能力不强 ...

  10. android 系统数据清理工具下载,Coolmuster Android Cleaner(数据清理软件)

    CoolmusterAndroidCleaner是一款针对安卓系统专业打造的清理软件,可以帮户用户清理应用程序缓存.应用程序cookie.应用程序临时文件.应用程序崩溃日志.下载的临时文件以及照片缓存 ...

最新文章

  1. OpenGL中摄像机矩阵的计算原理
  2. css怎么设置圆角背景,CSS新特性:圆角边框多栏Gird布局背景设置
  3. .net ajax批量删除,asp.net 全部选中与取消操作,选中后的删除(ajax)实现无刷新效果...
  4. Jsp简单入门与Jsp实用教程总结
  5. UE4如何贴混合贴图_八猴,Unity,UE4,还原SubstancePainter贴图
  6. selenium3降级到selenium2详细步骤
  7. Spring Boot 自定义注解实现AOP切面织入
  8. 设计思维(Design Thinking)
  9. python实现论文查重系统_python 手把手教你基于搜索引擎实现文章查重
  10. 如何搭建ftp服务器实现文件共享
  11. 计算机密码学论文,密码学论文写作范例论文
  12. uniapp引入支付宝原生扫码插件步骤详解
  13. R语言基础编程技巧汇编 - 13
  14. app开发已经过时了?app开发行业分析
  15. hrbust 哈理工oj 1633 word!word!【欧拉路、欧拉回路的有向图判断】
  16. 论文投稿指南——中文核心期刊推荐(航空、航天)
  17. DailyFi - 9.15|PrimeDAO 完成 200万美元种子轮融资,Paradigm 研究员发布新 NFT 碎片化产品...
  18. 基于Qt的在线答题系统
  19. 某程序员周六给女朋友PS 证件照竟被质疑? 最后交出完美答卷。
  20. MediaFire – 美国无限容量免费网络硬盘

热门文章

  1. 从软件工程师到有赞新零售技术负责人,34岁李星专访
  2. 已知从1970年1月1日0分0秒到目前的总秒数计算当前时间
  3. 凯文·凯利又出预言:未来科技将由这四股力量推动!
  4. 热血江湖网通一服务器不稳定,《热血江湖》网通新服 千呼万唤始出来
  5. 高等数学学习笔记——第五十四讲——向量的数量积、向量积和混合积
  6. 无线计算机鼠标,无线鼠标
  7. Halcon union_adjacent_contours_xld详解
  8. 封装仿支付宝密码输入效果
  9. tp5简单的图片上传
  10. rust发射台主楼_各专业分类词库(完全).doc