同ntfs一样,android默认的是不支持ext*格式的,可以自己把这些格式的支持加上去,但有一个问题,ext*不像fat那样挂载的时候支持uid、gid、fdmask等 参数,这会导致文件系统挂载上去后,发现还有一个问题,ext2,ext3,ext4的挂载上去后在应用中文件看不到,查了下原因是因为应用不能写u盘,说的具体点是应用的这个用户没有权限写u盘,我们看下fat挂载上去后的目录权限:
ls -l
drwxr-xr-x root system 1970-01-01 08:00 obb
drwxr-xr-x root system 1970-01-01 08:00 asec
drwx------ root root 1970-01-01 08:00 secure
d---rwxr-x system sdcard_rw 2012-03-29 17:11 sdcard
可以看到用户为systme,组为sdcard_rw但system的权限为0,组sdcard_rw的权限为7,可以读写,所以应用可以操作存储设备,这是因为在挂载fat格式的设备时mount的选项有uid=1000,gid=1015,fmask=702,dmask=702,1000在定义的是system,1015定义的是组sdcard_rw,fmask=702,dmask=702表示的是实际的权限与这个mask的~,所以:就有了上面的目录权限,只要是sdcard_rw组的用户都可以读写存储设备,但我在做其它格式的u盘挂载的时候,由于mount选项不支持,所以没有了这些选项的支持,导致挂载上去的目录是这样的:
ls -l
drwxr-xr-x root system 1970-01-01 08:00 obb
drwxr-xr-x root system 1970-01-01 08:00 asec
drwx------ root root 1970-01-01 08:00 secure
d rwxr-x --- root root 2012-03-29 17:11 sdcard
只有root用户才能写,所以应用进行写操作的时候会失败。开始用了一个很猥琐的方法,去解决这个问题,在mount上去后用chmod把sdcard这个目录的权限改为777 ,这样所有的用户对这个目录都有读写权限了,不过这好像感觉不太好,违背了android的权限管理,所以想办法搞成和fat挂载上去的权限一样,用了chown改变用户以及chgrp改变组,后面试了在mount的前面setgid改变组,不能使用setuid(1000),这样后没有权限mount了,这办法都试了,不过看了下效果还是不行,而且感觉做的很**,没办法,网上找了下,发现一个可以给内核打个补丁,使ext*打补丁能支持uid,gid选项,后