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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- GVC-全球价值链参与地位指数,基于ICIO表,(Wang等 2017a)计算方法
- 易语言ADS指纹浏览器管理工具
- 易语言奇易模块5.3.6
- cad定制家具平面图工具-(FG)门板覆盖柜体
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt
- 基于Java的财务报销管理系统后端开发源码
- 基于Python核心技术的cola项目设计源码介绍
- 基于Python及多语言集成的TSDT软件过程改进设计源码