首先上一张整体的结构类图
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
分享到:
相关推荐
Vold的内部架构涉及NetLinkManager、CommandListener、VolumeDirect、VolumeAuto、VolumeSocketListener等组件,通过这些组件,Vold监听来自内核的事件,并处理外部存储设备的状态变化。 NetLink是进程间通信的一种...
##### 3.2 Vold的内部架构 Vold的内部结构相当复杂,主要包括以下几个关键组件: - **NetLinkManager**:负责通过Netlink socket与内核进行通信,监听来自内核的uevent。 - **CommandListener**:处理来自...
《Android系统中的Vold服务详解》 在Android操作系统中,Vold(Volume Daemon)是一个至关重要的组件,它主要负责管理设备的存储系统,包括内部存储和外部存储卡。Vold这个名字来源于“Volume Daemon”,意为“卷...
1. **USB Mass Storage架构** USB Mass Storage允许Android设备作为存储设备连接到电脑或其他设备,以便于数据传输。这个过程涉及多个组件: - **StorageManager**:作为Java层的Client,负责管理Android设备的...
第1章 阅读前的准备工作 1.1 系统架构 1.1.1 Android系统架构 1.1.2 本书的架构 1.2 搭建开发环境 1.2.1 下载源码 1.2.2 编译源码 1.3 工具介绍 1.3.1 Source Insight介绍 1.3.3 Busybox的使用 1.4 本章小结 第2章 ...
### Android USB 存储管理详解 #### 一、引言 在现代移动设备中,USB 存储功能是一项重要的技术,允许用户通过 USB 接口连接外部存储设备,如 U 盘或移动硬盘,实现数据交换。Android 系统为了支持这一功能,引入...
#### 三、`vold.fstab`文件详解 `vold.fstab`文件中的每一行都定义了一个挂载点的信息。其格式如下: ```plaintext dev_mount<label><mount_point><part><sysfs_path1> ``` - `<label>`:一个命令标签,用于标记...
这一过程涉及到了从硬件启动到系统服务的完整流程,对于理解Android系统的内部架构至关重要。通过深入研究这些组件的功能与实现细节,可以更好地掌握Android系统的工作原理。 #### 十、参考资料 - ...
Android手机的开机启动流程是一个复杂的过程,涉及到多个组件和阶段。...以上是对Android手机开机启动流程的详细解析,每个步骤都是系统启动不可或缺的一部分,它们共同构建了Android操作系统的基础架构。