VOLD的全称是Volume Daemon,取代了原来Linux系统中的udev。它主要是用来处理Android系统中的热插拔存储设备,比如MMC,USB等。作为一个守护进程,它一方面接收内核传递上来的驱动的信息,另一方面接收上层下达的命令并完成相应处理。总的来说,可以将VOLD的工作流程分为三个部分,监听,引导和事件处理。它的工作机制如下图所示。
VOLD通过NetlinkManager类中的onEvent方法来接收来自内核的事件信息。该方法最终会通过VolumeManager调用DirectVolume下的handleBlockEvent来处理Add,Remove以及Change等不同的事件。它会根据具体事件,向MountService服务发送VolumeDiskInserted或者VolumeDiskRemove等message。MountService通过一个nativeDaemon Connector获得这些message,再发送doCommand(“mount”)或者doCommand(“unmount”)命令给VOLD层。
另一方面,VOLD又通过commandListener来监听FrameWork层MountService发出的命令。命令会被VolumeManager处理并最终调用Volume中的方法实现mount或者unmount的动作。
至此,VOLD的监听与事件处理的大致流程就介绍完了。由上可知,VOLD实现一个mount或者unmount的动作是和MountService紧密的结合在一起的。