Android 2.3 SD卡挂载流程浅析(一)

原创 2011年11月01日 21:33:49
Android 2.3中关于SD卡挂载简介
      在Android 2.3中,当SD卡插入系统之后,系统会自动挂载。Vold 就是负责挂载SD卡的,vold 的全称是volume daemon。实际上是负责完成系统的CDROM,USB 大容量存储,MMC 卡(后文有简介,具体请百度)等扩展存储的挂载任务自动完成的守护进程。它提供的主要特点是支持这些存储外设的热插拔。在Android上的这个vold系统和GNU/Linux的之间存在很大的差异。自Android 2.2开始,vold又做了大改动,升级为vold 2.0,之前的配置文件是system/etc/vold.conf,vold 2.0变为system/etc/vold.fstab。

vold.fstab中的内容显示如下:


## Vold 2.0 Generic fstab
## - San Mehat (san@android.com)
##

#######################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...>
## label        - Label for the volume
## mount_point  - Where the volume will be mounted
## part         - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################

## Example of a standard sdcard mount for the emulator / Dream
# Mounts the first usable partition of the specified device
dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

## Example of a dual card setup
# dev_mount left_sdcard  /sdcard1  auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1
# dev_mount right_sdcard /sdcard2  auto /devices/platform/goldfish_mmc.1 /devices/platform/msm_sdcc.3/mmc_host/mmc1

## Example of specifying a specific partition for mounts
# dev_mount sdcard /sdcard 2 /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

可以看到大部分是注释,最重要的为以下这句:
dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

这句代码意思是:外置SD卡的挂载路径,auto 代表挂载SD卡的第一个分区,后面是vold监测的路径,当插入sd时,/devices/platform/msm_sdcc.2/mmc_host/mmc1 路径下会多出一个文件夹,在该文件夹中包含了SD卡的各种ID信息,以及生产日期等。


如果把sd卡插入设备,在 /dev/block/ 目录下面也会多出几个设备节点,证明sd卡的驱动已经成功加载。 我自己测试的目录下面会形成 mmcblk0  和 mmcblk0p1 节点,注意:这两个节点的意思,mmcblk0代表第一个SD卡设备,mmcblk0p1代表第一个SD卡设备的第一个分区。真正挂载到系统中的是mmcblk0p1而不是mmcblk0,这一点很重要。


PS:

MMC(MultiMedia Card)卡由西门子公司和首推CF的SanDisk于1997年推出。1998年1月十四家公司联合成立了MMC协会(MultiMedia Card Association简称MMCA),现在已经有超过84个成员。MMC的发展目标主要是针对数码影像、音乐、手机、PDA、电子书、玩具等产品,号称是目前世界上最小的Flash Memory存贮卡,尺寸只有32mm x 24mm x 1.4mm。虽然比SmartMedia厚,但整体体积却比SmartMedia小,而且也比SmartMedia轻,只有1.5克。MMC也是把存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。

MMC_百度百科

SD/MMC 卡的设备构造差不多,不过 MMC 当时的设计比 SD 小一半。所以,SD/MMC 的驱动通用,进一步的,Linux 的设备节点就延续了 MMC 的这个名字,后面的 blk 是块设备这个英文的简写, mmcblk 也就是“ mmc/sd 块设备”,0 就是这个 mmc/sd 设备的顺序编号,p1 就是第一个分区。


挂载流程简析
内核层(kernel):
当有新的SD/USB设备插入时,kernel将自动检测并加载对应的驱动,同时kernel中的sysfs机制会在有新的驱动加载时给用户层发送相应的event,然后将kernel产生的这些event传递给vold。
用户层(user):
用户层通过sysfs可以接收来自kernel的uevent,这些收到的信息可以在/sys/block/mmcblk0下用命令cat *来查看,如:

# cat *
bdi: invalid length
10
179:0
device: invalid length
8
holders: invalid length
power: invalid length
queue: invalid length
8
0
0
524288
slaves: invalid length
     278      813     8686     1050        0        0        0        0        0      240     1040
subsystem: invalid length
MAJOR=179
MINOR=0
DEVTYPE=disk
NPARTS=0
#
如果这时候在终端输入"pwd"指令,大家会发现路径并不是我们之前进入的路径/sys/block/mmcblk0,而是/sys/devices/platform/goldfish_mmc.0/mmc_host/mmc0/mmc0:e118/block/mmcblk0。其中mmc0:e118这个文件是插入SD卡之后生成的文件。Sysfs传递来的是一个多行的文档,vold需要解析这个文档。Vold将处理之后的事件传递给MountService,然后MoutService会将信息进一步处理传递给StorageManager,最后我们可以在系统设置界面看到SD卡挂载成功的信息,这包括了SD卡的总容量以及可用空间如下图:


SD卡的挂载流程大致如此,MountServie实际上还会通知PackageManagerService,因为这里分析的是SD卡挂载从底层到上层的表现,因此这里暂不分析。简约流程图如下:






android系统中修改sd卡挂载目录

android系统中修改sd卡挂载目录 减小字体 增大字体 这段时间,一直在弄Android系统上的SD挂载。那为什么要鼓捣Android系统的SD挂载呢?下面不得不从开始说起。 一、An...

android vold初始化及sd卡挂载流程

1 总体介绍   在Android 中,当SD卡插入系统之后,系统会自动挂载。Vold 就是负责挂载SD卡的,vold 的全称是volume daemon。实际上是负责完成系统的CDROM,...

Android 2.3 SD卡挂载流程浅析(三)

在前面两篇博文《Android 2.3 SD卡挂载流程浅析(一)》《Android 2.3 SD卡挂载流程浅析(二)》中,主要简单介绍了SD卡的挂载流程以及所涉及的关键文件。在《Android 2...

Android SDCard Mount流程分析(一)(二)(三)

Android SDCard Mount流程分析(一) 前段时间对Android 的SDCard unmount 流程进行了几篇简短的分析,由于当时只是纸上谈兵,没有实际上的跟进,可能会有一些误导人...

android vold初始化及sd卡挂载流程

1 总体介绍   在Android 中,当SD卡插入系统之后,系统会自动挂载。Vold 就是负责挂载SD卡的,vold 的全称是volume daemon。实际上是负责完成系统的CDROM,...
  • sdkdlwk
  • sdkdlwk
  • 2017年07月25日 09:35
  • 515

Android SD卡挂载状态

一、           Sd卡挂载主要ACTION ACTION_MEDIA_BAD_REMOVAL sd卡已经从sd卡插槽拔出,但是挂载点还没解除 ...

Android—— 4.2 Vold挂载管理_mmcblk内置-双sdcard (八)

不同平台的mmc分区方案和烧写emmc方式不一样,总之划分一块区域用来当sdcard挂载,并且记住block序号,android的分区类型在linux下制作一般都是ext4格式。 可在BoardCo...
  • jscese
  • jscese
  • 2014年10月14日 11:21
  • 5226

Android OTA升级原理和流程分析(四)---Android系统Recovery模式的工作原理

Android OTA升级原理和流程分析(四)---Android系统Recovery模式的工作原理 转载自:http://blog.chinaunix.net/uid-220285...

Android OTA升级原理和流程分析(九)---updater-script脚本语法简介以及执行流程

Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程 转载自:http://blog.csdn.ne...

Android 2.3 SD卡挂载流程浅析(六)

前面五篇文章:      《Android 2.3 SD卡挂载流程浅析(一)》      《Android 2.3 SD卡挂载流程浅析(二)》      《Android 2.3 SD卡挂载流程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 2.3 SD卡挂载流程浅析(一)
举报原因:
原因补充:

(最多只允许输入30个字)