当前位置: 首页 > news >正文

android vold 加密,android vold架构详解(1)

首先上一张整体的结构类图

a1b0a71666214f5575b3823f7ad93020.png

VOLD:Volume Daemon存储守护进程,用来为响应Usb/SD卡插入,拔出等动作提供服务。

系统启动时,通过解析init.rc文件来启动各种系统服务。

包括VOLD服务也是在这里启动。

service vold /system/bin/vold

class core

socket vold stream 0660 root mount

ioprio be 2

VOLD服务的入口函数system/vold/main.cpp

int main() {

VolumeManager *vm; // 管理Volume,实现USB/SD卡Mount,Unmount等动作

CommandListener *cl; // 传递上层Framework向下发送的信息

NetlinkManager *nm; // 响应kernel层传递来的VolumeDiskInserted、VolumeDiskRemoved等信息

mkdir("/dev/block/vold", 0755);

/* Create our singleton managers */

if (!(vm = VolumeManager::Instance())) {

SLOGE("Unable to create VolumeManager");

exit(1);

};

if (!(nm = NetlinkManager::Instance())) {

SLOGE("Unable to create NetlinkManager");

exit(1);

};

cl = new CommandListener();

vm->setBroadcaster((SocketListener *) cl);

// Kernel层消息发送到Library后,经过一些列处理,最后通过这个CommandListener将消息发送到vold Socket中

// Application Framework层从vold Socket中取得消息,处理。

nm->setBroadcaster((SocketListener *) cl);

if (vm->start()) { // 什么也没做

SLOGE("Unable to start VolumeManager (%s)", strerror(errno));

exit(1);

}

// 解析vold.fstab

// 根据vold.fstab文件,初始化DirectVolume和Volume.cpp实例

if (process_config(vm)) {

SLOGE("Error reading configuration (%s)... continuing anyways", strerror(errno));

}

// 初始化NetlinkHandler.cpp实例,开始监听kernel层向上发送的消息

if (nm->start()) {

SLOGE("Unable to start NetlinkManager (%s)", strerror(errno));

exit(1);

}

coldboot("/sys/block");

/*

* Now that we're up, we can respond to commands

*/

// 开始监听来自FrameWork层的信息

if (cl->startListener()) {

SLOGE("Unable to start CommandListener (%s)", strerror(errno));

exit(1);

}

// Eventually we'll become the monitoring thread

while(1) {

sleep(1000);

}

SLOGI("Vold exiting");

exit(0);

}

预计明天开始,以下内容分析

Kernel层向上发送消息处理流程

FrameWork层向下发送消息处理流程

相关文章:

  • USB接口,如何来解决?(转)
  • html悬浮展开,html – 在悬停时展开背景
  • html注册页面怎么命名空间,命名空间简单理解
  • perl文本处理总结[2]
  • 方形变圆形html动画,CSS3 方形到圆角到圆形变换动画
  • 中移动员工工资待遇全揭秘
  • html代码格式化vscode,Vscode代码格式化
  • 视频:百度打击google的最新广告 google执行官估计得吐血
  • 从psd到css+div+html网页制作全流程过程讲解,从PSD到CSS+DIV+HTML网页制作全流程过程讲解_docx...
  • 1 制作一个表格html表格,学术论文表格制作速成!
  • WINDOWS专集大集合,绝对是精品中的精品
  • 鲁东大学2021高考成绩查询,2021年鲁东大学录取结果查询网址入口及录取结果公布时间...
  • 深山红叶袖珍PE系统工具箱说明 V22 正式版
  • 2021云南省卫生副高考试成绩查询,2021年卫生高级职称考试准考证打印入口:云南卫生健康人才网...
  • html文件无法通过复制粘贴传输,远程桌面无法复制粘贴传输文件解决办法
  • __proto__ 和 prototype的关系
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Go 语言编译器的 //go: 详解
  • HTTP那些事
  • Javascript编码规范
  • js算法-归并排序(merge_sort)
  • Just for fun——迅速写完快速排序
  • React Transition Group -- Transition 组件
  • Spring Boot快速入门(一):Hello Spring Boot
  • SQLServer之创建显式事务
  • vue 个人积累(使用工具,组件)
  • 基于Android乐音识别(2)
  • 跨域
  • 数组大概知多少
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序开发问题汇总
  • ​渐进式Web应用PWA的未来
  • ​水经微图Web1.5.0版即将上线
  • #pragma pack(1)
  • #QT(智能家居界面-界面切换)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (7)STL算法之交换赋值
  • (9)目标检测_SSD的原理
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (接口自动化)Python3操作MySQL数据库
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .net core 依赖注入的基本用发
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .Net7 环境安装配置
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [20150904]exp slow.txt
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BROADCASTING]tensor的扩散机制
  • [bzoj2957]楼房重建
  • [BZOJ3757] 苹果树