Android -- Vold机制简要分析

Android -- Vold机制简要分析

ID:39464508

大小:407.00 KB

页数:27页

时间:2019-07-03

Android -- Vold机制简要分析_第1页
Android -- Vold机制简要分析_第2页
Android -- Vold机制简要分析_第3页
Android -- Vold机制简要分析_第4页
Android -- Vold机制简要分析_第5页
资源描述:

《Android -- Vold机制简要分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android--Vold机制简要分析Vold是用于管理和控制Android外部存储介质的后台进程,这里说的管控,主要包括SDK的插拔、挂载/卸载和格式化等;它是Android平台外部存储系统的管控枢纽。Vold的整个控制模块主要由三个类模块构成:NetlinkManager、VolumeManager和CommandListener,它们的功能划分大概是:NetlinkManager:用于从kernel中获取SD卡插拔的Uevnet消息VolumeManager:管理模块,对NetlinkManager转发的消息做一些处理,并通过CommandL

2、istener发送给framework(MountService.java);接着framework会通过套接字下发命令,指引VolumeManager对存储设备做下一步的操作,如挂载/卸载等CommandListener:通过socket,实现MountService.java与Vold之间的消息交换NetLink是Linux下用户进程和kernel进行信息交互的一种机制,借助这种机制,用户进程(如Vold/Netd)可以接收来自kernel的一些消息,同时也可以向kernel发送一些控制命令。NetlinkManager就是基于此设计的。Uev

3、ent也跟Linux系统有关,它与Linux的设备文件系统有一定关系;这里,我们可以简单的认为,Uevent就是一个字符串,它描述了外部存储设备插入/拔出、挂载/卸载的状态信息。Vold通过Netlink机制,可以得到这些信息,并进行外部存储设备的管理、控制。由上述介绍,我们可以得到如下的Vold框架图描述:有了Vold的架构描述,接下来就开始分析Vold进程的整体流程及实现了。一、Vold进程的声明与创建Vold进程的声明与创建过程跟zygote一样,在init.rc中声明,在init进程创建:[java]viewplaincopy在CODE上查

4、看代码片派生到我的代码片servicevold/system/bin/vold--blkid_context=u:r:blkid:s0--blkid_untrusted_context=u:r:blkid_untrusted:s0--fsck_context=u:r:fsck:s0--fsck_untrusted_context=u:r:fsck_untrusted:s0classcoresocketvoldstream0660rootmountsocketcryptdstream0660rootmountiopriobe2在创建Vold进程时

5、,会为它创建两个socket,用于与framework进行信息交互。其他的细节,参考之前zygote进程创建的介绍。二、进入Vold主程序Vold的主程序在/system/vold目录中,直接看main.cpp::main()函数:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片intmain(intargc,char**argv){setenv("ANDROID_LOG_TAGS","*:v",1);android::base::InitLogging(argv,android::base::LogdLogger(and

6、roid::base::SYSTEM));LOG(INFO)<<"Vold3.0(theawakening)firingup";LOG(VERBOSE)<<"Detectedsupportfor:"<<(android::vold::IsFilesystemSupported("ext4")?"ext4":"")<<(android::vold::IsFilesystemSupported("f2fs")?"f2fs":"")<<(android::vold::IsFilesystemSupported("vfat")?"vfat":"");Vol

7、umeManager*vm;CommandListener*cl;CryptCommandListener*ccl;NetlinkManager*nm;parse_args(argc,argv);sehandle=selinux_android_file_context_handle();if(sehandle){selinux_android_set_sehandle(sehandle);}//QuicklythrowaCLOEXEConthesocketwejustinheritedfrominitfcntl(android_get_contr

8、ol_socket("vold"),F_SETFD,FD_CLOEXEC);//拿到init进程创建的名为vold的soc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。