安卓清理大师
您当前位置: 刷机教程 -开发教程
教你修复移植ROM后无法挂载内外SD卡的BUG
发布日期:2014/9/9 来源:独行无疆 编辑:romJames 38671 阅读 0评论
此教程基于联想的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文件;
    具体解决办法如下:

步骤方法

  1. 替换/system/etc/vold.fstab文件与你机器的官方ROM的该文件。
  2. 替换/system/bin/vold文件,这个文件可能通过beyond compare比较看起来一致,但实际打开比较后就会发现  实际上是不一样的。经过这两个步骤,一般来说外置SD卡都可以正常挂载了。
  3. 解包boot.img,在里面找到init.no_ssd.rc(有的机器可能是init.ssd.rc), 将其中的内容全部替换成官方boot.img里面的同名文件或者init.ssd.rc中的内容。这个步骤操作的目的就是按照官方的init脚本来创建SD卡相关的目录链接等。
  4. 经过上面的3个步骤,在你手机的/storage目录下面应该可以看到sdcard0和sdcard1的权限都不再是000了。此时如果你的文件管理器或者其它应用程序还是不能识别SD卡,那么就需要修改/system/framework/framework-res.apk里面的res/xml/storage_list.xml文件。你可以先尝试替换该文件,如果还是不能解决问题那么就需要反编译进行修改了。
  5. 确定内置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卡来说,你的挂载的参数没有设置正确。
发表评论
点击换图
发表