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 ([email protected])
##

#######################
## Regular device mount
##
## Format: dev_mount

这句代码意思是:外置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卡挂载从底层到上层的表现,因此这里暂不分析。简约流程图如下:






更多相关文章

  1. Android和iPhone及Windows Mobile,Palm Pre
  2. SDK中adb工具用法
  3. android自动安装驱动
  4. Android(安卓)Demo:读取本地图库与调用摄像头拍摄
  5. 蓝牙实现签到功能(中央与周边)
  6. Google 终于要让 20 亿 Android(安卓)设备能玩上高性能的 AR 了
  7. Android设备使用USB的硬件接口
  8. 移动广告商的最爱——iPad
  9. 移动大变局下的抉择—移动开发者大会刊首语

随机推荐

  1. Android(安卓)如何获取RadioGroup选中Rad
  2. android N0 屏蔽某个应用的通知
  3. 安卓开发问题记录
  4. ListView CheckBox点击事件
  5. android 分段显示文本颜色控件
  6. Android(安卓)Settings 修改默认主题为白
  7. Android控件属性集锦
  8. Android打包发布APK
  9. Android(安卓)日期控件的简单实现
  10. Android(安卓)自定义字体