Android 11.0 支持exFAT文件系统

Android 11.0 支持exFAT文件系统

U盘常见文件系统类型有FAT32、NTFS、exFAT, Android默认支持FAT32,  一般也有NTFS类型编译选项, 但是exFAT由于版权或者其他原因,默认是不支持的。网上已有android N、P exFAT文件系统支持的移植,但是过程中可能会遇到不少小问题。为了方便有Android 11支持exFAT需求的你快速完成, 结合其他优秀作者的文章,写下此篇供遇到坑的你参考。与Android 9移植该功能基本一样,下面记录一下移植过程。

 不知道前人是不是有说过只需要移植nofuse即可, 我是同时移植nofuse和fuse, 才完成exfat支持的。

系统信息:

Android 11

kernel: 4.19.172

过程分两大步骤:

步骤一:kernel中移植nofuse

源码:https://github.com/dorimanx/exfat-nofuse

将代码下载解压后,更名exfat放到kernel/fs下, 修改kernel下Kconfig、Makefile:

Android 11.0 支持exFAT文件系统_第1张图片

在kernel默认编译配置文件中,修改编译选项打开:

Android 11.0 支持exFAT文件系统_第2张图片

在系统配置devices.mk中增加,一般在device/vendor/xxx.mk中

Android 11.0 支持exFAT文件系统_第3张图片

完成上述, 编译kernel, 升级。串口查看cat /proc/filesystems(如果没有exfat 将会mount失败, PublicVolume.cpp中的内容,不做展开):

Android 11.0 支持exFAT文件系统_第4张图片

命令dmesg | grep FAT,查看有如下信息:(如果无mount信息,后面再说)

另外要注意system/vold/fs/Exfat.cpp中的内容:

Android 11.0 支持exFAT文件系统_第5张图片

步骤二:移植fuse

https://github.com/Shawnsongs/Android_P_external_exfat_ntfs-3g/tree/master/external-exfat-fuse

下载上述源码,并放到external下, 修改两个路径下的Android.mk。一般会有一些警告和错误,不过上述源码前面作者已经debug过, 所以我这里不需要修改。编译时,可以source build/envsetup.sh;lunch后,在exfat路径下mm单独编译节省时间,如果编译通过,则可以编译整包升级查看。

其他文章没有提到这个修改,参考ntfs配置,我在下面加了下面的修改:

Android 11.0 支持exFAT文件系统_第6张图片

编译警告或错误, 可以阅读文末连接,看看是否有你遇到的情况。我是换了上述的源码去编译,无报错和异常。都正确的话,输入命令 ls -l /system/bin/*.exfat, 可以看到下图打印

如果一切顺利,主板插入exFAT格式U盘有如下打印:

Android 11.0 支持exFAT文件系统_第7张图片

-----------------------附---------------------------

如果不那么顺利,遇到前文提到的挂载失败,就要阅读system/vold下的代码了。可以输入:clear;logcat -c;logcat -s vold,  查看相关代码分析是否是mount失败. 下图是mount成功的打印

Android 11.0 支持exFAT文件系统_第8张图片

参考链接:

https://blog.csdn.net/an_times/article/details/106858104

https://blog.csdn.net/wolfnx/article/details/106745236

你可能感兴趣的:(Android系统,C/C++,android,linux)