vold.fstab中的內容顯示如下:
這句代碼意思是:外置SD卡的掛載路徑,auto 代表掛載SD卡的第一個(gè)分區,后面是vold監測的路徑,當插入sd時(shí),/devices/platform/msm_sdcc.2/mmc_host/mmc1 路徑下會(huì )多出一個(gè)文件夾,在該文件夾中包含了SD卡的各種ID信息,以及生產(chǎn)日期等。
PS:
MMC(MultiMedia Card)卡由西門(mén)子公司和首推CF的SanDisk于1997年推出。1998年1月十四家公司聯(lián)合成立了MMC協(xié)會(huì )(MultiMedia Card Association簡(jiǎn)稱(chēng)MMCA),現在已經(jīng)有超過(guò)84個(gè)成員。MMC的發(fā)展目標主要是針對數碼影像、音樂(lè )、手機、PDA、電子書(shū)、玩具等產(chǎn)品,號稱(chēng)是目前世界上最小的Flash Memory存貯卡,尺寸只有32mm x 24mm x 1.4mm。雖然比SmartMedia厚,但整體體積卻比SmartMedia小,而且也比SmartMedia輕,只有1.5克。MMC也是把存貯單元和控制器一同做到了卡上,智能的控制器使得MMC保證兼容性和靈活性。
SD/MMC 卡的設備構造差不多,不過(guò) MMC 當時(shí)的設計比 SD 小一半。所以,SD/MMC 的驅動(dòng)通用,進(jìn)一步的,Linux 的設備節點(diǎn)就延續了 MMC 的這個(gè)名字,后面的 blk 是塊設備這個(gè)英文的簡(jiǎn)寫(xiě), mmcblk 也就是“ mmc/sd 塊設備”,0 就是這個(gè) mmc/sd 設備的順序編號,p1 就是第一個(gè)分區。
掛載流程簡(jiǎn)析
內核層(kernel):
當有新的SD/USB設備插入時(shí),kernel將自動(dòng)檢測并加載對應的驅動(dòng),同時(shí)kernel中的sysfs機制會(huì )在有新的驅動(dòng)加載時(shí)給用戶(hù)層發(fā)送相應的event,然后將kernel產(chǎn)生的這些event傳遞給vold。
用戶(hù)層(user):
用戶(hù)層通過(guò)sysfs可以接收來(lái)自kernel的uevent,這些收到的信息可以在/sys/block/mmcblk0下用命令cat *來(lái)查看,如:
# cat *
bdi: invalid length
10
179:0
device: invalid length
8
holders: invalid length
power: invalid length
queue: invalid length
8
0
0
524288
slaves: invalid length
278 813 8686 1050 0 0 0 0 0 240 1040
subsystem: invalid length
MAJOR=179
MINOR=0
DEVTYPE=disk
NPARTS=0
#
如果這時(shí)候在終端輸入"pwd"指令,大家會(huì )發(fā)現路徑并不是我們之前進(jìn)入的路徑/sys/block/mmcblk0,而是/sys/devices/platform/goldfish_mmc.0/mmc_host/mmc0/mmc0:e118/block/mmcblk0。其中mmc0:e118這個(gè)文件是插入SD卡之后生成的文件。Sysfs傳遞來(lái)的是一個(gè)多行的文檔,vold需要解析這個(gè)文檔。Vold將處理之后的事件傳遞給MountService,然后MoutService會(huì )將信息進(jìn)一步處理傳遞給StorageManager,最后我們可以在系統設置界面看到SD卡掛載成功的信息,這包括了SD卡的總容量以及可用空間如下圖:

SD卡的掛載流程大致如此,MountServie實(shí)際上還會(huì )通知PackageManagerService,因為這里分析的是SD卡掛載從底層到上層的表現,因此這里暫不分析。簡(jiǎn)約流程圖如下:

轉載于:http://blog.csdn.net/yihongyuelan/article/details/6926034
聯(lián)系客服