Android Vold实现总览

Android系统通过vold层完成磁盘的热插拔(包括:挂载、卸载、格式化等)功能。

Android中的vold模块处于Framework层和linux内核层之间,启到呈上启下的作用。


本篇将从主线程流程(main函数),以及类结构的角度来分析vold的实现原理,详细分析的博文地址为:

Androidvold启动篇(NetlinkHandler)

Androidvold核心篇(VolumeManager)

Android vold通讯篇(CommandListener)


一、vold下主流程代码分析

在关键代码行后有注释:

int main() {  
  
    VolumeManager *vm; //管理volume  
    CommandListener *cl;//和Framework进行通讯  
    NetlinkManager *nm;//接收内核消息  
  
    SLOGI("Vold 2.1 (the revenge) firing up");  
  
    mkdir("/dev/block/vold", 0755);//创建设备节点
  
    /* For when cryptfs checks and mounts an encrypted filesystem */  
    klog_set_level(6);  
  
    /* 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);  
    nm->setBroadcaster((SocketListener *) cl);  
  
    if (vm->start()) {//啥也没干
        SLOGE("Unable to start VolumeManager (%s)", strerror(errno));  
        exit(1);  
    }  
  
    if (process_config(vm)) {//根据配置文件/etc/vold.fstab,初始化VolumeManager  
        SLOGE("Error reading configuration (%s)... continuing anyways", strerror(errno));  
    }  
  
    if (nm->start()) {//启动内核监听  
        SLOGE("Unable to start NetlinkManager (%s)", strerror(errno));  
        exit(1);  
    }  
  
    coldboot("/sys/block");//触发内核sysfs发送uevent事件  
//    coldboot("/sys/class/switch");  
  
    /* 
     * Now that we're up, we can respond to commands 
     */  
    if (cl->startListener()) {//启动对Framework的监听  
        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);  
}  
以上为主代码流程,这里看不明白正常,只需要了解这个过程,前面有三篇博文详细分析了这个过程。

二、vold的类框架及数据流

黄色线:为类和类、类和接口及类和对象的UML关系;

绿色线:内核发送挂载消息传到vold层,vold进行处理的数据流;

红色线:vold处理完成内核消息后,向Framework层发送的消息数据流;以及Framewrok层向vold发送消息后,vold层向Framework层发送的消息数据流;

黑色线:应用层调用API到Framewrok层,再到vold层,再到内核函数的数据流。

Android Vold实现总览_第1张图片



你可能感兴趣的:(Android,基础知识)