libfuse源码:GitHub - libfuse/libfuse: The reference implementation of the Linux FUSE (Filesystem in Userspace) interface

2fd46b19-8ea3-48b8-abb0-7a62b3c3f343

一、ubuntu20.04挂载fuse文件系统

1,安装编译工具

apt install ninja-build
apt install meson
apt install build-essential
apt install python3-pip
pip install pytest (编译fuse自测模块用到,可选,一般不需要)

2,下载libfuse代码

创建下载目录fuse:
root@linux:/home/gsf# mkdir fuse; cd fuse/

从github下载libfuse代码:
root@linux:/home/gsf/fuse# git clone https://github.com/libfuse/libfuse.git
Cloning into 'libfuse'...
remote: Enumerating objects: 12797, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 12797 (delta 26), reused 32 (delta 21), pack-reused 12744
Receiving objects: 100% (12797/12797), 3.57 MiB | 807.00 KiB/s, done.
Resolving deltas: 100% (9867/9867), done.

3,编译libfuse

在源码目录创建build目录,并进入build:
root@linux:/home/gsf/fuse# cd libfuse/; mkdir build; cd build/;

编译:
root@linux:/home/gsf/fuse/libfuse/build# meson ..
root@linux:/home/gsf/fuse/libfuse/build# python3 -m pytest test/ (可选,fuse自测模块,一般不需要)
root@linux:/home/gsf/fuse/libfuse/build# ninja install

4,编译fuse文件系统

将自己写的一个fuse文件系统源码放在fuse源码/libfuse/build目录中,比如从fuse源码/libfuse/example目录中拷贝hello.c(自带的一个简单fuse文件系统)只build目录,单独编译(必须要先编译libfuse,因为会用到其中的库),然后挂载:
root@linux:/home/gsf/fuse/libfuse/build# cp ../example/hello.c .
root@linux:/home/gsf/fuse/libfuse/build# gcc -Wall hello.c `pkg-config fuse3 --cflags --libs` -o hello
root@linux:/home/gsf/fuse/libfuse/build# ./hello /mnt/fusemnt/
root@linux:/home/gsf/fuse/libfuse/build#

5,挂载fuse

编译libfuse时,已经编译了libfuse source code中exampl目录自带的fuse文件系统,这些编译好的文件在libfuse/build/example/目录,比如我们用编译出来的hello执行挂载命令(这个hello就是一个简单的fuse文件系统):

创建挂载点:
root@linux:/home/gsf/fuse/libfuse/build/example# mkdir -p /mnt/fusemnt

挂载fuse文件系统:
root@linux:/home/gsf/fuse/libfuse/build/example# ./hello /mnt/fusemnt

mount命令检查fuse是否挂载成功:
root@linux:/home/gsf/fuse/libfuse/build/example# mount |grep fuse
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/fuse on /run/user/1000/doc type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/home/gsf/fuse/libfuse/build/example/hello on /mnt/fusemnt type fuse.hello (rw,nosuid,nodev,relatime,user_id=0,group_id=0)

二、搭建qemu调试fuse环境

qemu如何运行自己编译的kernel,请参考《linux调试专栏》的其他文章。这里只列出差异化的部分。

1,kenel config需要打开FUSE

kernel source执行make menuconfig:

File systems  ---><*> FUSE (Filesystem in Userspace) support

kernel编译后,qemu启动该kernel,会有/sys/fs/fuse目录。

2,静态编译fuse文件系统

默认采用shared library编译,需要将改成static library方式编译,完整的编译命令如下:

root@linux:/home/gsf/code# git clone https://github.com/libfuse/libfuse.git
root@linux:/home/gsf/code# cd libfuse/; mkdir build; cd build/
root@linux:/home/gsf/code/libfuse/build# meson ..
root@linux:/home/gsf/code/libfuse/build# meson configure --default-library static 配置静态编译
root@linux:/home/gsf/code/libfuse/build# ninja install
root@linux:/home/gsf/code/libfuse/build# cp ../example/hello.c .
root@linux:/home/gsf/code/libfuse/build# gcc -Wall hello.c `pkg-config fuse3 --cflags --libs` -static -o hello

可通过在build目录下执行meson configure # list options命令,检查是静态编译还是动态编译,如下图,Current value是动态编译:

如果用动态库方式编译,在qemu kernel中执行hello时则会出错:

# wget http://10.223.11.5/hello
Connecting to 10.223.11.5 (10.223.11.5:80)
saving to 'hello'
hello                100% |********************************| 17736  0:00:00 ETA
'hello' saved
# chmod 777 hello
# ./hello /mnt/fusemnt/
-sh: ./hello: not found
#

