該篇文章主要講解vold的總體框架和工做流程,不會涉及到具體的實現。
具體的實現(從framework到Native再到協議族)會在以下的後續文章裏說起。
Android5.0 vold-啓動過程
Android5.0 vold-註冊過程(上)
Android5.0 vold-註冊過程(下)api
Vold是Volume Daemon的簡寫。
直譯過來Volume能夠翻譯爲卷,是電腦中磁盤的概念,對應到手機上就是相關存儲介質
看到Daemon字樣就知道這是一個守護進程,那它有什麼做用呢?
首先它是一個native程序,用於鏈接kernel和framework(SystemServer進程),使他們能夠通訊。通訊的內容包括:SD插撥、掛載、卸載、格式化等。
框架以下圖
架構
既然主要是講vold,那就先來看看vold的內部組成框架
vold的總體架構已經主要組成部分的功能就介紹完了,這裏故意沒有涉及到任何代碼,主要目的就是得首先頭腦裏得有個大體的框架,知道某個組件的做用,從哪裏接受信息,要把信息傳遞到哪裏去,這樣纔不至於在後續的代碼講解中lostsocket
上文提到了Netlink & Uevent & Socket,那他們是什麼呢?post
Netlink是Linux系統中用戶空間進程和Kernel進行通訊的一種機制,用戶空間進程能夠接收來自Kernel的消息,同時也能夠向Kernel發送一些控制命令翻譯
uevent和Linux的設備文件系統及設備模型有關,是sysfs向用戶空間發送的消息。
消息格式其實是一串字符串。當外部設備發生變化時,會引發Kernel發送uevent消息
通常設備在/sys對應的目錄下有個叫uevent的文件,往該文件裏寫入指定數據,也會觸發Kernel發送和該設備相關的uevent消息,內核經過uevent告知外部存儲系統發生的變化。cdn
這個你們確定已經耳熟能詳了,在這裏主要是用於vold和systemserver的IPC .
關於socket的使用能夠點擊 Unix Socketserver