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卡,這...