Android(安卓)Vold实现总览
16lz
2021-01-24
Android系统通过vold层完成磁盘的热插拔(包括:挂载、卸载、格式化等)功能。
Android中的vold模块处于Framework层和linux内核层之间,启到呈上启下的作用。
本篇将从主线程流程(main函数),以及类结构的角度来分析vold的实现原理,详细分析的博文地址为:
Androidvold启动篇(NetlinkHandler)
Androidvold核心篇(VolumeManager)
Android vold通讯篇(CommandListener)
一、vold下主流程代码分析
在关键代码行后有注释:
int main() { VolumeManager *vm; //管理volume CommandListener *cl;//和Framework进行通讯 NetlinkManager *nm;//接收内核消息 SLOGI("Vold 2.1 (the revenge) firing up"); mkdir("/dev/block/vold", 0755);//创建设备节点 /* For when cryptfs checks and mounts an encrypted filesystem */ klog_set_level(6); /* 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); nm->setBroadcaster((SocketListener *) cl); if (vm->start()) {//啥也没干 SLOGE("Unable to start VolumeManager (%s)", strerror(errno)); exit(1); } if (process_config(vm)) {//根据配置文件/etc/vold.fstab,初始化VolumeManager SLOGE("Error reading configuration (%s)... continuing anyways", strerror(errno)); } if (nm->start()) {//启动内核监听 SLOGE("Unable to start NetlinkManager (%s)", strerror(errno)); exit(1); } coldboot("/sys/block");//触发内核sysfs发送uevent事件 // coldboot("/sys/class/switch"); /* * Now that we're up, we can respond to commands */ if (cl->startListener()) {//启动对Framework的监听 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); }
以上为主代码流程,这里看不明白正常,只需要了解这个过程,前面有三篇博文详细分析了这个过程。 二、vold的类框架及数据流
黄色线:为类和类、类和接口及类和对象的UML关系;
绿色线:内核发送挂载消息传到vold层,vold进行处理的数据流;
红色线:vold处理完成内核消息后,向Framework层发送的消息数据流;以及Framewrok层向vold发送消息后,vold层向Framework层发送的消息数据流;
黑色线:应用层调用API到Framewrok层,再到vold层,再到内核函数的数据流。
更多相关文章
- Android(安卓)Message机制的灵活应用
- Android消息处理机制笔记
- Android通知栏微技巧,8.0系统中通知栏的适配
- Android(安卓)学习 之 Looper Handler Thread Messahe 多线程
- 全志A10平板上的ubuntu终极安装版,支持HDMI和平板本机LCD,全新内核
- Android中的消息机制-源码分析
- 使用Beetle.NetPackage简单实现android和wp聊天
- websocket实现android消息推送
- Oprofile在Android中的应用