作者: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。
待续。。
分享到:
相关推荐
vold的存在使得Android系统能够更加灵活地管理和响应外部存储设备的变化,如SD卡的插入与移除。 #### 二、vold的工作流程与结构 vold在Android系统中的工作流程可以分为几个关键步骤: 1. **Linux Kernel**:当...
在Android系统中,`vold`(Volume Daemon)是一个至关重要的服务,它负责管理设备的存储空间,包括内部存储和外部存储(如SD卡)。`vold`在系统启动时运行,提供对文件系统的挂载、卸载以及权限管理等功能。通过对`...
在Android操作系统中,Vold(Volume Daemon)是一个至关重要的组件,它负责管理设备的存储系统,包括内部存储、外部SD卡以及各种类型的USB存储设备。Vold作为系统服务运行在特权用户空间,确保了对存储设备的访问...
Android Vold(Volume Daemon)是Android系统中的一个重要组件,它主要负责管理移动设备上的外部存储设备,如SD卡和USB存储设备。Vold作为一个本地服务,监控并响应这些存储设备的插入、移除和其他相关操作,确保...
Vold是一个本地服务,它在Android中扮演着重要角色,负责处理如SD卡、USB存储设备的插拔事件。 1. **Vold总体架构** Vold服务由`volumeManager`统一管理,它调度不同的模块协同工作。这些模块包括: - `...
在Android系统中,vold(Volume Daemon)是一个核心的组件,用于管理USB存储和SD卡等外部存储设备。要深入理解vold的工作原理,我们首先需要了解udev,因为在概念和功能上,vold是udev在Android平台上的替代。 udev...
在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的。通过kernel–>vold–>StorageManagerService这样的架构去逐级上报热插拔事件。 一、Vold 入口 --> /system/vold/main.c int main(int argc, char** ...
Vold,即Volume Daemon,是Android系统中用于管理外部存储设备(如USB、SD卡等)的核心组件。它的功能涵盖了设备的检测、挂载、卸载以及状态监控等多个方面。Vold的设计理念源于udev,但在Android环境下进行了定制化...
USB之android_Vold分析,分析了linux udev与android vold的关系由来,vold的功能、架构,使用netlink的通信过程。kernel的uevent发送,framework层的处理、磁盘的挂载等等。
Vold,即Volume Daemon,是Android系统中用于管理外部存储设备(如USB、SD卡)的重要组件。它继承了Linux内核中udev的设计理念,但针对Android环境进行了定制化改进。 ##### 1.1 udev的由来 udev是Linux 2.6内核中...
它的作用主要是与内核层通信,并对外部存储设备如USB和SD卡等进行管理。VOLD在Android设备中扮演着非常重要的角色,尤其是在处理存储设备连接与断开、文件系统挂载、权限控制等场景中。而udev则是Linux系统中负责...
android平台移植ntfs-3g使支持ntfs格式tf卡、U盘、stat硬盘挂载,解压文件到external目录下,mm编译成功后,可手动指行 ntfs-3g /dev/block/vold/* /storage/sdcard1 或者添加 Ntfs.cpp Ntfs.h到system/vold目录实现...
Vold(Volume Daemon)是Android操作系统中一个重要的组件,负责管理外部存储设备如USB存储和SD卡等。它的核心职责包括识别、挂载和卸载存储设备,以及处理设备的各种状态变化。本篇文章将详细剖析Vold的工作原理,...
- AOSP源码中,`frameworks/base/core/java/android/content/Context.java`和`system/vold`目录下的代码,涉及到SD卡的相关操作。 9. **适配不同Android版本** - 不同Android版本对SD卡的管理策略有所差异,...
Vold,全称为Volume Daemon,是Android用来管理外部存储设备(如USB存储、SD卡)的服务。Vold的主要作用是当外部存储设备状态发生变化时,实时向平台报告状态,并处理用户层与内核层的通信。 Vold的启动是在Android...
它接收来自内核的外部设备消息,用于管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等。 Vold进程框架设计主要由三个模块组成:NetlinkManager、VolumeManager和CommandListener。...
在Android系统中,`vold`(Volume Daemon)是一个关键的系统服务,它负责管理设备上的存储设备,包括内部存储、外部SD卡以及USB设备。本文将深入探讨如何在Android系统上实现对多个U盘及多分区的挂载,基于描述中的...
**Vold**(Volume Daemon)是Android系统中用于管理外部存储设备的核心组件之一,它负责处理与USB存储设备、SD卡等相关的任务。Vold的功能类似于Linux系统中的**udev**,即用于设备管理的守护进程,但它更适应...