Vold 框架分析

main.cpp,vold的入口函数,系统起来会只执行vold的可执行文件,调到这个main函数中。
NetlinkManager.cpp位于源码位置/system/vold/NetlinkManager.cpp。该类的主要通过引用NetlinkHandler类中的onEvent()方法来接收来内核的事件消息,NetlinkHandler位于/system/vold/NetlinkHandler.cpp。
VolumeManager:位于源码位置/system/vold/VolumeManager.cpp。该类的主要作用是接收经过NetlinkManager处理过后的事件消息。
main.cpp,vold的入口函数,系统起来会只执行vold的可执行文件,调到这个main函数中。
NetlinkManager.cpp位于源码位置/system/vold/NetlinkManager.cpp。该类的主要通过引用NetlinkHandler类中的onEvent()方法来接收来内核的事件消息,NetlinkHandler位于/system/vold/NetlinkHandler.cpp。
VolumeManager:位于源码位置/system/vold/VolumeManager.cpp。该类的主要作用是接收经过NetlinkManager处理过后的事件消息。
CommandListener 该类位于位于/system/vold/CommandListener.cpp,通过vold socket与NativeDaemonConnector通信。

NativeDaemonConnector该类位于frameworks/base/services/java/com.android.server/NativeDaemonConnector.java。该类用于接收来自Volume.cpp 发来的SD卡挂载消息并向上传递。
MountService位于frameworks/base/services/java/com.android.server/MountService.java。
MountService是一个服务类,该服务是系统服务,提供对外部存储设备的管理、查询等。在外部存储设备状态发生变化的时候,该类会发出相应的通知给上层应用。在Android系统中这是一个非常重要的类

                StorageManaer位于frameworks/base/core/java/andriod/os/storage/StorageManager.java。
 在该类的说明中有提到,该类是系统存储服务的接口。在系统设置中,有Storage相关项,同时Setting也注册了该类的监听器。
 而StorageManager又将自己的监听器注册到了MountService中,因此该类主要用于上层应用获取SD卡状态

总的讲,vold程序需要分层三部分,第一部分为NetlinkManager,管理接受来自kernel的UEvent消息,第二部分为VolumeManager,主要负责处理来自NetlinkManager的消![]
息和来自java层的消息,之后真正的挂载卸载动作就需要volume负责了。
vold 架构分析_第1张图片

vold 架构分析_第2张图片
service vold /system/bin/vold
class core
socket vold stream 0660 root mount
ioprio be 2
vold挂接的时序图
vold 架构分析_第3张图片
流程图
vold 架构分析_第4张图片