FUSE介绍:
用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。一些文件系统如ZFS,glusterfs和lustre使用FUSE实现。
Linux用于支持用户空间文件系统的内核模块名叫FUSE,FUSE一词有时特指Linux下的用户空间文件系统。
在我个人看来,fuse就是一层虚构的中间层,承接上层指令,扩充下层操作,达到所谓的"欺骗"行为。主要用途在于一些比较苛刻的地方,比如必须以某种形式返回给上层命令指定的值,才能继续正常交互。我本次主要解决的是一个文件名后缀的问题,如果直接返回,会没有后缀,导致程序无法继续正常进行;所以我在这个中间模拟一层上层指令的响应,使后缀名能够正常返回给上层。That's all。
1.下载fuse-2.9.0:
Download (HTTP): http://downloads.sourceforge.net/fuse/fuse-2.9.0.tar.gz
2.在虚拟机里面编译库:3.在板子上加入动态库的支持:
// 把虚拟机里面的库拷贝到PC上:
cp fuse-2.9.0-release/lib/libfuse.so.2.9.0 /mnt/hgfs/bcm/distrib/
// 把PC上的库拷贝到板子上:
cp libfuse.so.2.9.0 /usr/local/lib/
cd /usr/local/lib/
ln -sf libfuse.so.2.9.0 libfuse.so.2
4.在编译程序时,要加入:
CFLAGS += -I/***/fuse-2.9.0-release/include/
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
(其中 *** 代表你编译fuse之后库所存放的目录绝对路径)。
5.如果程序编译出错:
fuse_common.h:33:2: error: #error Please add -D_FILE_OFFSET_BITS=64 to your compile flags!
解决方案一:
在你的程序Makefile编译选项里面加入:
-Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64
比如我的: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
修改成: $(CC) -Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64 -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
解决方案二:
makefile中加入红色字体部分:
CFLAGS += -I/***/fuse-2.9.0-release/include/ -D_FILE_OFFSET_BITS=64 -D_REENTRANT
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
编译时直接: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)即可。