• <Android开发> Android vold - 第一篇 vold前言简介


    本系列主要介绍 Android vold,分为以下篇章
    <Android开发> Android vold - 第一篇 vold前言简介
    <Android开发> Android vold - 第二篇 vold 的main()函数简介
    <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介

    本次主要讲解存储模块如U盘等设备在android设备中的管理和使用的模块。本次主要基于android 8.1版本进行解析。不同android版本 vold的内容可能会有所差异。读者可对比阅读解析。

    1 Vold介绍
    Android中Vold是volume Daemon,即Volume守护进程;Android没有使用Linux平台下的udev来处理磁盘,于是Google写了一个类似udev功能的vold,充当了kernel与framework之间的桥梁;作为Android的一个本地服务,负责处理诸如SD、USB等存储类设备的插拔等事件。

    1. 手机usb以MTP或者传输照片方式插拔PC端后磁盘数据的挂卸载;
    2. 设备开关机过程中存储设备各分区的挂卸载;
    3. TF卡插拔识别过程中文件系统挂卸载。
      在各场景做mount过程中,涉及到的磁盘数据的安全加密(FDE/FBE),文件节点与目录的创建,文件系统的垃圾清理等模块,也由Vold进行控制。

    2 Vold架构
    Vold在系统中以守护进程存在,是一个单独的进程,下一节会介绍Vold的启动流程。处于Kernel和Framework之间,是两个层级连接的桥梁。下图是Vold在Android系统的整体架构。
    在这里插入图片描述

    Vold主要是接收Kernel的uevent消息,然后NetLinkManager将消息放在NetLinkHandler队列送到VolumeManager,最终将消息传递到Framework的StorageManager。最后StorageManager会将数据存储下来,消息通知到在StorageManager注册的service与应用。

    3 vold启动流程
    Vold在系统中以守护进程存在,所以在android启动时调用init.rc会去启动。
    以下以android 8.1为例对具体源码说明。
    android的init.rc启动vold的调用如下:
    路径:LINUX/android/system/core/rootdir/init.rc

    在这里插入图片描述

    在Android 系统启动的时候,init进程会去解析init.rc文件,在init.rc中有start vold的命令会被init解析到,而start对应的函数do_start(constBuiltinArguments& args);即启动对应的service,service再解析vold.rc 文件 对Vold做一些初始化配置。

    vold.rc 文件路径内容入下:
    路径:LINUX/android/system/vold/vold.rc
    在这里插入图片描述

    在rc文件调用启动vold进程服务后,最先运行的当然是main()函数了。接下来看看vold 服务的main函数。
    现在做个相关涉及的方法类的了解;
    首先,kernel监测到U盘等存储设备,会产生一个uevent事件。
    而vold 服务内有一个NetlinkManager类,该类会建立一个socket,来监测所有的uevent事件最后会new一个NetlinkHandler对象,并执行start函数。然后调用NetlinkListener父类的startListener函数去监听event。
    vold服务还有另外一个VolumeManager类,对Framework或kernel传来的消息处理,kernel的uevent需要通过NetlinkManager类,然后给到VolumeManager类。Framework的数据则是通过CommandListener类,再给到VolumeManager类。
    VolumeManager类,主要负责收发与Framework通信的数据。所以整个Vold涉及的大类包括VolumeManager、CommandListener、NetlinkHandler;其中每个类由继承了其它的父类。后续讲解每一个部分都会详细介绍。
    知道了涉及的这类方法/类之后,我们就来看看具体的代码内容吧。

  • 相关阅读:
    基于可视图法(VG)的路径规划算法简述
    java_springboot水果购物商城销售管理系统
    查漏补缺,这些热门开源项目你都知道么?「GitHub 热点速览」
    JSON和全局异常处理
    柔性电子数字源表测试方案
    常用的sql函数(语法)
    Unity编辑器扩展 --- AssetPostprocessor资源导入自动设置
    C专家编程 第10章 再论指针 10.5 使用指针向函数传递一个多维数组
    zemax色差与消色差
    4.Flink实时项目之日志数据拆分
  • 原文地址:https://blog.csdn.net/qq_39257814/article/details/128080893