将新文件系统编译到Linux内核中

问题描述 投票:4回答:1

我正在努力在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代码编译内核,然后“安装”它。


问题:如何使我的模块在menuconfig上可见,以确保使用源进行编译并进行部署?

我的最终目标是能够格式化驱动器(HDD卷或闪存驱动器)到我的自定义文件系统(我们将其称为CustFS,例如NTFS或HFS :)用于存储数据和不一定非要运行Linux OS。我已经尽力想出办法来做到这一点,但是我找不到合适的帮助。

据我了解,我需要执行以下操作

  • 写FS代码
  • 与内核源代码一起编译
  • 部署新内核

我相信保险丝不会允许我实现我想要的。我想在拇指驱动器上创建一个FS(作为测试),然后在HDD上创建FS,以便能够扩展它,使其超过每个文件夹(在其中几个)中当前存在的限制。] >


环境详细信息:

  • 运行VirtualBox的Debian 7.3(轻声)
  • Linux内核版本3.2.0-4-686-pae(从uname -r转储)

  • 如果您还有其他疑问或需要澄清,请告诉我。为我指出一些我需要经历的教程/步骤将非常有帮助。谢谢!

旁注,我是一个程序员,大部分时间都花在Java上。我(相信)我在C / C ++方面具有良好的工作知识,并且可以根据需要在最上面建立技能。这是我第一次尝试编译内核,我不确定如何向其中添加模块。

我正在努力在Debian上构建新文件系统作为原型,因为现有文件系统无法满足我的某些要求。它应该是用来评估某些.... >>>

通常,首先要在FUSE中实现文件系统。这使您可以方便地在用户区中进行开发。

几乎可以肯定,您可以在FUSE中执行任何操作,而您不使用FUSE的主要原因是您担心性能。 ZFS和NTFS都(或曾经)在FUSE中实现。

如果走内核路线,您会发现文件系统调试起来更加困难,开发过程也更加复杂。如果您不知道用户空间和内核空间之间的真正区别是什么,请避免尝试不惜一切代价制作一个内核模块。


更新

:要清楚;您可以在FUSE中作为基于内核的文件系统执行的任何操作。使用内核模块,您永远不会直接从硬盘读取数据,而不会从块设备读取数据,块设备然后由文件系统解释并在其之上提供文件接口。在FUSE中,您执行的操作完全相同,唯一的区别是,它位于Userland中,而不是您的程序位于内核空间中。

绝对没有理由从内核模块开始开发新的文件系统,FUSE足够快,容易得多,并且为测试和验证提供了更好的框架。

linux filesystems kernel
1个回答
0
投票

通常,首先要在FUSE中实现文件系统。这使您可以方便地在用户区中进行开发。

© www.soinside.com 2019 - 2024. All rights reserved.