转载请注明出处:http://blog.youkuaiyun.com/droyon/article/details/45154991
Vold进程中包含三大块,CommandListener,VolumeManager,NetlinkManager。
1、CommandLinstener是MountService与VolumeManager的中介。负责命令的上传下达。内部使用socket用于跨进程通信。作为socket的服务端,MountService作为客户端。接收MountService的控制指令,将VolumeManager的上报消息传送给MountService。
2、VolumeManager,接收来自NetlinkManager发过来的uevent事件,进行相应处理后,通过CommandListener发送给MountService,MountService接收信息后,会继续下发控制指令给VolumeManager做继续处理。例如:底层接收到sd插入的uevent事件,VolumeManager发给MountService,MountService继续下发挂载指令等等。
3、NetlinkManager接收来自kernel内核的uevent事件,sd卡挂载、格式化等操作,kernel向NetlinkManager发送uevent事件。NetlinkManager会将消息传递给VolumeManager做继续处理。
kernel在以下两种情形下发送Uevent事件:
1、当设备发生变化时。设备的插入和拔出,例如sd卡的插入或者usb外置存储设备的插入,像otg等。这种情况是由设备主动触发的。
2、相应的存储设备在sys下一般存在“设备文件”,直接或者间接的操作设备文件,改变设备文件中的内容,都会触发kernel发送和该设备相关的Uevent消息。
ps:Netlink是Linux系统中用户空间和kernel进行通信的一种机制,其复用socket的相关接口,用户接收来自kernel的一些信息,同时向kernel发送相应指令。

本文深入解析了Vold进程的组成结构,包括CommandListener、VolumeManager、NetlinkManager,并详细阐述了Uevent事件在系统中的作用与传递流程。重点介绍了设备插入与系统响应之间的关联,以及如何通过Uevent事件实现设备状态的实时监测与系统资源的高效管理。
892

被折叠的 条评论
为什么被折叠?



