Android-vold源码分析
### Android-vold源码分析:理解U盘挂载机制 在深入探讨Android系统如何通过`vold`(Volume Daemon)管理U盘等外部存储设备的挂载与卸载之前,我们先简要介绍`vold`的角色。`vold`是Android系统中负责管理存储卷的守护进程,它不仅处理内部存储,还处理外部存储设备,如SD卡或U盘的挂载、卸载等操作。其核心功能之一是监听并响应内核发送的块设备事件,从而实现对外部存储设备的有效管理和访问。 #### 核心处理函数:`handleBlockEvent` `handleBlockEvent`函数是`vold`中的关键函数,用于接收并解析内核发出的块设备事件。这些事件可以是设备的添加、删除或状态改变。根据不同的事件类型,`handleBlockEvent`将调用相应的处理函数,包括: 1. **`handleDiskAdded`**:当检测到新磁盘(如U盘)的添加时被调用。 2. **`handleDiskRemoved`**:当磁盘被移除时调用。 3. **`handleDiskChanged`**:当磁盘的状态发生改变时调用。 4. **`handlePartitionAdded`**:当检测到新的分区被添加到已存在的磁盘上时调用。 5. **`handlePartitionRemoved`**:当分区从磁盘上被移除时调用。 6. **`handlePartitionChanged`**:当分区的状态发生变化时调用。 #### `handleDiskAdded`函数详解 当U盘插入时,`handleDiskAdded`函数被调用,负责收集关于新磁盘的基本信息,如主设备号(major)、次设备号(minor)以及分区数量(`NPARTS`)。这些信息对于后续识别和处理磁盘的各个分区至关重要。 - **主设备号和次设备号**:这两个参数用于唯一标识Linux系统中的设备,特别是在`/dev`目录下,每一个设备文件都有一个主次设备号组合,用以区分不同类型的硬件设备。 - **分区数量(`NPARTS`)**:表示磁盘上的分区总数,这在处理多分区磁盘时尤为重要,因为它帮助`vold`预知后续会有多少个`handlePartitionAdded`调用。 #### 存储设备识别顺序 `handleDiskAdded`函数执行后,`vold`将开始处理该磁盘上的各个分区。这个过程遵循一定的顺序:首先调用一次`handleDiskAdded`以获取磁盘级别的信息,然后对每个分区调用`handlePartitionAdded`。如果磁盘上有多个分区,包括可能的一个扩展分区(MBR限制为最多四个主分区),则`handlePartitionAdded`将被调用多次,直到所有分区都被正确识别和处理。 #### `mPendingPartsCount`变量的作用 `mPendingPartsCount`是一个全局变量,用于跟踪待处理的分区数量。在`handleDiskAdded`调用后,该变量被初始化为`mDiskNumParts`(即磁盘的分区数量)。随着每个分区的识别,`mPendingPartsCount`递减,直到所有分区都处理完毕,此时`mPendingPartsCount`应为0,表明该存储设备的所有事件已经完成处理。 #### 结论 通过深入分析`vold`源码中的`handleBlockEvent`及其相关函数,我们能够更好地理解Android系统是如何高效地管理和响应外部存储设备的插入与移除事件的。`vold`通过一系列精心设计的函数调用,确保了设备的快速识别和正确的挂载流程,为用户提供无缝的使用体验。对于希望深入研究Android系统底层存储管理的开发者而言,掌握`vold`的工作原理和其实现细节是至关重要的。
- cj831112013-01-21缺前面几章。
- 粉丝: 7
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于树莓派与百度智能云的人脸识别打卡系统(Qt开发,含接口调用,可作毕设).zip
- 基于SpringBoot等技术的仓储服务管理系统+设计报告(含SSM、Redis等).zip
- 毕业设计基于SpringBoot和MySQL的小学生口算练习与测评系统+论文报告.zip
- 基于C++的机房资源预约管理系统源码+报告文档(课程设计团队项目).zip
- 基于python机器学习的猫狗识别分类项目源码(含源码、说明与论文).zip
- 基于联邦深度强化学习的无人驾驶决策控制系统(Python源码及说明).zip
- 2024新开发基于机器学习的Android恶意代码检测项目(含说明与源码).zip
- 基于 FISCOBCOS 与 Paillier 同态加密的匿名投票案例(含源码与说明).zip
- 毕业设计基于深度学习卷积神经网络的图像分类GUI界面项目(含源码与说明).zip
- 基于深度学习的Landsat影像分类算法及源码(含设计文档+项目说明).zip
- 期末课设基于机器学习的股票预测实战算法(含项目说明,含python源码).zip
- 毕设基于QT和sqlite3的大二背单词辅助系统开发(含完整源码+全部资料).zip
- 基于FPGA的简易神经网络加速器设计-最新开发(含源码及全部资料).zip
- 软件杯获奖作品-林业有害生物智能识别-(含全部参赛源码及资料).zip
- 2024毕设:基于YOLOv5与 PyQt5 的人脸表情识别系统(含源码与说明).zip
- 基于C++和QT的OSM地图数据解析与导航系统(含完整源码+设计报告).zip