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层,再到内核函数的数据流。




更多相关文章

  1. Android(安卓)Message机制的灵活应用
  2. Android消息处理机制笔记
  3. Android通知栏微技巧,8.0系统中通知栏的适配
  4. Android(安卓)学习 之 Looper Handler Thread Messahe 多线程
  5. 全志A10平板上的ubuntu终极安装版,支持HDMI和平板本机LCD,全新内核
  6. Android中的消息机制-源码分析
  7. 使用Beetle.NetPackage简单实现android和wp聊天
  8. websocket实现android消息推送
  9. Oprofile在Android中的应用

随机推荐

  1. Android Pitfall - Fragment.startActivi
  2. 获取Android设备电池电量状态
  3. Android(安卓)四大组件之 Service(二)
  4. android camera(一):camera模组CMM介绍
  5. Android(安卓)dex 命令
  6. Android 技术专题系列之二 -- telephony
  7. android中GridView关于间距的属性值介绍
  8. Android 底层渲染 - 屏幕刷新机制源码分
  9. Android(安卓)四大组件之一 :BroadCastRec
  10. Android多屏幕支持Multi-WindowSupport