`
shangjava
  • 浏览: 1245209 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android-vold源码分析之格式化SD卡(10)

 
阅读更多
作者:gzshun. 原创作品,转载请标明出处!
来源:http://blog.csdn.net/gzshun


本文开始讨论sd卡的格式化功能,平时使用windows操作系统,也经常格式化磁盘。涉及到的
操作有这几步:
1.将分区信息写到硬盘的第一个设备节点的MBR结构中的分区表;
2.格式化分区到指定的文件系统类型。

MBR中存放分区表的位置在446-509,占用了64字节,MBR结构只支持4个主分区,所以

有4个16字节的区域,先简要说明一下MBR的分区表的结构:


从这个表格可以看出,相对于446-509的分区表区域,每个主分区的第5个字节存放的是文件
系统标志位,用来识别什么分区,用fdisk工具查看一下,有如下文件系统对应的十六进制标志:


若需要读取这些文件系统标志,只需读取MBR的450个位置,占用一个字节大小。

扯得太远了,回到正题,本文是要分析Android格式化sd卡的功能,在格式化部分,涉及到
了系统的一些函数,与vold无关,简单的说明一下即可。
Android系统在格式化sd卡的时候,首先会判断sd卡是否存在分区,如果sd卡不存在分区,
那么需要重新初始化MBR区域,所以上面简要的介绍了MBR结构中分区表的区域。


格式化函数两个主要工作交给了initializeMbr和Fat::format函数:
1.initializeMbr函数负责初始化MBR;
2.Fat::format函数负责格式化分区。
先来看initializeMbr函数的初始化工作:


这里贴出一些重要的结构体:


初始化完成后,将该结构体变量pinfo通过apply_disk_config函数进行设置:


该函数先打开sd卡的设备节点,然后将MBR的初始化信息写到第一个block(512B)中,
这里涉及到非常多函数,不在vold的讨论范围。
写完MBR后,就要对分区进行格式化,要格式化成FAT32格式,Fat::format函数直接调用
系统命令newfs_msdos来格式化新分区,检测磁盘是,Fat::check函数直接调用系统命令
fsck_msdos来检测分区。

最后格式化完成功,通知Framework,sd卡处于空闲状态:

然后,Framework又要重复挂载和卸载的操作了。
下篇文章介绍Android系统与电脑的连接,OTG功能,全称on-the-go。
待续。。

分享到:
评论

相关推荐

    Android-vold源码分析

    vold的存在使得Android系统能够更加灵活地管理和响应外部存储设备的变化,如SD卡的插入与移除。 #### 二、vold的工作流程与结构 vold在Android系统中的工作流程可以分为几个关键步骤: 1. **Linux Kernel**:当...

    android-vold.rar_android_android vold_vold

    在Android系统中,`vold`(Volume Daemon)是一个至关重要的服务,它负责管理设备的存储空间,包括内部存储和外部存储(如SD卡)。`vold`在系统启动时运行,提供对文件系统的挂载、卸载以及权限管理等功能。通过对`...

    android-vold.rar_android

    在Android操作系统中,Vold(Volume Daemon)是一个至关重要的组件,它负责管理设备的存储系统,包括内部存储、外部SD卡以及各种类型的USB存储设备。Vold作为系统服务运行在特权用户空间,确保了对存储设备的访问...

    android-vold架构[收集].pdf

    Android Vold(Volume Daemon)是Android系统中的一个重要组件,它主要负责管理移动设备上的外部存储设备,如SD卡和USB存储设备。Vold作为一个本地服务,监控并响应这些存储设备的插入、移除和其他相关操作,确保...

    Android磁盘管理-系统源码分析.docx

    Vold是一个本地服务,它在Android中扮演着重要角色,负责处理如SD卡、USB存储设备的插拔事件。 1. **Vold总体架构** Vold服务由`volumeManager`统一管理,它调度不同的模块协同工作。这些模块包括: - `...

    android系统挂载之vold详细分析

    在Android系统中,vold(Volume Daemon)是一个核心的组件,用于管理USB存储和SD卡等外部存储设备。要深入理解vold的工作原理,我们首先需要了解udev,因为在概念和功能上,vold是udev在Android平台上的替代。 udev...

    Android 9.0 Vold 挂载流程分析

    在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的。通过kernel–>vold–>StorageManagerService这样的架构去逐级上报热插拔事件。 一、Vold 入口 --> /system/vold/main.c int main(int argc, char** ...

    USB之android_Vold分析.pdf

    Vold,即Volume Daemon,是Android系统中用于管理外部存储设备(如USB、SD卡等)的核心组件。它的功能涵盖了设备的检测、挂载、卸载以及状态监控等多个方面。Vold的设计理念源于udev,但在Android环境下进行了定制化...

    USB之android Vold分析 storage分析 高清版

    USB之android_Vold分析,分析了linux udev与android vold的关系由来,vold的功能、架构,使用netlink的通信过程。kernel的uevent发送,framework层的处理、磁盘的挂载等等。

    android系统vold透析.pdf

    Vold,即Volume Daemon,是Android系统中用于管理外部存储设备(如USB、SD卡)的重要组件。它继承了Linux内核中udev的设计理念,但针对Android环境进行了定制化改进。 ##### 1.1 udev的由来 udev是Linux 2.6内核中...

    android代码VOLD代码分析

    它的作用主要是与内核层通信,并对外部存储设备如USB和SD卡等进行管理。VOLD在Android设备中扮演着非常重要的角色,尤其是在处理存储设备连接与断开、文件系统挂载、权限控制等场景中。而udev则是Linux系统中负责...

    android平台ntfs-3g移植源码,可直接mm编译

    android平台移植ntfs-3g使支持ntfs格式tf卡、U盘、stat硬盘挂载,解压文件到external目录下,mm编译成功后,可手动指行 ntfs-3g /dev/block/vold/* /storage/sdcard1 或者添加 Ntfs.cpp Ntfs.h到system/vold目录实现...

    USB之android_Vold_分析

    Vold(Volume Daemon)是Android操作系统中一个重要的组件,负责管理外部存储设备如USB存储和SD卡等。它的核心职责包括识别、挂载和卸载存储设备,以及处理设备的各种状态变化。本篇文章将详细剖析Vold的工作原理,...

    安卓Android源码——开发之SD卡的使用.zip

    - AOSP源码中,`frameworks/base/core/java/android/content/Context.java`和`system/vold`目录下的代码,涉及到SD卡的相关操作。 9. **适配不同Android版本** - 不同Android版本对SD卡的管理策略有所差异,...

    android vold模块详解

    Vold,全称为Volume Daemon,是Android用来管理外部存储设备(如USB存储、SD卡)的服务。Vold的主要作用是当外部存储设备状态发生变化时,实时向平台报告状态,并处理用户层与内核层的通信。 Vold的启动是在Android...

    android中Vold进程详解

    它接收来自内核的外部设备消息,用于管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等。 Vold进程框架设计主要由三个模块组成:NetlinkManager、VolumeManager和CommandListener。...

    Android vold 多U盘多分区挂载实现

    在Android系统中,`vold`(Volume Daemon)是一个关键的系统服务,它负责管理设备上的存储设备,包括内部存储、外部SD卡以及USB设备。本文将深入探讨如何在Android系统上实现对多个U盘及多分区的挂载,基于描述中的...

    android系统vold透析

    **Vold**(Volume Daemon)是Android系统中用于管理外部存储设备的核心组件之一,它负责处理与USB存储设备、SD卡等相关的任务。Vold的功能类似于Linux系统中的**udev**,即用于设备管理的守护进程,但它更适应...

Global site tag (gtag.js) - Google Analytics