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

article/2025/10/2 20:34:46

本系列主要介绍 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;其中每个类由继承了其它的父类。后续讲解每一个部分都会详细介绍。
知道了涉及的这类方法/类之后,我们就来看看具体的代码内容吧。


http://chatgpt.dhexx.cn/article/rt0UiLSK.shtml

相关文章

Vold原理介绍

一、 Vold简介 Android中Vold是volume Daemon,即Volume守护进程,用来管理Android中存储类的热拔插事件。这里的热插拔涉及的场景如: 1. 手机usb以MTP或者传输照片方式插拔PC端后磁盘数据的挂卸载; 2. 设备开关机过程中存储设备各分…

C语言Switch....case用法

概述 C语言switch语句通常用于多个条件判断,根据不同情况执行不同的代码块。它的使用形式如下: switch(表达式) { case 常量表达式1: 语句序列1 break; case 常量表达式2: 语句序列2 break; ...... default…

MySQL 入门:Case 语句很好用

引言 MySQL CASE 是一个 MySQL 语句查询关键字,它定义了处理循环概念以执行条件集并使用 IF ELSE 返回匹配案例的方式。 MySQL 中的 CASE 是一种控制语句,它验证条件案例集,并在第一个案例满足 else 值时显示值并退出循环。 如果没有找到 T…

Shell 编程之 case 语句

一、case 语句 1、case 语句概述 (1)case 语句的作用 使用 case 语句改写 if 多分支可以使脚本结构更加清晰、层次分明。针对变量的不同取 值,执行不同的命令序列。 2、case 语句的结构: case 变量值 in 模式 1) 命令序列 1 ;; 模式 2) 命令序列 2 ;; *…

【shell】case实现简单的系统工具箱

case实现简单的系统工具箱 case实现简单的系统工具箱 #!/usr/bin/bash #system manage #by racon 2020-04-19menu() {cat <<-EOF########################################## h. help ## f. disk partition ## d. filesystem mount ## m. memory ## u. system lo…

SQL CASE语句的使用

SQL CASE语句的使用 CASE是一个控制流语句&#xff0c;其作用与IF-THEN-ELSE语句非常相似&#xff0c;可根据数据选择值。 CASE语句遍历条件并在满足第一个条件时返回值。 因此&#xff0c;一旦条件成立&#xff0c;它将短路&#xff0c;从而忽略后面的子句并返回结果。 正如我…

数据库 case 用法

【转载】:数据库中case when 的用法 CASE WHEN 及 SELECT CASE WHEN的用法Case具有两种格式。简单Case函数和Case搜索函数。 1.简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END 2.Case搜索函数 CASE WHEN sex 1 THEN 男 WHEN sex 2 THEN 女 ELSE 其他 …

SQL之CASE WHEN用法详解

简单CASE WHEN函数&#xff1a; CASE SCORE WHEN A THEN 优 ELSE 不及格 END CASE SCORE WHEN B THEN 良 ELSE 不及格 END CASE SCORE WHEN C THEN 中 ELSE 不及格 END 等同于&#xff0c;使用CASE WHEN条件表达式函数实现&#xff1a; CASE WHEN SCORE A THEN 优WHEN SCORE…

switch case语法

文章目录 switch case组合不要拿青龙偃月刀去削苹果case的作用是什么&#xff1f;break的作用是什么&#xff1f;case后面的值有什么要求吗&#xff1f;case语句的排列顺序问题default语句相关问题使用case语句的一些注意事项 switch case组合 基本语法结构 switch(整型常量/…

SQL中case的使用方法

Case具有两种格式。简单Case函数和Case搜索函数。 1.简单Case函数 CASE sex WHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END2.Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女ELSE 其他 END3.简单case函数 VS case搜索函数 这两种方式&#xff0c;可以实现相同的功…

[转载]常用CASE工具介绍

[转载]常用CASE工具介绍转载自&#xff1a;http://www.cnblogs.com/powerlc/archive/2006/01/12/315959.html 一&#xff0c;概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. Work…

CASE语句的使用方法

CASE语句有两种&#xff1a; 一种是case [column] when&#xff0c;指定了判断条件所在的列。 另一种是case when [column]&#xff0c;因为条件在子句中所以能对任意列进行判断。 本例建立一个员工表&#xff0c;有员工id&#xff08;id&#xff09;&#xff0c;员工姓名&am…

常用CASE工具介绍 ZZ

常用CASE工具介绍 一&#xff0c;概述  今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建模。 二&#xff0c;软件开发CASE工具简介   (一)图稿绘制&…

CASE 工具有哪些

CASE 工具 CASE工具设置的软件应用程序。这使用为自动的SDLC活动。 CASE工具所使用的软件项目经理,分析师和工程师开发的软件系统. 有许多CASE工具做软件开发生命周期的各个阶段,如工具,设计工具,项目管理工具,数据库管理工具,文档工具分析. 为了得到所需的结果,CASE工具…

网络:简述路由算法之动态路由算法

网络&#xff1a;简述路由算法之动态路由算法 在计算机网络中&#xff0c;路由器的一个很重要责任就是要在端对端的节点中找出一条最佳路径出来&#xff0c;通过自己与相邻节点之间的信息&#xff0c;来计算出从自己位置到目的节点之间的最佳线路&#xff0c;这种算法我们可以理…

路由选择算法——链路状态算法

好久没写东西了&#xff0c;好生疏的感觉。。 链路状态算法 这是一种全局式的路由选择算法&#xff0c;也就是说&#xff0c;一个路由器知道到其他路由器的所有链路的状态信息&#xff08;例如某条链路上堵不堵&#xff09;&#xff0c;并且假设这种信息是被量化好了的&#…

示例演示“距离矢量路由算法”工作原理

以下内容摘自刚刚上市&#xff0c;已被纳入全国高校教材系统&#xff0c;并在全国热销、好评如潮的《深入理解计算机网络》新书。 7.5.3 距离矢量路由算法 现代计算机网络通常使用动态路由算法&#xff0c;因为这类算法能够适应网络的拓扑和流量变化&#xff0c;其中最流行的…

距离矢量路由算法

现代计算机网络通常使用动态路由算法&#xff0c;因为这类算法能够适应网络的拓扑和流量变化&#xff0c;其中最流行的两种动态路由算法是“距离矢量路由算法”和“链路状态路由算法”。 距离矢量路由算法&#xff08;Distance Vector Routing&#xff0c;DV&#xff09;是ARPA…

路由算法之距离矢量算法和链路状态算法

我们之前说了&#xff0c;路由器需要对于每一对端端节点都要寻找出一个最佳的路径&#xff0c;比如说最小链路成本的路径。路由算法就是通过自己到相邻节点之间的信息来计算出自己到目的地址的最佳出境线路是哪一条&#xff0c;进而进行转发的一类算法。具有代表性的就是距离矢…

路由算法(网络层)

引言 网络层的主要功能是将数据包从源机器路由到目标机器。在大多数是网络中&#xff0c;数据包需要多跳才能到达目的地。唯一一个值得指出的例外是广播网络&#xff0c;但即使在广播网络中&#xff0c;如果源机器和目标机器不在同一个网络段中时&#xff0c;路由仍然是一个问…