Android 8.1下內(nèi)置存儲(chǔ)sdcard無法掛載

平臺(tái):

Rockchip 3399
Android 8.1

問題:

開機(jī)后慢宗,內(nèi)置/sdcard分區(qū)不可訪問,無法掛載伊脓,/storage/xxxx對(duì)應(yīng)得是外置存儲(chǔ)卡平酿,可以訪問。

涉及源碼

StorageManagerService (如下簡(jiǎn)稱SMS)
VoldConnector
Vold (system/vold)

分析

  1. 首先看mount結(jié)果受葛,與正常設(shè)備做對(duì)比题涨,發(fā)現(xiàn)問題設(shè)備沒有掛載/data/media


    image.png

    雖然有區(qū)別, 但是無法看出問題所在总滩。

  2. 對(duì)比SMS中開機(jī)時(shí)發(fā)送的vold指令


    image.png

此處發(fā)現(xiàn)纲堵,問題設(shè)備(左)沒有發(fā)送下面的命令

SND -> {5 volume mount emulated 3 -1}

這也是解決此問題的關(guān)鍵。

  1. 分析SMS的源碼闰渔,發(fā)現(xiàn)有兩處會(huì)發(fā)送 volume mount 指令給vold席函。
    一處是mount函數(shù),這個(gè)函數(shù)一般是通過StorageManager然后通過binder調(diào)用過來的冈涧,更多時(shí)候是給其他service茂附,乃至APP使用,所以分析時(shí)我認(rèn)定此處不是觸發(fā)volume mount命令的根源督弓,通過添加log也確認(rèn)了此想法营曼。
    另一處,是SMS中的handler收到H_VOLUME_MOUNT消息時(shí)發(fā)出的


    image.png
  2. 分析H_VOLUME_MOUNT的發(fā)出愚隧,這個(gè)消息的發(fā)出也有好幾處地方蒂阱,通過添加log,確認(rèn)在onVolumeCreatedLocked函數(shù)中發(fā)出,但是這里也有好幾個(gè)分支


    image.png

通過分析更多的log录煤,正常和異常設(shè)備虱痕,開始時(shí)都會(huì)調(diào)用兩次onVolumeCreatedLocked,并且有兩種type都會(huì)調(diào)用辐赞,TYPE_EMULATED和PUBLIC部翘,但是通過第3步中命令對(duì)比,可以發(fā)現(xiàn)問題出現(xiàn)在TYPE_EMULATED這個(gè)if分支中响委,異常設(shè)備中新思,并沒有發(fā)出SND -> {5 volume mount emulated 3 -1}
原因就是正常設(shè)備中,mPrimaryStorageUuid這個(gè)字段開機(jī)時(shí)會(huì)被初始化為null赘风,而異常設(shè)備不會(huì)夹囚。如下log
異常設(shè)備

image.png

正常設(shè)備

image.png

所以在異常設(shè)備中,因?yàn)閙PrimaryStorageUuid這個(gè)字段的存在邀窃,導(dǎo)致無法執(zhí)行正確的代碼邏輯荸哟,沒有發(fā)出SND -> {5 volume mount emulated 3 -1}指令。

  1. mPrimaryStorageUuid 這個(gè)字段的賦值瞬捕,這個(gè)字段是在SMS的構(gòu)造函數(shù)中完成初始化的鞍历,SMS的構(gòu)造函數(shù)調(diào)用了readSettingsLocked函數(shù),在這個(gè)函數(shù)中肪虎,會(huì)解析 /data/system/storage.xml文件劣砍,在讀到<volumes>標(biāo)簽時(shí),給mPrimaryStorageUuid賦值扇救,從如下文件內(nèi)容看刑枝,異常設(shè)備中是有值的。