3,fuse文件系统拷贝到qemu kernel并挂载

可以通过多种方式在ubuntu宿主机与qemu kernel虚拟机中共享文件,这里用http方式从ubuntu中下载文件然后挂载,在qemu kernel中执行下面命令:

# wget http://10.223.11.5/hello
Connecting to 10.223.11.5 (10.223.11.5:80)
saving to 'hello'
hello                100% |********************************| 2892k  0:00:00 ETA
'hello' saved
# chmod 777 hello
# ./hello /mnt/fusemnt/
#
# mount |grep fuse
hello on /mnt/fusemnt type fuse.hello (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
#

fuse文件系统调试环境相关推荐

  1. T2080 U-BOOT与OS内核移植 准备篇(一)——开发调试环境简介

    T2080 U-BOOT与OS内核移植 准备篇(一)--开发调试环境简介 1.本项目选择的工具 2.几个常用工具简介 2.1 Trace32 2.2 Code Warrior 2.3 QorIQ Li ...

  2. QEMU搭建arm64 Linux调试环境

    https://zhuanlan.zhihu.com/p/345232459 简述 本文记录了在ubuntu20.04上,使用QEMU搭建arm64 的Linux开发调试环境.可以方便得使用gdb调试 ...

  3. 路由器逆向分析------路由器固件分析和动态调试环境搭建简述

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...

  4. 学内核之二:基于QEMU搭建Linux内核运行调试环境

    目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...

  5. Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)

    简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...

  6. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境

    Visual Studio Code 免费跨平台文本编辑器,插件资源丰富,我把其作为Debug的首选. 下载地址:https://code.visualstudio.com/Download 安装之后 ...

  7. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    因为项目需求,需要开发PHP的项目,所以不得不花点时间开始学习PHP,过程非常要抓狂,还没有开始开发已经被一大堆复杂的环境搭建搞疯了 经过多方实验,决定将过程记录下来,也为了让很多跟我一样从零开始学习 ...

  8. Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建

    在研究mycat源码之前必须先把环境搭建好.这篇文章的目标就是搭建mycat源码调试环境.环境主要包括: git jdk maven eclipse mysql 这里假设你知道上面的知识点.我们搭建的 ...

  9. 基于Kubernetes1.20.1版本开发调试环境搭建

    接下来的一段时间将要学习Kubernetes源码,为了更好的查看源码和调试程序,因此搭建了一个Kubernetes开发调试环境,该环境可以结合断点调试理解代码的运行过程. 准备虚拟机并安装必要软件 $ ...

最新文章

  1. 计算机美术与设计方案,试述电脑美术及其在现代设计教学与创作中的作用2200字...
  2. RabbitMQ——安装
  3. 防火墙(10)——禁止含有某些敏感字段发出去、限制连接数量(单ip地址)
  4. Acrobat DC发布一周年 激活移动时代文件处理革命
  5. P1306-斐波那契公约数【矩阵乘法,数论】
  6. MySQL作为Kubernetes服务,可从WildFly Pod访问
  7. 英语------------单词复数形式的规律
  8. 野生前端的数据结构练习(10)希尔排序,归并排序,快速排序
  9. python mvc_python mvc设计模式(一)
  10. 敏捷开发中asp.net MVC的开发次序感受(先开发View?先开发Model?先开发Controller!)...
  11. EDA实验课课程笔记(二)——Vim编辑器
  12. Excel2013每次打开都弹出配置进度窗口的分步解决办法
  13. UML期末大作业——《UML系统分析与设计》
  14. Failed to sync vcpu reg
  15. php使用sendemail,thinkphp如何使用sendcloud发送邮件 | 志博日记
  16. The annotation of C++ primer {藤原豆腐坊自家用}
  17. 入行数据分析要知道数据挖掘到底是做什么的
  18. 基于SpringBoot在线电影订票系统|影院
  19. 5.Linux常用配置文件(包含网络/Linux文件权限等)
  20. vue仿今日头条_Vue实战篇(Vue仿今日头条)

热门文章

  1. ECCV2020视频插帧方法
  2. 怎样将github上的代码下载到本地并运行?
  3. 熵值法与TOPSIS法以及两者结合
  4. HoloLens新版OpenXR
  5. WNM2020-3/TR MOS场效应晶体管
  6. 单片机实现PT2262解码示例代码
  7. Avazu_ctr_prediction 数据集之Avazu_x4.zip介绍
  8. 更改用户自己的FTP密码
  9. 接口测试用例编写和接口测试模板
  10. C语言程序设计习题参考答案