`
yanwenjinhaha
  • 浏览: 16236 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

android vold架构详解(1)

 
阅读更多
首先上一张整体的结构类图



VOLD:Volume Daemon存储守护进程,用来为响应Usb/SD卡插入,拔出等动作提供服务。

系统启动时,通过解析init.rc文件来启动各种系统服务。
包括VOLD服务也是在这里启动。
service vold /system/bin/vold
    class core
    socket vold stream 0660 root mount
    ioprio be 2



VOLD服务的入口函数system/vold/main.cpp
int main() {
    VolumeManager *vm; 	// 管理Volume,实现USB/SD卡Mount,Unmount等动作
    CommandListener *cl; // 传递上层Framework向下发送的信息
    NetlinkManager *nm; // 响应kernel层传递来的VolumeDiskInserted、VolumeDiskRemoved等信息

    mkdir("/dev/block/vold", 0755);

    /* Create our singleton managers */
    if (!(vm = VolumeManager::Instance())) {
        SLOGE("Unable to create VolumeManager");
        exit(1);
    };

    if (!(nm = NetlinkManager::Instance())) {
        SLOGE("Unable to create NetlinkManager");
        exit(1);
    };

    cl = new CommandListener();
    vm->setBroadcaster((SocketListener *) cl);

    // Kernel层消息发送到Library后,经过一些列处理,最后通过这个CommandListener将消息发送到vold Socket中
    // Application Framework层从vold Socket中取得消息,处理。
    nm->setBroadcaster((SocketListener *) cl); 

    if (vm->start()) {  // 什么也没做
        SLOGE("Unable to start VolumeManager (%s)", strerror(errno));
        exit(1);
    }

	// 解析vold.fstab
	// 根据vold.fstab文件,初始化DirectVolume和Volume.cpp实例
    if (process_config(vm)) {   
        SLOGE("Error reading configuration (%s)... continuing anyways", strerror(errno));
    }

	// 初始化NetlinkHandler.cpp实例,开始监听kernel层向上发送的消息
    if (nm->start()) {   
        SLOGE("Unable to start NetlinkManager (%s)", strerror(errno));
        exit(1);
    }

    coldboot("/sys/block");

    /*
     * Now that we're up, we can respond to commands
     */
    // 开始监听来自FrameWork层的信息
    if (cl->startListener()) { 
        SLOGE("Unable to start CommandListener (%s)", strerror(errno));
        exit(1);
    }

    // Eventually we'll become the monitoring thread
    while(1) {
        sleep(1000);
    }

    SLOGI("Vold exiting");
    exit(0);
}


预计明天开始,以下内容分析
Kernel层向上发送消息处理流程
FrameWork层向下发送消息处理流程
  • 大小: 38.2 KB
分享到:
评论

相关推荐

    android vold模块详解

    Vold的内部架构涉及NetLinkManager、CommandListener、VolumeDirect、VolumeAuto、VolumeSocketListener等组件,通过这些组件,Vold监听来自内核的事件,并处理外部存储设备的状态变化。 NetLink是进程间通信的一种...

    USB之android_Vold_分析

    ##### 3.2 Vold的内部架构 Vold的内部结构相当复杂,主要包括以下几个关键组件: - **NetLinkManager**:负责通过Netlink socket与内核进行通信,监听来自内核的uevent。 - **CommandListener**:处理来自...

    vold_android.pdf.tar.gz_android

    《Android系统中的Vold服务详解》 在Android操作系统中,Vold(Volume Daemon)是一个至关重要的组件,它主要负责管理设备的存储系统,包括内部存储和外部存储卡。Vold这个名字来源于“Volume Daemon”,意为“卷...

    通过usbmassstorage看android系统架构.pdf

    1. **USB Mass Storage架构** USB Mass Storage允许Android设备作为存储设备连接到电脑或其他设备,以便于数据传输。这个过程涉及多个组件: - **StorageManager**:作为Java层的Client,负责管理Android设备的...

    《深入理解Android》卷Ⅰ

    第1章 阅读前的准备工作 1.1 系统架构 1.1.1 Android系统架构 1.1.2 本书的架构 1.2 搭建开发环境 1.2.1 下载源码 1.2.2 编译源码 1.3 工具介绍 1.3.1 Source Insight介绍 1.3.3 Busybox的使用 1.4 本章小结 第2章 ...

    android_usb_storage.pdf

    ### Android USB 存储管理详解 #### 一、引言 在现代移动设备中,USB 存储功能是一项重要的技术,允许用户通过 USB 接口连接外部存储设备,如 U 盘或移动硬盘,实现数据交换。Android 系统为了支持这一功能,引入...

    android sdcard

    #### 三、`vold.fstab`文件详解 `vold.fstab`文件中的每一行都定义了一个挂载点的信息。其格式如下: ```plaintext dev_mount<label><mount_point><part><sysfs_path1> ``` - `<label>`:一个命令标签,用于标记...

    Android_开机启动流程

    这一过程涉及到了从硬件启动到系统服务的完整流程,对于理解Android系统的内部架构至关重要。通过深入研究这些组件的功能与实现细节,可以更好地掌握Android系统的工作原理。 #### 十、参考资料 - ...

    Android_手机开机启动流程.doc

    Android手机的开机启动流程是一个复杂的过程,涉及到多个组件和阶段。...以上是对Android手机开机启动流程的详细解析,每个步骤都是系统启动不可或缺的一部分,它们共同构建了Android操作系统的基础架构。

Global site tag (gtag.js) - Google Analytics