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

本文探讨了Android系统中管理内置闪存和外置SD卡的方法,包括将内置闪存映射为SD卡,以及在外置SD卡插入时如何重新挂载。文章详细讨论了这些方法的优缺点,并提出了在实现过程中需要考虑的关键步骤和技术挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先转载一位博友的话

一种办法是
把内部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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值