如何在 linux 上实现自定义 iNode?

How can I implement a custom iNode on linux?

因此 Linux 中的每个目录、文件、队列或任何内容都会创建自己的 inode,可以通过某种方式访问​​这些 inode。我将如何着手实现我自己的 inode 类型,它并不完全符合任何现有描述?在文件系统中可见但不是文件的自定义内容?我必须扩展内核还是有一些更简单的方法?

So every directory, file, queue or whatever in Linux creates it's own inodes that can be accessed in one way or another.

。目录、文件 。不要创建自己的 inode。它们使用属于存储它们的文件系统的 inode 进行存储。索引节点甚至不是专门为特定文件创建的——所有索引节点都是作为文件系统创建的一部分创建的,然后才存储任何文件。*

How would I go about implementing my own inode type that doesn't quite fit any of the existing descriptions?

不清楚您为什么认为需要自定义 inode 类型,但如果您这样做,那么您需要一个完整的自定义文件系统。您将需要编写内核驱动程序或实现它的 FUSE 驱动程序,以及使用该 FS 格式化设备、安装和卸载它、检查它的错误、 的所有必需实用程序。 =13=]

A custom something that is visible in the file system but isn't a file? Do I have to extend the kernel or is there some simpler approach?

一切 都是一个文件。这是 UNIX 的原则之一。但也许您指的不是 常规 文件。不幸的是,即使是自定义文件系统和 inode 也不足以为您提供自定义文件类型。文件系统条目的分区常规文件、目录、字符和块特殊文件,。在内核和标准文件管理 API 和实用程序中根深蒂固。您不仅需要扩展内核(除了编写文件系统驱动程序之外),还需要修改 C 标准库、几个标准实用程序,可能还有一堆受这些更改影响的其他库和实用程序。最后,你基本上拥有了自己的整个操作系统。

但也许你的前提是错误的。很长一段时间以来,UNIX 一直很好地使用其当前的文件模型。不清楚您为什么想要您所说的,但至少有两个更简单的选项可能适合您:

  • 为具有文件系统接口的字符或块设备编写内核驱动程序,利用系统现有的设施将一个或多个设备实例作为字符或块link写入文件系统特殊文件。

  • 在常规文件/目录/etc.

    中嵌入您想做的事情

*差不多。我忽略了在某些情况下可能能够扩展文件系统并在此过程中向其添加 inode 的特殊管理操作。