首先上一张整体的结构类图
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层向下发送消息处理流程
- 大小: 38.2 KB
分享到:
相关推荐
Uevent 简介 NetLink 简介 MountService 功能介绍: MountService 同 StroageManager 的交互 MountService 同 Vold 的交互
android-vold架构[收集].pdf
解析android中Vold进程,让大家更好更快的掌握Vold
android中vold代码分析,主要用来自动挂载设备
通过kernel–>vold–>StorageManagerService这样的架构去逐级上报热插拔事件。 一、Vold 入口 --> /system/vold/main.c int main(int argc, char** argv) { atrace_set_tracing_enabled(false); setenv(ANDROID...
Android vold 多U盘多分区挂载实现 可以对比原生的vold代码查看修改
USB之android_Vold分析,分析了linux udev与android vold的关系由来,vold的功能、架构,使用netlink的通信过程。kernel的uevent发送,framework层的处理、磁盘的挂载等等。
Android-vold源码分析
android系统vold架构与流程透析
android 对插入设备后产生的反应,诉说连接的响应与挂载
USB之android_Vold分析.pdf
主要目录 1 Vold简介 2 Vold功能介绍 3 Vold通信 4 USB Storage Framework结构分析
android中VOLD代码框架的讲解和分析,设计到存储管理
Vold(volume Daemon),即Volume守护进程,用来管理Android中存储类的热拔插事件,处于Kernel和...先来看一下Vold在Android系统的整体架构。 原创文章 9获赞 0访问量 499 关注 私信 展开阅读全文 作者:的神等等
android系统vold透析 Vold的全称是 Volume Daemon
本文档详细地介绍了android系统挂载中的vold,对vold的由来、功能、内部架构以及通信等方面进行了较为详细的介绍与较为深入的分析,是学习android挂载方面知识的一份比较好的材料。
该文档主要描述了vold的工作机制
本文讲解了Android系统中Vold的基本原理,其中重点讲解了USB相关的原理。