gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:45:01 25 4
gpt4 key购买 nike

我正致力于在 Debian 上构建一个新的文件系统作为原型(prototype),因为现有的文件系统不满足我的某些要求。它旨在成为评估我们的某些要求的原型(prototype)。

为此,我首先想到了举个例子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 操作系统。我已尽最大努力提出执行此操作的步骤,但找不到合适的帮助。

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

  • 编写FS代码
  • 用内核源码编译
  • 部署新内核

我相信,FUSE 不会让我实现我想要的。我想在拇指驱动器上创建一个 FS(作为测试),然后在 HDD 上创建一个 FS,以便能够扩展它以超越它目前在每个文件夹的文件数方面的限制(其中一个)。


环境详情:

  • 运行 VirtualBox 的 Debian 7.3(喘不过气来)
  • Linux 内核版本 3.2.0-4-686-pae(从 uname -r 转储)

如果您有任何其他问题或需要澄清,请告诉我。向我指出我需要完成的一些教程/步骤真的很有帮助。谢谢!

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

最佳答案

通常,人们会从在 FUSE 中实现一个文件系统开始。这使您可以方便地在更易于使用的用户空间中进行开发。

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

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


更新:明确;作为基于内核的文件系统,您可以在 FUSE 中做任何事情。使用内核模块,您永远不会直接从硬盘读取,而是从 block 设备读取,然后您的文件系统对其进行解释并在其上提供文件接口(interface)。在 FUSE 中,您做完全相同的事情,唯一的区别是您的程序不是在内核空间中,而是在用户空间中。

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

关于linux - 将新的文件系统编译到 Linux 内核中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com