嵌入式 linux 基于fuse 的 exfat 文件系统实现

2019-07-12 23:11发布

1、下载源代码

https://github.com/relan/exfat 下载:exfat-master.zip
https://github.com/libfuse/libfuse/ 下载 fuse-2.9.3.tar.gz

2、编译

交叉编译fuse
tar zxf fuse-2.9.3.tar.gz
cd fuse-2.9.3/
mkdir install
(交互编译的平台为 海思 hi3516 芯片,交叉编译链为arm-hisiv300-linux )
./configure –host=arm-hisiv300-linux –prefix=/ternence/01_debug/46_exfat/hisi/fuse-2.9.3/install/
make
make install
在install 目录下面可以看到:
ls install
bin include lib share 交叉编译 exfat
unzip exfat-master.zip
cd exfat-master/
mkdir install
autoreconf –install
./configure –prefix=/ternence/01_debug/46_exfat/hisi/exfat-master/install –host=arm-hisiv300-linux CPPFLAGS=-I/ternence/01_debug/46_exfat/hisi/fuse-2.9.3/install/include LDFLAGS=-L/ternence/01_debug/46_exfat/hisi/fuse-2.9.3/install/lib
make
make install
编译成功后:
ls install/sbin/
dumpexfat exfatfsck exfatlabel fsck.exfat mkexfatfs mkfs.exfat mount.exfat mount.exfat-fuse

3、安装

1、把fuse的库文件放到文件系统的lib目录下
2、把exfat 的执行文件 mount.exfat-fuse 放到开发板的bin文件夹下
执行:./mount.exfat-fuse /dev/mmcblk0p1 /mnt/SDCard/
结果:FUSE exfat 1.2.5
ERROR: invalid VBR checksum 0x0 (expected 0x4601ae68). 以上方法在ubuntu系统中测试是没有问题的,但是交叉编译后却无法正常运行。

方法2:

通过 exfat-nofuse 模块来实现

源码下载: https://github.com/dorimanx/exfat-nofuse
git clone https://github.com/rxrz/exfat-nofuse.git
cd exfat-nofuse/
修改makefile:
先把嵌入式平台的内核先编译一遍
#KDIR := /lib/modules/$(shell uname -r)/build
#MDIR := /lib/modules/$(shell uname -r)
KDIR := /ternence/hi3516a/Hi3516A_SDK_V1.0.5.0/osdrv/opensource/kernel/linux-3.4.y
MDIR := /ternence/hi3516a/Hi3516A_SDK_V1.0.5.0/osdrv/opensource/kernel/ 修改目标all
在编译命令后面添加 ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-
$(MAKE) -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-
编译
make
编译成功
会生成内核模块/ternence/01_debug/46_exfat/exfat-nofuse/exfat-nofuse/exfat.ko
insmod exfat.ko 到嵌入式linux平台 挂载usb磁盘
mount -t exfat $dev $dir 上面方法在ubuntu中测试没有问题,在hi3516a系统中也测试正常。