Android5.0 vold-總體架構

概述

該篇文章主要講解vold的總體框架和工做流程,不會涉及到具體的實現。
具體的實現(從framework到Native再到協議族)會在以下的後續文章裏說起。
Android5.0 vold-啓動過程
Android5.0 vold-註冊過程(上)
Android5.0 vold-註冊過程(下)api

什麼是Vold

Vold是Volume Daemon的簡寫。
直譯過來Volume能夠翻譯爲卷,是電腦中磁盤的概念,對應到手機上就是相關存儲介質
看到Daemon字樣就知道這是一個守護進程,那它有什麼做用呢?
首先它是一個native程序,用於鏈接kernel和framework(SystemServer進程),使他們能夠通訊。通訊的內容包括:SD插撥、掛載、卸載、格式化等。
框架以下圖
架構

arch.png

更進一步

既然主要是講vold,那就先來看看vold的內部組成框架

  1. Vold框架(橙色方塊)
    裏面有3個比較重要的組件,分別是:NetlinkManagerVolumeManagerCommandListener.
    • NetlinkManager:經過netlink協議接收來自Linux內核uevent消息,並將消息轉發給VolumeManager處理
    • VolumeManager:把uevent相關信息經過CommandListener發送給SystemServer進程,該進程中的MountService根據收到的消息會發送相應的處理命令給VolumeManager,VolumeManager接收到命令後直接對外部存儲設備進行操做。
    • CommandListener:內部封裝的一個Socket用於跨進程通訊,Java層的客戶端MountService就是經過該Socket和服務端Vold進行通訊的.
  2. systemServer中最主要的是MountService.能夠接受來自Vold的信息,也能夠傳遞信息到Vold(好比:setting中掛載, 清除sd卡等)
    綜上所訴,稍微詳細一點的框架圖以下:
    detal_arch.jpeg

總結

vold的總體架構已經主要組成部分的功能就介紹完了,這裏故意沒有涉及到任何代碼,主要目的就是得首先頭腦裏得有個大體的框架,知道某個組件的做用,從哪裏接受信息,要把信息傳遞到哪裏去,這樣纔不至於在後續的代碼講解中lostsocket

More

上文提到了Netlink & Uevent & Socket,那他們是什麼呢?post

Netlink是Linux系統中用戶空間進程和Kernel進行通訊的一種機制,用戶空間進程能夠接收來自Kernel的消息,同時也能夠向Kernel發送一些控制命令翻譯

uevent

uevent和Linux的設備文件系統及設備模型有關,是sysfs向用戶空間發送的消息。
消息格式其實是一串字符串。當外部設備發生變化時,會引發Kernel發送uevent消息
通常設備在/sys對應的目錄下有個叫uevent的文件,往該文件裏寫入指定數據,也會觸發Kernel發送和該設備相關的uevent消息,內核經過uevent告知外部存儲系統發生的變化。cdn

Socket

這個你們確定已經耳熟能詳了,在這裏主要是用於vold和systemserver的IPC .
關於socket的使用能夠點擊 Unix Socketserver

相關文章
相關標籤/搜索