android sdcard存储方案(基于fuse文件系统):之二

续《android sdcard存储方案(基于fuse文件系统):之一》,再聊聊基于android sdcard存储方案(基于fuse文件系统):之二

以后有空再谈谈该方案的缺点,及优化方案。


一、android GB 及JB、KK版本内置sdcard效果对比图


从上面效果对比图,我们可以发现android fuse sdcard 有如下两个优点:

1、使用fuse后 /data 和  /sdcard0 是共离一块分区,这块分区的空间/data和/sdcard0 动态享用, 用户使用灵活。

2、去掉了fat32文件系统,这样也免去了一个license的风险。


二、fuse的标准工作流程图

from:  http://en.wikipedia.org/wiki/Filesystem_in_Userspace

Filesystem in Userspace
FUSE structure.svg

这里重点说明libfuse的作用:libfuse为开发者提供了接口fuse_operations开发者只需要实现这组接口,然后调用fuse初始化接口:fuse_mount()、fuse_new()、fuse_loop()即可实现一个用户空间文件系统。这样为开发多种fuse文件系统带来很多方便。


三、android fuse sdcard架构图及source code

1、source code:
\system\core\sdcard\
\frameworks\base\cmds\installd\    JB
./frameworks/native/cmds/installd/   KK
\kernel\fs\fuse\

2、fuse操作流程图:



android fuse sdcard的操作流程说明:

步骤1:黑色箭头所示,app通过fuse向sdcard dameon 发出操作请求

步骤2:红色箭头所示:sdcard damon 实际完成操作,比如此例:通过vfs、ext4向实际存储器操作

步骤3:蓝色箭头所示:sdcard damon通过fuse向app反馈操作结果

android fuse sdcard  流程和标准fuse流程图最大不同点在于:

android没有直接移植标准的libfuse,而是重写了相关代码,将libfuse的功能集成到sdcard dameon。

这样做的我能想到的好处,可能就是函数调用的层次少了一些,可能效率会好点。

一直想不明白android为什么不移植libfuse ?


3、fuse sdcard 的mount状态,如下图:





四、使用fuse sdcard 带来的一些问题及解决方法

1、/data和/sdcard 动态占用空间,如果用户通过/sdcard将整个分区填满,则会导致系统无法启动。
时,仅允许系统写入,不允许普通 app

  解决办法,就是设置一个/sdcard/可用的上限,不至于导致系统崩溃至无法启用。

 具体可以参考mtk修改的代码:\kernel\fs\fuse\inode.c (LIMIT_SDCARD_SIZE包宏处)

static void convert_fuse_statfs(struct kstatfs *stbuf, struct fuse_kstatfs *attr)
{
stbuf->f_type    = FUSE_SUPER_MAGIC;

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值