1. 總體架構
2. 流程概覽
2.1 開啟Vold
2.2 引導Uevent
2.3 處理事件
Vold - Volume Daemon儲存類的守護進程,作為Android的一個本地服務,負責處理諸如SD、USB等儲存類裝置的插拔等事件。
1. 總體架構
Vold服務由volumeManager統一管控,它將具體任務分別指派給netlinkManager, commandListener, directVolume, Volume去完成。
Vold服務向下通過socket機制與底層驅動互動,向上通過JNI, intent, socket, doCommand等機制與Java Framework互動。
2 流程概覽
2.1 開啟服務
初始化Android系統時開啟Vold本地服務,
Vold在/dev/block下建立vold檔案夾,開啟VolumeManager, NetlinkManager, CommandListener。
2.2 引導Uevent
NetlinkManager負責監聽底層Linux上報的uevent事件。
系統的SocketListner統一管理所有socket事件。
NetlinkListner負責解析socket事件。
最後由onEvent()將vold事件交還給NetlinkManager處理。
2.3 處理Block和Switch事件
NetlinkManager調用VolumeManager中處理vold事件的類。
handleBlockEvent()完成SD的掛載和卸載,具體交由DirectVolume完成。
handleSwitchEvent()完成由USB實現的隨身碟的串連。
兩者最後都是通過setBroadcast()將ResponsibleCode經過nativeDaemonConnector的socket監聽機制,最終上傳到MountService作統一規劃。
MountService裡的onEvent()得到解析後的事件,完成兩大任務,
-> 發送命令doCommand()通過commandListener傳遞給volumeManager
-> 將事件資訊廣播給相關服務,供上層應用使用。