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