此教程基于聯(lián)想的A850為華為3c 1G移動版移植MIUI V5的親自實踐。ROM移植問題多多,同樣的問題解決辦法很可能都不一樣。如果你是做其它移植時遇到這種問題,這里提供的僅是一種解決問題的思路。
問題簡述
- 從這次的移植個例來看,與SD卡掛載相關(guān)的文件主要有:
boot.img解包后的里面的init.ssd.rc或者init.no_ssd.rc;
/system/bin/vold;/system/etc/vold.fstab;
/system/framework/framework-res.apk里面的res/xml/storage_list.xml文件;
具體解決辦法如下:
步驟方法
- 替換/system/etc/vold.fstab文件與你機器的官方ROM的該文件。
- 替換/system/bin/vold文件,這個文件可能通過beyond compare比較看起來一致,但實際打開比較后就會發(fā)現(xiàn) 實際上是不一樣的。經(jīng)過這兩個步驟,一般來說外置SD卡都可以正常掛載了。
- 解包boot.img,在里面找到init.no_ssd.rc(有的機器可能是init.ssd.rc), 將其中的內(nèi)容全部替換成官方boot.img里面的同名文件或者init.ssd.rc中的內(nèi)容。這個步驟操作的目的就是按照官方的init腳本來創(chuàng)建SD卡相關(guān)的目錄鏈接等。
- 經(jīng)過上面的3個步驟,在你手機的/storage目錄下面應(yīng)該可以看到sdcard0和sdcard1的權(quán)限都不再是000了。此時如果你的文件管理器或者其它應(yīng)用程序還是不能識別SD卡,那么就需要修改/system/framework/framework-res.apk里面的res/xml/storage_list.xml文件。你可以先嘗試替換該文件,如果還是不能解決問題那么就需要反編譯進行修改了。
- 確定內(nèi)置SD卡,修改storage_list.xml文件。通過在手機終端中輸入:ls -al /storage 即可看到/storage下面目錄的詳細(xì)信息,有軟鏈接的一般都是內(nèi)置SD卡。我的就是sdcard0,此時打開storage_list.xml文件,找到sdcard0的那個節(jié)點,然后添加一個屬性: android:emulated="true" ,如果沒有添加的話,系統(tǒng)打印出的錯誤日志大致如下所示:
W/MountService( 531): getVolumeState(/storage/sdcard0): Unknown volume
E/MountService( 531): getVolumeState(/storage/sdcard0): ERROR!
通過上面的第5步的修改,就可以解決上面的日志錯誤。
補充知識說明
- SD卡無法識別或者掛載你可以先進入手機的shell終端,然后輸入命令: ls -al /storage 來進行初步查看。/storage目錄下面一般都會包含兩個目錄:sdcard0, sdcard1,通過上面的命令你就可以看到這兩個目錄的具體操作權(quán)限了。
如果這里的目錄的權(quán)限都是000,對于外置SD卡來說就說明你的SD卡沒有正確掛載,對于內(nèi)置SD卡來說就說明你還沒有正確的創(chuàng)建該目錄的軟鏈; 如果你發(fā)現(xiàn)這里這里的目錄有操作權(quán)限,用cd命令進入后也能夠看到里面的文件,對于外置SD卡來說,你的外置SD卡掛載是沒有問題的,但是對于內(nèi)置SD卡來說,你的掛載的參數(shù)沒有設(shè)置正確。