android守護進程vold
最後更新:2018-12-05
來源:互聯網
上載者:User
一、進程啟動和設定檔的分析 vold的全稱是volume daemon。實際上是負責完成系統的CDROM, USB大型存放區,MMC卡等擴充儲存的 掛載任務自動完成的守護進程。它提供的主要特點是支援這些儲存外設的熱插拔。在Android上的這個 vold系統和GNU/Linux的之間存在很大的差異,這裡主要是分析Android上的vold系統的處理過程。
自Android 2.2開始,vold又做了大改動,升級為vold 2.0,之前的設定檔是
system/etc/vold.conf,vold 2.0變為system/etc/vold.fstab。 1、啟動vold
在init.rc中啟動VOLD這個守護線程和建立socket的命令如下:
service vold /system/bin/vold
socket vold stream 0660 root mount
ioprio be 2
2、配置vold.fstab
vold.fstab檔案的格式是:
Format: dev_mount <label> <mount_point> <part> <sysfs_path1...>
label: -Label for the volume
mount_point -Where the volume will be mounted
part -Partition #(1 based), or 'auto' for first usable partition.
<sysfs_path> -List of sysfs paths to source devices
例如:
dev_mount sdcard /mnt/sdcard 1 /devices/platform/mxsdhci.0/mmc_host/mmc0
自Android 2.2後,SD mount的位置變為/mnt/sdcard。
二、控制流程程分析 Vold關於SD card settings的代碼位於:
packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.java
Vold上層MountService的代碼位於:
frameworks/base/services/java/com/android/server/MountService.java
Vold底層處理的代碼位於:
system/vold/
1、Vold設計架構
Setting
|
MountService
|
CommandListener
|
VolumeManager - NetlinkManager
|
Volume - DirectVolume
|
SD/USB device
MountService會接收來之Setting的變化,及來自底層VolumeManager的資訊,並對之分析判,然後 通過doMountVolume命令到底層。
Vold初始化時,會建立class NetlinkManager和VolumeManager,class NetlinkManager接收
來自底層的資訊,然後傳交給VolumeManager處理;
重要類class VolumeManager 僅有一個執行個體,它主要負責vold的管理操作,管理多個sd卡,usb各種 操作;重要類class Volume 可有多個執行個體, 掛載多少個sd卡、usb,它就有多少個。重要類class DirectVolume 封裝了很多的方法和屬性;重要類class CommandListener主要收到上層 MountService通過doMountVolume發來的命令,分析後,轉交給VolumeManager處理;
VolumeManager處理資訊後,或報告給上層MountService,或交給volume執行具體操作(掛載 SD,USB).
2、Vold代碼實現過程大致分為三步:
1).建立連結:
在vold作為一個守護進程,一方面接受驅動的資訊,並把資訊傳給應用程式層;另一方面接受上層的命令並 完成相應操作。
所以這裡的連結一共有兩條:
(1)vold socket: 負責vold與應用程式層的資訊傳遞;
(2)訪問udev的socket: 負責vold與底層的資訊傳遞;
這兩個連結都是在進程的一開始完成建立的。 2).引導:
這裡主要是在vold啟動時,對現有外設存放裝置的處理。首先,要載入並解析vold.fstab,
並檢查掛載點是否已經被掛載(註:這裡檢查掛載點的用意不是很清楚!); 其次,執行MMC卡掛 載; 最後,處理USB大型存放區。 3).事件處理:
這裡通過對兩個連結的監聽,完成對動態事件的處理,以及對上層應用操作的響應。 擴充文章 http://blog.csdn.net/zoe6553/article/details/6115068