Android vold原始碼分析之掛載SD卡 8

2021-08-26 13:38:58 字數 1213 閱讀 7882

3.掛載磁碟。這裡都有乙個const char *型別的引數,這引數儲存著每個磁碟的標籤資訊,比如sd卡的label是sdcard。

int volumemanager::mountvolume(const char *label) return v->mountvol(); }

lookupvolume函式尋找與label匹配的物件:

volume *volumemanager::lookupvolume(const char *label) else } return null; }

如果找到,直接返回磁碟物件volume*,掛載操作在mountvol函式裡面,該函式內容有點多,貼原始碼:

這個掛載函式看起來,會發現很繁瑣,好幾個目錄的掛載關係,有以下掛載目錄:

/dev/block/vold/8:1 掛載在-> /mnt/secure/staging

/mnt/secure/staging/.android_secure 掛載在-> /mnt/secure/asec

tmpfs 掛載在-> /mnt/secure/staging/.android_secure

/mnt/secure/staging 掛載在-> /mnt/sdcard

從程式的注釋看,這樣的目的是掛載乙個只有root使用者能檢視的目錄,具體還是沒搞清楚谷歌為什麼要這樣掛載,

還是有疑問,希望有清楚的高手指點一下。

sd卡的掛載比較清楚,中間多了乙個中介,將裝置節點8:1掛載在/mnt/secure/staging,最後又將該目錄掛載在/mnt/sdcard,

這目錄就是終端使用者能夠看到檔案的目錄。

函式裡面涉及到幾個函式:

getdevicenodes函式獲取掛載裝置的裝置號與分割槽數量,是volume類的乙個純虛函式,在子類directvolume中實現,原始碼:

int directvolume::getdevicenodes(dev_t *devs, int max) int i; for (i = 0; i < mdisknumparts; i++) return mdisknumparts; } devs[0] = mkdev(mdiskmajor, mpartminors[mpartidx -1]); return 1; }

下面貼一些mountvol裡面掛載的原始碼:

篇幅有點長了,掛載點也掛載了好幾個,mountvol處理的事情最多的,也最繁瑣,但都是簡單的,主要是有點摸不著頭腦,

谷歌為啥要這樣掛載,也許自己太菜了。。

Android vold原始碼分析之掛載SD卡 8

3.掛載磁碟。這裡都有乙個const char 型別的引數,這引數儲存著每個磁碟的標籤資訊,比如sd卡的label是sdcard。int volumemanager mountvolume const char label return v mountvol lookupvolume函式尋找與lab...

Android vold原始碼分析之解除安裝SD卡 9

本文分析解除安裝sd卡的原始碼,這些涉及的內容比較少,走過就行。在android系統,系統設定裡面,提供了掛載,解除安裝與格式化的功能。在這裡,我們可以回憶一下,android在掛載sd卡有幾個途徑,解除安裝又是有幾種方法?一 掛載sd卡,有2種方式 1.使用者自己掛載sd卡 2.自動掛載sd卡,這...

Android vold原始碼分析之解除安裝SD卡 9

本文分析解除安裝sd卡的原始碼,這些涉及的內容比較少,走過就行。在android系統,系統設定裡面,提供了掛載,解除安裝與格式化的功能。在這裡,我們可以回憶一下,android在掛載sd卡有幾個途徑,解除安裝又是有幾種方法?一 掛載sd卡,有2種方式 1.使用者自己掛載sd卡 2.自動掛載sd卡,這...