異常設(shè)備
2|rk3399:/data/system # cat storage.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<volumes version="3" primaryStorageUuid="b3929278-9b6d-42b4-bc36-25624ac57088" forceAdoptable="false">
<volume type="0" fsUuid="5892-50F7" userFlags="1" createdMillis="1596803101624" lastTrimMillis="0" lastBenchMillis="0" />
<volume type="0" fsUuid="A228-275C" userFlags="1" createdMillis="1592010634266" lastTrimMillis="0" lastBenchMillis="0" />
<volume type="1" fsUuid="b3929278-9b6d-42b4-bc36-25624ac57088" partGuid="785A63E9-AB9F-4EC6-AB3C-7835858B887D" nickname="SanDisk SD 卡" userFlags="0" createdMillis="1592011533004" lastTrimMillis="0" lastBenchMillis="1592011548005" />
<volume type="0" fsUuid="6636-3230" userFlags="0" createdMillis="1591193458084" lastTrimMillis="0" lastBenchMillis="0" />
<volume type="0" fsUuid="6437-3432" userFlags="0" createdMillis="1591776505636" lastTrimMillis="0" lastBenchMillis="0" />
</volumes>


正常設(shè)備
rk3399:/data/system # cat storage.xml
<volumes version="3" forceAdoptable="false">
<volume type="0" fsUuid="5892-50F7" userFlags="0" createdMillis="1573013876754" lastTrimMillis="0" lastBenchMillis="0" />
<volume type="0" fsUuid="8765-4321" userFlags="0" createdMillis="1592815201367" lastTrimMillis="0" lastBenchMillis="0" />
</volumes>

  1. 總結(jié)
    該問題的解決迅腔,可以通過刪除 data/system/storage.xml 并重啟設(shè)備 來完成装畅,這樣SMS會(huì)重新寫這個(gè)文件。

但是出現(xiàn)該問題的原因還無法確定沧烈,因?yàn)槌霈F(xiàn)問題時(shí)的log已經(jīng)沒有掠兄,即便有,相關(guān)信息也比較少掺出,無法定位徽千。
我分析比較可能的原因是插入了一個(gè)android設(shè)備無法識(shí)別(可能是格式問題)的外置存儲(chǔ)卡導(dǎo)致,并且從storage.xml中可以看到汤锨,異常的uuid是很長(zhǎng)一大串的隨機(jī)數(shù)双抽,一些正常的外置卡,則比較規(guī)律闲礼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牍汹,一起剝皮案震驚了整個(gè)濱河市铐维,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慎菲,老刑警劉巖嫁蛇,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異露该,居然都是意外死亡睬棚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門解幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抑党,“玉大人,你說我怎么就攤上這事撵摆〉卓浚” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵特铝,是天一觀的道長(zhǎng)暑中。 經(jīng)常有香客問我,道長(zhǎng)鲫剿,這世上最難降的妖魔是什么鳄逾? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮牵素,結(jié)果婚禮上严衬,老公的妹妹穿的比我還像新娘。我一直安慰自己笆呆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布粱挡。 她就那樣靜靜地躺著赠幕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪询筏。 梳的紋絲不亂的頭發(fā)上榕堰,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音嫌套,去河邊找鬼逆屡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踱讨,可吹牛的內(nèi)容都是我干的魏蔗。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼痹筛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼莺治!你這毒婦竟也來了廓鞠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤谣旁,失蹤者是張志新(化名)和其女友劉穎床佳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榄审,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砌们,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搁进。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怨绣。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拷获,靈堂內(nèi)的尸體忽然破棺而出篮撑,到底是詐尸還是另有隱情,我是刑警寧澤匆瓜,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布赢笨,位于F島的核電站,受9級(jí)特大地震影響驮吱,放射性物質(zhì)發(fā)生泄漏茧妒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一左冬、第九天 我趴在偏房一處隱蔽的房頂上張望桐筏。 院中可真熱鬧,春花似錦拇砰、人聲如沸梅忌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牧氮。三九已至,卻和暖如春瑰枫,著一層夾襖步出監(jiān)牢的瞬間踱葛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工光坝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尸诽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓盯另,卻偏偏與公主長(zhǎng)得像性含,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子土铺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350