1. 程式人生 > >Android系統之SD卡分析二

Android系統之SD卡分析二

1.SD卡掛載流程圖

SD卡的掛載流程圖如下:

綠色箭頭:表示插入SD卡後事件傳遞以及SD卡掛載

紅色箭頭:表示掛載成功後的訊息傳遞流程

黃色箭頭:表示MountService發出掛載/解除安裝SD卡的命令

大家可能對圖中突然出現的這麼多的名稱感到奇怪,這些都是在Android 原始碼中可以找到的,接下來我會為大家一一解釋這些類的作用.

2.各個檔案的主要作用
 (1)Kernel:這個是系統核心啦。不是我要分析的檔案,本文涉及內容不是核心級的哦!(努力學習中...)

 (2)NetlinkManager:全稱是NetlinkManager.cpp位於Android 2.3原始碼位置/system/vold/NetlinkManager.cpp。該類的主要通過引用NetlinkHandler類中的onEvent()方法來接收來自核心的事件訊息,NetlinkHandler位於/system/vold/NetlinkHandler.cpp。

 (3)VolumeManager:全稱是VolumeManager.cpp位於Android 2.3原始碼位置/system/vold/VolumeManager.cpp。該類的主要作用是接收經過NetlinkManager處理過後的事件訊息。因為我們這裡是SD卡的掛載,因此經過NetlinkManager處理過後的訊息會分為五種,分別是:block,switch,usb_composite,battery,power_supply。這裡SD卡掛載的事件是block。

 (4)DirectVolume:位於/system/vold/DirectVolume.cpp。該類的是一個工具類,主要負責對傳入的事件進行進一步的處理,block事件又可以分為:Add,Removed,Change,Noaction這四種。後文通過介紹Add事件展開。

 (5)Volume:Volume.cpp位於/system/vold/Volume.cpp,該類是負責SD卡掛載的主要類。Volume.cpp主要負責檢查SD卡格式,以及對複合要求的SD卡進行掛載,並通過Socket將訊息SD卡掛載的訊息傳遞給NativeDaemonConnector。

 (6)NativeDaemonConnector:該類位於frameworks/base/services/java/com.android.server/NativeDaemonConnector.java。該類用於接收來自Volume.cpp 發來的SD卡掛載訊息並向上傳遞。

 (7)MountService:位於frameworks/base/services/java/com.android.server/MountService.java。MountService是一個服務類,該服務是系統服務,提供對外部儲存裝置的管理、查詢等。在外部儲存裝置狀態發生變化的時候,該類會發出相應的通知給上層應用。在Android系統中這是一個非常重要的類。

 (8)StorageManaer:位於frameworks/base/core/java/andriod/os/storage/StorageManager.java。在該類的說明中有提到,該類是系統儲存服務的介面。在系統設定中,有Storage相關項,同時Setting也註冊了該類的監聽器。而StorageManager又將自己的監聽器註冊到了MountService中,因此該類主要用於上層應用獲取SD卡狀態。

    通過上文對各個檔案的作用簡介,以及整個SD卡的掛載流程圖可以知道,Android 系統是如何從底層獲取SD卡掛載資訊的。