高通平台Android7.0自动挂载exFAT格式SD卡和U盘

由于工作需要,想实现exFAT格式的U盘和SD卡自动挂载,但目前看到的文章基本都是采用MTK平台,要不就是android4.x,太老了。而且我试了下没有可以挂载成功的,通过一加开源源码修改了一份exFAT的移植方案。基于android7.0 高通平台。

采用noFuse方式添加exFAT文件系统,并实现SD卡自动挂载。

Kernel部分:

  1. 在kernel/fs下新增exFAT驱动
  2. 修改kernel/fs中Makefile文件,使exFAT目录参与编译。

         obj-y                += exfat/

 

修改后在exFAT源码中随便添加个编译报错试一下是否参与了编译。Kernel部分修改完成。

 

System/vold部分

      这部分实现exFAT格式的SD卡自动挂载功能

  1. 在System/vold/fs目录下新建 Exfat.cpp 和 Exfat.h

  2. 修改Disk.cpp

 

      if (table == Table::kMbr) {
                const char* type = strtok(nullptr, kSgdiskToken);
                LOG(WARNING) << "mbr type =  " << type;
                // switch (strtol(type, nullptr, 16)) {
                // case 0x06: // FAT16
                // case 0x0b: // W95 FAT32 (LBA)
                // case 0x0c: // W95 FAT32 (LBA)
                // case 0x0e: // W95 FAT16 (LBA)
                //     createPublicVolume(partDevice);
                //     break;
                // }
                createPublicVolume(partDevice);
            }

            原生代码只支持FAT32这里要将switch判断去掉,让其创建volume;也可以加一个case,但我不确定要加那些case所以就注释掉了

      3. 修改PublicVolume.cpp

        在doMount方法中添加exFAT分支,根据方法中FAT32文件系统的代码添加判断即可。

        else if (mFsType == "exfat") {
        if (exfat::Check(mDevPath)) {
            LOG(ERROR) << getId() << " failed filesystem check";
            return -EIO;
        }
    }

     else if (mFsType == "exfat") {
        if (exfat::Mount(mDevPath, mRawPath, false, false, false,
                AID_MEDIA_RW, AID_MEDIA_RW, 0007, true)) {
            PLOG(ERROR) << getId() << " exfat: failed to mount " << mDevPath;
            return -EIO;
        }
        else
            LOG(VERBOSE) << "exfat: mount succeed " << mDevPath;
    }

 

 

 

        4. 修改Android.mk文件

             添加Exfat.cpp 参与编译

External部分

        修改external/e2fsprogs/lib/blkid/probe.c和external/e2fsprogs/lib/blkid/probe.h 这两个文件。因为SD卡插入后要进行文件系统检查,这里增加blkid命令对exFAT的支持。

这部分是参考https://blog.csdn.net/huolinliang/article/details/86589976 这篇文章。

 

Device部分

       修改fstab.qcom文件,将sd卡的type修改为auto

 

system\sepolicy部分

        以上部分修改完成后,功能可以实现,但是有selinux报错,可以先设置setenforce 0 进行调试。

 

完整代码下载地址:https://download.csdn.net/download/qq_26338009/11670887

你可能感兴趣的:(Android,Linux,exFAT)