
Android23SD卡挂载流程浅析.docx
146页Android 2.3中关于SD卡挂载简介 在Android 2.3中,当SD卡插入系统之后,系统会自动挂载Vold 就是负责挂载SD卡的,vold 的全称是volume daemon实际上是负责完成系统的CDROM,USB 大容量存储,MMC 卡(后文有简介,具体请百度)等扩展存储的挂载任务自动完成的守护进程它提供的主要特点是支持这些存储外设的热插拔在Android上的这个vold 系统和GNU/Linux的之间存在很大的差异自Android 2.2开始,vold又做了大改动,升级为vold 2.0,之前的配置文件是system/etc/vold.conf,vold 2.0变为system/etc/vold.fstabvold.fstab中的内容显示如下:## Vold 2.0 Generic fstab## - San Mehat (san@)## ######################### Regular device mount#### Format: dev_mount
如果把ssd卡插插入设备备,在 /deev/bblocck/ 目录下下面也会会多出几几个设备备节点,,证明ssd卡的的驱动已已经成功功加载 我自自己测试试的目录录下面会会形成 mmccblkk0 和 mmmcbblk00p1 节点,,注意::这两个个节点的的意思,,mmccblkk0代表表第一个个SD卡卡设备,,mmccblkk0p11代表第第一个SSD卡设设备的第第一个分分区真真正挂载载到系统统中的是是 mmmcbllk0pp1而不不是mmmcbllk0,,这一点点很重要要PS:MMC((MulltiMMediia CCardd)卡由由西门子子公司和和首推CCF的SSanDDiskk于19997年年推出19998年11月十四四家公司司联合成成立了MMMC协协会(MMulttiMeediaa Caard Asssociiatiion简简称MMMCA)),现在在已经有有超过884个成成员MMMC的的发展目目标主要要是针对对数码影影像、音音乐、手、PPDA、、电子书书、玩具具等产品品,号称称 是目目前世界界上最小小的Fllashh Meemorry存贮贮卡,尺尺寸只有有32mmm xx 244mm x 11.4mmm。
虽虽然比SSmarrtMeediaa厚,但但整体体体积却比比SmaartMMediia小,,而且也也比SmmarttMeddia轻轻,只有有1.55克MMMC也也是把存存贮单 元和控控制器一一同做到到了卡上上,智能能的控制制器使得得MMCC保证兼兼容性和和灵活性性MMC__百度百百科SD/MMMC 卡的设设备构造造差不多多,不过过 MMMC 当当时的设设计比 SD 小一半半所以以,SDD/MMMC 的的驱动通通用,进进一步的的,Liinuxx 的设设备节点点就延续续了 MMMC 的这个个名字,,后面的的 bllk 是是块设备备这个英英文的简简写, mmccblkk 也就就是“ mmcc/sdd 块设设备”,,0 就就是这个个 mmmc/ssd 设设备的顺顺序编号号,p11 就是是第一个个分区挂载流程程简析内内核层((kerrnell):当当有新的的SD//USBB设备插插入时,,kerrnell将自动动检测并并加载对对应的驱驱动,同同时keerneel中的的syssfs机机制会在在有新的的驱动加加载时给给用户层层发送相相应的eevennt,然然后将kkernnel产产生的这这些evventt传递给给volld。
用用户层((useer)::用户层层通过ssysffs可以以接收来来自keerneel的uueveent,,这些收收到的信信息可以以在/ssys//bloock//mmccblkk0下用用命令ccat *来查查看,如如:# caat **bdii: iinvaalidd leengtth1001799:0ddeviice:: innvallid lenngthh8hollderrs: invvaliid llenggthppoweer: invvaliid llenggthueuue: invvaliid llenggth880052442888slaavess: iinvaalidd leengtth 2788 8133 886866 110500 00 00 00 00 00 2400 110400subbsysstemm: iinvaalidd leengtthMAAJORR=1779MIINORR=0DDEVTTYPEE=diiskNNPARRTS==0# 如果这这时候在在终端输输入"ppwd""指令,,大家会会发现路路径并不不是我们们之前进进入的路路径/ssys//bloock//mmccblkk0,而而是/ssys//devvicees //plaatfoorm//golldfiish__mmcc.0//mmcc_hoost//mmcc0/mmmc00:e1118//bloock//mmccblkk0。
其其中mmmc0::e1118这 个文件件是插入入SD卡卡之后生生成的文文件SSysffs传递递来的是是一个多多行的文文档,vvoldd需要解解析这个个文档Volld将处处理之后后的事件件传递给给 MoounttSerrvicce,然然后MooutSServvicee会将信信息进一一步处理理传递给给StooraggeMaanagger,,最后我我们可以以在系统统设置界界面看到到SD卡卡挂 载载成功的的信息,,这包括括了SDD卡的总总容量以以及可用用空间如如下图::SD卡的的挂载流流程大致致如此,,MouuntSServvie实实际上还还会通知知PacckaggeMaanaggerSServvicee,因为为这里分分析的是是SD卡卡挂载从从底层到到上层的的表现,,因此这这里暂不不分析简约流流程图如如下: 在上上一篇博博文《AAndrroidd 2..3 SSD卡挂挂载流程程浅析((一)》》主要简简单的介介绍了SSD卡的的挂载流流程包包 括了了从内核核层到用用户层事事件消息息的传递递,以及及Volld的简简介本本文将继继续介绍绍SD卡卡的挂载载,但文文中并不不会涉及及代码的的详细分分析,因因为这部部分网上上已有资资料,我我会 在在文章结结尾贴出出来供大大家参考考。
本文文主要目目的是一一方面对对自己学学习这一一部分的的总结,,另一方方面希望望大家能能够指出出文中理理解错误误的地方方 11.SDD卡挂载载流程图图 SDD卡的挂挂载流程程图如下下: 绿色色箭头::表示插插入SDD卡后事事件传递递以及SSD卡挂挂载 红色色箭头::表示挂挂载成功功后的消消息传递递流程 黄色色箭头::表示MMounntSeerviice发发出挂载载/卸载载SD卡卡的命令令 大家家可能对对图中突突然出现现的这么么多的名名称感到到奇怪,,这些都都是在AAndrroidd 2..3 源源码中可可以找到到的,接接下来我我会为大大家一一一解释这这些类的的作用 2.各各个文件件的主要要作用 (1))Kerrnell:这个个是系统统内核啦啦不是是我要分分析的文文件,本本文涉及及内容不不是内核核级的哦哦!(努努力学习习中....) (2))NettlinnkMaanagger::全称是是NettlinnkMaanagger..cppp位于AAndrroidd 2..3源码码位置//sysstemm/voold//NettlinnkMaanagger..cppp。
该类类的主要要通过引引用NeetliinkHHanddlerr类中的的 onnEveent(()方法法来接收收来自内内核的事事件消息息,NeetliinkHHanddlerr位于//sysstemm/voold//NettlinnkHaandller..cppp (3))VollumeeMannageer:全全称是VVoluumeMManaagerr.cppp位于于Anddroiid 22.3源源码位置置/syysteem/。
