fuse文件系统调试环境
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文件系统调试环境相关推荐
- T2080 U-BOOT与OS内核移植 准备篇(一)——开发调试环境简介
T2080 U-BOOT与OS内核移植 准备篇(一)--开发调试环境简介 1.本项目选择的工具 2.几个常用工具简介 2.1 Trace32 2.2 Code Warrior 2.3 QorIQ Li ...
- QEMU搭建arm64 Linux调试环境
https://zhuanlan.zhihu.com/p/345232459 简述 本文记录了在ubuntu20.04上,使用QEMU搭建arm64 的Linux开发调试环境.可以方便得使用gdb调试 ...
- 路由器逆向分析------路由器固件分析和动态调试环境搭建简述
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...
- 学内核之二:基于QEMU搭建Linux内核运行调试环境
目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...
- Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)
简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...
- “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境
Visual Studio Code 免费跨平台文本编辑器,插件资源丰富,我把其作为Debug的首选. 下载地址:https://code.visualstudio.com/Download 安装之后 ...
- PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
因为项目需求,需要开发PHP的项目,所以不得不花点时间开始学习PHP,过程非常要抓狂,还没有开始开发已经被一大堆复杂的环境搭建搞疯了 经过多方实验,决定将过程记录下来,也为了让很多跟我一样从零开始学习 ...
- Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
在研究mycat源码之前必须先把环境搭建好.这篇文章的目标就是搭建mycat源码调试环境.环境主要包括: git jdk maven eclipse mysql 这里假设你知道上面的知识点.我们搭建的 ...
- 基于Kubernetes1.20.1版本开发调试环境搭建
接下来的一段时间将要学习Kubernetes源码,为了更好的查看源码和调试程序,因此搭建了一个Kubernetes开发调试环境,该环境可以结合断点调试理解代码的运行过程. 准备虚拟机并安装必要软件 $ ...
最新文章
- 计算机美术与设计方案,试述电脑美术及其在现代设计教学与创作中的作用2200字...
- RabbitMQ——安装
- 防火墙(10)——禁止含有某些敏感字段发出去、限制连接数量(单ip地址)
- Acrobat DC发布一周年 激活移动时代文件处理革命
- P1306-斐波那契公约数【矩阵乘法,数论】
- MySQL作为Kubernetes服务,可从WildFly Pod访问
- 英语------------单词复数形式的规律
- 野生前端的数据结构练习(10)希尔排序,归并排序,快速排序
- python mvc_python mvc设计模式(一)
- 敏捷开发中asp.net MVC的开发次序感受(先开发View?先开发Model?先开发Controller!)...
- EDA实验课课程笔记(二)——Vim编辑器
- Excel2013每次打开都弹出配置进度窗口的分步解决办法
- UML期末大作业——《UML系统分析与设计》
- Failed to sync vcpu reg
- php使用sendemail,thinkphp如何使用sendcloud发送邮件 | 志博日记
- The annotation of C++ primer {藤原豆腐坊自家用}
- 入行数据分析要知道数据挖掘到底是做什么的
- 基于SpringBoot在线电影订票系统|影院
- 5.Linux常用配置文件(包含网络/Linux文件权限等)
- vue仿今日头条_Vue实战篇(Vue仿今日头条)