fuse文件系统分为应用态和内核态,应用态的代码可参见开源代码 ntfs-3g,下载的地址为:https://www.tuxera.com/community/open-source-ntfs-3g/
该文档基于内核 2.6.30 和 ntfs-3g_ntfsprogs-2017.3.23
1. 用户态总体框架
main // ntfs-3g.c
mount_fuse
try_fuse_mount
fuse_mount
fuse_kern_mount
fuse_mount_sys
fd = open(devname, O_RDWR); // 打开 const char *devname = "/dev/fuse";
strcpy(type, mo->blkdev ? "fuseblk" : "fuse"); // 挂载的格式
mount // 执行mount
fuse_loop
fuse_session_loop
fuse_chan_recv
fuse_kern_chan_receive // 从 /dev/fuse 读取数据来
fuse_session_process
fuse_ll_process // 处理 /dev/fuse读取出来的数据,头部为 struct fuse_in_header in
fuse_ll_ops[in->opcode].func(req, in->nodeid, inarg); //根据头部进行具体的操作
[FUSE_INIT] = { do_init, "INIT"