지원되는 파일시스템이 fat32와 NTFS를 지원합니다.
fat에는 4Gbyte 이상의 파일을 넣을 수 없는 문제가 있습니다.
NTFS는 4Gbyte이상의 파일을 넣을 수 있지만 readonly로만 mount 되고 불안전 합니다.
그래서 Ext4 파일 시스템을 지원해 보겠습니다.
system/vold/Volume.h/cpp를 아래와 같이 Ext4를 추가 합니다.
50 protected:
51 char *mLabel;
52 char *mMountpoint;
53 VolumeManager *mVm;
54 bool mDebug;
55 int mPartIdx;
56 int mOrigPartIdx;
57 bool mRetryMount;
58 int filesystem;
59
47 #include "Ntfs.h"
48 #include "Ext4.h"
49 #include "Process.h"
50 #include "cryptfs.h"
260 if (filesystem == VFAT) {
261 if (Fat::format(devicePath, 0)) {
262 SLOGE("Failed to format (%s)", strerror(errno));
263 goto err;
264 }
265 } else if (filesystem == EXT4) {
266 if (Ext4::format(devicePath)) {
267 SLOGE("Failed to format (%s)", strerror(errno));
268 goto err;
269 }
270 }
403 filesystem = VFAT;
404
405 for (i = 0; i < n; i++) {
406 char devicePath[255];
407
408 sprintf(devicePath, "/dev/block/vold/%d:%d", MAJOR(deviceNodes[i]),
409 MINOR(deviceNodes[i]));
410
411 SLOGI("%s being considered for volume %s\n", devicePath, getLabel());
412
413 errno = 0;
414 setState(Volume::State_Checking);
415
416 if (Fat::check(devicePath)) {
417 if (errno == ENODATA) {
418 SLOGW("%s does not contain a FAT filesystem\n", devicePath);
419 if (Ntfs::doMount(devicePath, getMountpoint(), false, false, false,
420 1000, 1015, 0702, false)) {
421 SLOGE("%s failed to mount via NTFS (%s)\n", devicePath, strerror(errno));
422 if (Ext4::doMount(devicePath, getMountpoint(), false, false, false)) {
423 SLOGE("%s failed to mount via Ext4 (%s)\n", devicePath, strerror(errno));
424 } else {
425 filesystem = EXT4;
426 SLOGE("Ext4 mounted");
427 continue;
428 }
429 } else {
430 filesystem = NTFS;
431 SLOGE("NTFS mounted");
432 continue;
433 }
434 }
ubuntu PC에서 SD Card나 USB Storage를 Ext4로 format하시고 아래와 같이 권한을 변경해 주세요.
sudo nautilus로 실행하시면 됩니다.