通常,首先要在FUSE中实现文件系统。这使您可以方便地在用户区中进行开发。
我正在努力在Debian上构建新文件系统作为原型,因为现有文件系统无法满足我的某些要求。它旨在成为评估我们具有某些需求的原型。
[为此,我首先想到以示例file system such as testfs from GitHub尝试对其进行编译。我正在read me中的步骤(e),但不确定如何正确编译Linux。
到目前为止已采取的步骤:
我正在尝试为项目使用provided MakeFile,但这是我得到的错误。
make -C /home/username/Workspace/testfs M=`pwd` modules
make[1]: Entering directory `/home/username/Workspace/testfs'
make[1]: *** No rule to make target `modules'. Stop.
make[1]: Leaving directory `/home/username/Workspace/testfs'
make: *** [testfs] Error 2
据我了解,它需要内核源(位于我的/usr/src
中。]
debian:testfs karun$l /usr/src/
total 74M
drwxr-xr-x 4 root root 4.0K Jan 8 18:34 linux-headers-3.2.0-4-686-pae
drwxr-xr-x 4 root root 4.0K Jan 8 18:34 linux-headers-3.2.0-4-common
lrwxrwxrwx 1 root root 23 Jun 24 2012 linux-kbuild-3.2 -> ../lib/linux-kbuild-3.2
-rw-r--r-- 1 root root 122K Sep 18 20:20 linux-patch-3.2-rt.patch.bz2
lrwxrwxrwx 1 root root 25 Jan 10 20:21 linux-source -> /usr/src/linux-source-3.2
drwxr-xr-x 22 root root 4.0K Sep 18 20:20 linux-source-3.2
-rw-r--r-- 1 root root 74M Sep 18 20:22 linux-source-3.2.tar.bz2
lrwxrwxrwx 1 root root 49 Jan 8 14:29 vboxguest-4.3.6 -> /opt/VBoxGuestAdditions-4.3.6/src/vboxguest-4.3.6
另一种尝试是尝试使用FS代码编译内核,然后“安装”它。
make menuconfig
并进入了“文件系统--->”部分问题:如何使我的模块在menuconfig
上可见,以确保使用源进行编译并进行部署?
我的最终目标是能够格式化驱动器(HDD卷或闪存驱动器)到我的自定义文件系统(我们将其称为CustFS,例如NTFS或HFS :)用于存储数据和不一定非要运行Linux OS。我已经尽力想出办法来做到这一点,但是我找不到合适的帮助。
据我了解,我需要执行以下操作
我相信保险丝不会允许我实现我想要的。我想在拇指驱动器上创建一个FS(作为测试),然后在HDD上创建FS,以便能够扩展它,使其超过每个文件夹(在其中几个)中当前存在的限制。] >
环境详细信息:
uname -r
转储)如果您还有其他疑问或需要澄清,请告诉我。为我指出一些我需要经历的教程/步骤将非常有帮助。谢谢!
旁注,我是一个程序员,大部分时间都花在Java上。我(相信)我在C / C ++方面具有良好的工作知识,并且可以根据需要在最上面建立技能。这是我第一次尝试编译内核,我不确定如何向其中添加模块。
我正在努力在Debian上构建新文件系统作为原型,因为现有文件系统无法满足我的某些要求。它应该是用来评估某些.... >>>
通常,首先要在FUSE中实现文件系统。这使您可以方便地在用户区中进行开发。
几乎可以肯定,您可以在FUSE中执行任何操作,而您不使用FUSE的主要原因是您担心性能。 ZFS和NTFS都(或曾经)在FUSE中实现。
如果走内核路线,您会发现文件系统调试起来更加困难,开发过程也更加复杂。如果您不知道用户空间和内核空间之间的真正区别是什么,请避免尝试不惜一切代价制作一个内核模块。
更新
:要清楚;您可以在FUSE中作为基于内核的文件系统执行的任何操作。使用内核模块,您永远不会直接从硬盘读取数据,而不会从块设备读取数据,块设备然后由文件系统解释并在其之上提供文件接口。在FUSE中,您执行的操作完全相同,唯一的区别是,它位于Userland中,而不是您的程序位于内核空间中。绝对没有理由从内核模块开始开发新的文件系统,FUSE足够快,容易得多,并且为测试和验证提供了更好的框架。
通常,首先要在FUSE中实现文件系统。这使您可以方便地在用户区中进行开发。