您的位置:首页 > 运维架构 > Linux

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

2017-01-11 15:16 1091 查看

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系统中也测试正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: