我们在对安卓ROM进行移植的时候,因为移植相对来说比较麻烦,经常会出现很多的问题,特别是常出现的一个问题,就是ROM移植之后无法挂载内外SD卡。接下来就来看看如何去修复移植ROM后无法挂载内外SD卡的BUG。
第一步:问题简述
从这次的移植个例来看,与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步的修改,就可以解决上面的日志错误。
3
第三步:补充知识说明
SD卡无法识别或者挂载你可以先进入手机的shell终端,然后输入命令: ls -al /storage 来进行初步查看。/storage目录下面一般都会包含两个目录:sdcard0, sdcard1,通过上面的命令你就可以看到这两个目录的具体操作权限了。
如果这里的目录的权限都是000,对于外置SD卡来说就说明你的SD卡没有正确挂载,对于内置SD卡来说就说明你还没有正确的创建该目录的软链; 如果你发现这里这里的目录有操作权限,用cd命令进入后也能够看到里面的文件,对于外置SD卡来说,你的外置SD卡挂载是没有问题的,但是对于内置SD卡来说,你的挂载的参数没有设置正确。
三星d710刷机 sxd710sj.sxingshaji.cn