【Android源码 栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Android源码 -Android 2 3 SD卡挂载流程浅析 一 - 互联网的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
Android 2 3 SD卡挂载流程浅析 一 Android 2.3中关于SD卡挂载简介 在Android 2.3中当SD卡插入系统之后系统会自动挂载。
Vold 就是负责挂载SD卡的vold 的全称是volume daemon。
实际上是负责完成系统的CDROMUSB 大容量存储MMC 卡后文有简介具体请百度等扩展存储的挂载任务自动完成的守护进程。
它提供的主要特点是支持这些存储外设的热插拔。
在Android上的这个vold系统和GNU/Linux的之间存在很大的差异。
自Android 2.2开始vold又做了大改动升级为vold 2.0之前的配置文件是system/etc/vold.confvold 2.0变为system/etc/vold.fstab。
vold.fstab中的内容显示如下 Vold 2.0 Generic fstab - San Mehat sanandroid.com Regular device mount Format: dev_mount label - Label for the volume mount_point - Where the volume will be mounted part - Partition 1 based or auto for first usable partition. - 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: MMCMultiMedia 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 MAJOR179 MINOR0 DEVTYPEdisk NPARTS0 如果这时候在终端输入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