安卓sd卡挂载

一、进程启动和配置文件

    vold的全称是volume daemon。实际上是负责完成系统的CDROM, USB大容量存储,MMC卡等扩展存储的挂载任务自动完成的守护进程。它提供的主要特点是支持这些存储外设的热插拔。在Android上的这个vold系统和GNU/Linux的之间存在很大的差异,下面分析Android上的vold系统的处理过程。配置文件是system/etc/vold.fstab。

1、启动vold
    在init.rc中启动VOLD这个守护线程和创建socket的命令如下:
        service vold /system/bin/vold
        socket vold stream 0660 root mount
        ioprio be 2

2、配置vold.fstab
    vold.fstab文件的格式是:
        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
    例如:
        dev_mount sdcard /mnt/sdcard 1 /devices/platform/mxsdhci.0/mmc_host/mmc0
        SD mount的位置为/mnt/sdcard。

二、控制流程分析
    Vold关于SD card settings的代码位于:
        packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.java
    Vold上层MountService的代码位于:
        frameworks/base/services/java/com/android/server/MountService.java
    Vold底层处理的代码位于:
        system/vold/
  1、Vold设计架构
      Setting
       |
      MountService
       |
      CommandListener
       |
      VolumeManager  - NetlinkManager
       |
      Volume  -  DirectVolume
       |
      SD/USB device
      MountService会接收来之Setting的变化,及来自底层VolumeManager的信息,并对之分析判,然后通过doMountVolume命令到底层。
      Vold初始化时,会创建class NetlinkManager和VolumeManager,class NetlinkManager接收来自底层的信息,然后传交给VolumeManager处理;重要类class VolumeManager 仅有一个实例,它主要负责vold的管理操作,管理多个sd卡,usb各种操作;重要类class Volume 可有多个实例, 挂载多少个sd卡、usb,它就有多少个。重要类class DirectVolume 封装了很多的方法和属性;重要类class CommandListener主要收到上层MountService通过doMountVolume发来的命令,分析后,转交给VolumeManager处理;VolumeManager处理信息后,或报告给上层MountService,或交给volume执行具体操作(挂载 SD,USB).      
  2、Vold代码实现过程大致分为三步:
    创建链接:
       在vold作为一个守护进程,一方面接受驱动的信息,并把信息传给应用层;另一方面接受上层的命令并完成相应操作。所以这里的链接一共有两条:
     (1)vold socket: 负责vold与应用层的信息传递;
     (2)访问udev的socket: 负责vold与底层的信息传递;
       这两个链接都是在进程的一开始完成创建的。
    引导:
       这里主要是在vold启动时,对现有外设存储设备的处理。首先,要加载并解析vold.fstab,并检查挂载点是否已经被挂载, 其次,执行MMC卡挂载; 最后,处理USB大容量存储。
    事件处理:
       这里通过对两个链接的监听,完成对动态事件的处理,以及对上层应用操作的响应



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leonban

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值