简介:
Linux系统默认可以自动识别到fat32格式的盘,但fat32支持的文件不能大于4G,所以只能将移动硬盘和U盘格式化为NTFS和exFAT这两种格式的,对于U盘最好格式化为exFAT。
Linux5.4以上的内核原生支持exfat格式,不需要你单独安装就可以挂载exfat格式U盘。低版本的内核需要手动安装exfat。
exfat驱动源码有几种:
- exfat-fuse(用户态)
exfat-fuse是基于fuse的exfat,用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。
源码下载地址:https://github.com/relan/exfat
- exfat-nofuse(内核驱动层)
exfat-nofuse是从Android的Linux kernel3.0中移植而来,Android的Linux kernel 3.0上的exFAT驱动是第一个Linux“non-FUSE”kerneldriver,支持对exFAT文件系统进行正常在读取和写入操作,并且是由东家微软开发。exfat-nofuse在Linuxkernel3.8和3.9中通过测试。
源码下载地址:https://github.com/dorimanx/exfat-nofuse
- exfat-linux(内核驱动层)
exfat-linux基于三星公司开源的sdFAT驱动,其性能比exfat-nofuse高一点点,exfat-linux支持基本上所有主线内核,从3.4到4.19,以及ubuntu上使用的各种内核版本(3.4, 3.10, 3.18, 4.1, 4.4, 4.9, 4.14, 4.19 and 4.15, 5.0, 5.2, and 5.3-rc),在(x86(i386), x86_64(amd64), arm32(AArch32) and arm64(AArch64))都已经测试过。
源码下载地址:https://github.com/arter97/exfat-linux
本文讲解怎么在 Linux 内核添加exfat-linux驱动。
一、移植 exfat-linux
1、下载驱动源码
得到如下文件:
2、移植驱动
基于Linux内核4.14.180版本实现
2.1 将exfat驱动解压到内核fs/目录下
$ unzip exfat-linux-master.zip -d exfat-linux
$ mv exfat-linux linux/fs/exfat
2.2 将exfat驱动添加到linux
先看一下exfat/Kconfig
1)将exfat驱动添加进 linux/fs/Makefile
$ vi linux/fs/Makefile
添加 "obj-$(CONFIG_EXFAT_FS) += exfat/"
配置成"obj-$(CONFIG_EXFAT_FS)"还需将exfat添加到linux配置菜单。也可以直接"obj-y"配置进内核,那么可跳过步骤2)、3)。
2)将exfat添加到linux配置菜单
$ vi linux/fs/Kconfig
添加 "source "fs/exfat/Kconfig""
3)Linux内核配置exfat
$ make menuconfig
多了 File systems ---> [M]exFat filesystem support 选项,配置成M编译成模块,保存即可。
此时,exfat驱动已经配置OK,编译Linux内核。
2.3 编译结果
配置成M内核打印如下:
二、测试结果
1、加载驱动
$ insmod exfat.ko
2、查看系统支持的文件系统
$ cat /proc/filesystems
查看系统支持的文件系统,有exfat说明移植成功
$ cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev tmpfs
nodev devtmpfs
nodev configfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev pipefs
nodev rpc_pipefs
nodev devpts
ext3
ext2
ext4
vfat
msdos
exfat #添加成功
nodev nfs
nodev nfs4
ntfs
nodev jffs2
nodev autofs
fuseblk
nodev fuse
nodev fusectl
nodev ubifs
内核打印也可以看到exFAT版本号