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

2021-08-26 13:42:05 字數 1782 閱讀 4238

本文分析解除安裝sd卡的原始碼,這些涉及的內容比較少,走過就行。在android系統,系統設定裡面,

提供了掛載,解除安裝與格式化的功能。在這裡,我們可以回憶一下,android在掛載sd卡有幾個途徑,

解除安裝又是有幾種方法?

一、掛載sd卡,有2種方式:

1.使用者自己掛載sd卡;

2.自動掛載sd卡,這時候是在android系統啟動完成後掛載的,所以可以看成是自動掛載;

二、解除安裝sd卡,有2種方式:

1.使用者自己解除安裝sd卡;

2.使用者移除sd卡;

解除安裝sd卡,1和2看起來有點矛盾,但這相當於平時我們在電腦使用u盤一樣,

一種是先安全刪除再移除u盤;

一種是不安全刪除直接移除u盤;

所以在android系統中,解除安裝sd卡有兩個途徑:

1.framework下發解除安裝命令(volume unmount sdcard force),解除安裝sd卡;

2.vold捕獲到移除事件,如果是非安全刪除sd卡,那麼就解除安裝sd卡。

所以掛載與解除安裝sd卡的兩種方法不同,掛載sd卡都是由framework下發命令,而解除安裝sd卡則不同。

一、先來分析framework下發解除安裝命令:

擷取commandlistener類其中的原始碼:

else if (!strcmp(argv[1], "unmount")) bool force = false; if (argc >= 4 && !strcmp(argv[3], "force")) rc = vm->unmountvolume(argv[2], force); }這條解除安裝命令的格式是:volume unmount sdcard true/false.

這裡有乙個強制解除安裝的標誌,也就是force引數,如果命令包含「force」字串,那麼就強制

解除安裝sd卡,接下來看unmountvolume解除安裝函式:

int volumemanager::unmountvolume(const char *label, bool force)

開始看解除安裝函式,以下函式均做簡化,不再貼出大量原始碼,android系統的原始碼實在太多:

int volume::unmountvol(bool force) if (dounmount(volume::sec_stg_secimgdir, force)) if (dounmount(volume::sec_asecdir, force)) if (dounmount(volume::sec_stgdir, force)) /*以上domovemount, dounmount等函式做些清理工作,就是之前掛載到系統的目錄 清理乾淨*/ /*解除安裝工作做完,告訴framework,該磁碟處於空閒狀態*/ setstate(volume::state_idle); /*用來儲存正在掛載的裝置號的全域性變數,現在賦為-1*/ mcurrentlymountedkdev = -1; return 0; }

二、vold捕獲移除事件,呼叫解除安裝函式:

void directvolume::handlepartitionremoved(const char *devpath, netlinkevent *evt) /*判斷,如果移除事件的裝置號與正在掛載系統的裝置號相等, 說明此時是沒有安全刪除,所以下面會廣播volumebadremoval反饋碼*/ if ((dev_t) mkdev(major, minor) == mcurrentlymountedkdev) /*在這裡呼叫了解除安裝函式,跟framework下發命令解除安裝一樣。*/ if (volume::unmountvol(true)) else } else if (state == volume::state_shared) else } }

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

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

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