android守護進程vold

來源:互聯網
上載者: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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.