Android5.0 vold-整体架构

概述

该篇文章主要讲解vold的整体框架和工作流程,不会涉及到具体的实现。
具体的实现(从framework到Native再到协议族)会在如下的后续文章里提及。
Android5.0 vold-启动过程
Android5.0 vold-注册过程(上)
Android5.0 vold-注册过程(下)

什么是Vold

Vold是Volume Daemon的简写。
直译过来Volume可以翻译为卷,是电脑中磁盘的概念,对应到手机上就是相关存储介质
看到Daemon字样就知道这是一个守护进程,那它有什么作用呢?
首先它是一个native程序,用于连接kernel和framework(SystemServer进程),使他们可以通信。通信的内容包括:SD插拨、挂载、卸载、格式化等。
框架如下图

arch.png

更进一步

既然主要是讲vold,那就先来看看vold的内部组成

  1. Vold框架(橙色方块)
    里面有3个比较重要的组件,分别是:NetlinkManagerVolumeManagerCommandListener.
    • NetlinkManager:通过netlink协议接收来自Linux内核uevent消息,并将消息转发给VolumeManager处理
    • VolumeManager:把uevent相关信息通过CommandListener发送给SystemServer进程,该进程中的MountService根据收到的消息会发送相应的处理命令给VolumeManager,VolumeManager接收到命令后直接对外部存储设备进行操作。
    • CommandListener:内部封装的一个Socket用于跨进程通信,Java层的客户端MountService就是通过该Socket和服务端Vold进行通信的.
  2. systemServer中最主要的是MountService.可以接受来自Vold的信息,也可以传递信息到Vold(比如:setting中挂载, 清除sd卡等)
    综上所诉,稍微详细一点的框架图如下:
    detal_arch.jpeg

总结

vold的整体架构已经主要组成部分的功能就介绍完了,这里故意没有涉及到任何代码,主要目的就是得首先头脑里得有个大致的框架,知道某个组件的作用,从哪里接受信息,要把信息传递到哪里去,这样才不至于在后续的代码讲解中lost

More

上文提到了Netlink & Uevent & Socket,那他们是什么呢?

Netlink是Linux系统中用户空间进程和Kernel进行通信的一种机制,用户空间进程可以接收来自Kernel的消息,同时也可以向Kernel发送一些控制命令

uevent

uevent和Linux的设备文件系统及设备模型有关,是sysfs向用户空间发送的消息。
消息格式实际上是一串字符串。当外部设备发生变化时,会引起Kernel发送uevent消息
一般设备在/sys对应的目录下有个叫uevent的文件,往该文件里写入指定数据,也会触发Kernel发送和该设备相关的uevent消息,内核通过uevent告知外部存储系统发生的变化。

Socket

这个大家肯定已经耳熟能详了,在这里主要是用于vold和systemserver的IPC .
关于socket的使用可以点击 Unix Socket

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值