我一直用的一个三星手机,采用原厂的ROM就没有问题,一旦刷成比较新的4.2版本,就会出现(经常性的)内置SD卡无法自动加载的问题。这是一个很讨厌的问题,因为一旦内置的SD卡无法加载,很多应用就会出问题,比方说相机就会拒绝工作,其他应用的配置就会丢失等,即使手机插了外部的SD卡,但是大多数应用只认内部的SD卡!
上网搜了很久,貌似碰到该问题的人不是很多,一个比较靠谱的回答是内置的内存质量有问题,所以在启动时加载的时候会出错,奇怪的是用旧版本的(原机ROM,基于2.3版本)就很好。那么有没有可能在开机启动后手动加载内置SD卡呢?网上搜了一下,有这方面的详细讲解,但是本人对Android内核不是很了解,而且手动挂载可能还得编写一个Android APP,否则每次都要打开一个shell岂不是很麻烦?!这么一考虑这个方法工作量比较大,实在不适合目前还不想折腾的我。
还有另外一个办法,主要是针对内置SD卡损坏的问题。考虑到原ROM中,是没有内置外置SD的概念的,一直到了android4.0之后可能才有了所谓的内置SD卡,而新ROM的方法就是对内存进行重新分区,将一部分内存当做内置的SD卡来处理。会不会三星在设计这款机器的时候没有考虑到内存分区带来的问题,所以才会产生这样的问题?不管怎样,假设内置的SD卡有问题,那怎么办呢?
网上有解决方案。其实也很简单,就是交换SD卡,将外置的SD卡作为内置的SD卡来用,而内置SD卡就成为了外置SD卡。这样只要保证外置的SD卡没问题,就不会出现上面的故障。
在系统中有一个文件vold.fstab(/system/etc/vold.fstab),里面记录了SD卡的挂载配置。
## Vold 2.0 Generic fstab
## - San Mehat (san@android.com)#########################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...>
## label - Label for the volume
## mount_point - Where the volume will be mounted
## part - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################
# internal sdcard
dev_mount sdcard /storage/sdcard1 28 /devices/platform/msm_sdcc.2/mmc_host/mmc1
# externel sdcard
dev_mount external_sd /storage/sdcard0 auto /devices/platform/msm_sdcc.4/mmc_host/mmc2
# usb disk
dev_mount usbdisk /storage/usbdisk auto /devices/platform/msm_hsusb_host.0
注意里面的internal sdcard和 external sdcard,其实要交换一下也很简单,只要将两者的挂载点互换一下就好了,也就是把红色的部分互换一下就好了。关机重启,然后就不会出现SD卡加载不了的情况了。
我的情况是,交换的SD卡后,原先无法挂载的内置SD卡,现在成了外置的SD卡了,而且很好用,没什么问题;而且现在内置的SD卡有4G,比原先(1G)大了很多。
参考: