android usb mass storage EMMC转化为SD卡(三)

先转载一位博友的话

一种办法是
把内部flash mount为sdcard,然后把外部sd卡 mout到 /mnt/sdcard/下面的某个子目录
比如 /mnt/sdcard/externalsdcard
这种做法的优点是可以有一个一直存在的SD卡
缺点是内置flash要足够大,vold中要增加mount/unmount处理
而APK是没有机会安装到实际的外置SD卡上的

另外的一种办法是
在没有SD卡插入时把一部分内置flash mount到/mnt/sdcard
在SD卡插入时把实际SD卡重新mount到/mnt/sdcard
这种做法的优点是SD卡插入时APK会安装到实际SD卡上,可以把flash上的某个目录作为虚拟SD卡,比较灵活
缺点是相当于两个SD卡在切换,就是说安装到虚拟SD卡上的APK在第二个SD卡插入时消失

第一种的代码修改比较多,主要是增加/mnt/sdcard/externalsdcard设备的mount/unmount
第二种的修改比较少,只需要在vold里面做workaround


第二种方法就不推荐了,没起到什么作用.

还有一种方法就是


把一部分内置flash mount到/mnt/sdcard
把实际SD卡重新mount到/mnt/sdcardext

这种方法对比第一种方法,显然麻烦很多.需要考虑到mediascanner的处理,而且还需要对export进行处理.


这里说说第二种方法为什么要考虑当mount/unmount的处理.


因为这里的mount和unmount要有一个固定的顺序.

    1.mount外置SD卡的时候内置SD卡一定要mount上.否则内置SD卡没有mount point.

    2.unmount SD卡的时候一定要先unmount外置SD卡,不然会有SD卡无法卸载.

如果不遵守这个原则会引发USB大容量储存或者安装、卸载、格式化SD卡出现问题.


vold里改动文件

CommandListener.cpp		diff | blob | history
Volume.cpp		        diff | blob | history
Volume.h		        diff | blob | history
VolumeManager.cpp		diff | blob | history
VolumeManager.h		        diff | blob | history


services里的改动文件

services/java/com/android/server/MountService.java



你可能感兴趣的:(android usb mass storage EMMC转化为SD卡(三))