【问题标题】:Custom Kernel: Implement filesystem自定义内核:实现文件系统
【发布时间】:2013-02-04 16:01:15
【问题描述】:

作为一个课程外的项目,我目前正在开发一个内核,以试图更好地理解实际操作系统的所有方面。到目前为止,我已经完成了一个平面物理内存模型的设置,它支持分页和基本中断(接下来可能是键盘和触控板/鼠标)。我认为向前迈出的一步是实现一个文件系统,我对 ext2 很感兴趣。我环顾四周,即使在 SO 上,但没有任何明确的答案可以回答我的问题:

  1. 是否可以编写驱动程序来访问 C 中的 ext2 文件系统,还是我需要降低?
  2. 如果我打算从 USB 设备访问文件系统,我假设我需要首先运行 USB 设备驱动程序。对此的任何帮助将不胜感激。
  3. 我知道用于检测文件系统的代码已经在 MINIX 和其他内核上可用,但我真正想知道的是,如果我想构建一个自定义但简单的文件系统,我该怎么做?我也在考虑这种可能性。

如果问题和细节听起来有点无知,我深表歉意,但我仍在学习过程中。

谢谢:)

【问题讨论】:

  • 所有这一切都在你可以在答案框中输入的几百个字符中......仅在 Linux 内核中的 ext2 驱动程序就超过了 8000 行代码......
  • 你写,你开发内核?您创建一个完整的操作系统还是只创建一个内核?
  • 我不太明白你在说什么,twalberg。我理解它的复杂性,这就是为什么我什至要求编写和检测更简单的文件系统的指南。 Albertus,现在我试图不区分操作系统和内核。我可以肯定地说,“用户空间”一无所有。我不是在寻找明确的代码,而是在寻找整个过程的抽象启动。
  • 我的意思是,您对这种论坛提出了很多要求。但是为了更准确地回答您的问题 - 1)是的 - 请参阅 Linux 内核的实现,它是用 C 语言编写的,2)是的 - 再次,Linux(或任何其他开源操作系统内核)有 USB 驱动程序,但这比@987654322 还要大@,以及 3) 查看其他实现以了解它是如何完成的。
  • ^非常感谢。我最初的想法是从头开始构建所有东西,到目前为止,我已经管理了自定义系统调用,以适应打印到屏幕和扫描的调整。我希望得到我自己的 open()、close()、read() 和 write() 变体,但考虑到我的时间框架,这似乎有点过头了。

标签: c operating-system filesystems kernel ext2


【解决方案1】:

我会尝试给你一些提示/提示 - 一个明确的答案并不是那么简单:

  1. 用 C 编写的 ext2 文件系统只是 C。C 只是一种编程语言 - 您可以使用 C++、纯汇编或其他一些语言(少数操作系统使用 D) - 但不是“托管”语言语言等。但重要的是你对这种语言有扎实的理解。在我看来,程序集是必须的(看看操作系统中的调度程序 -> 普通程序集)

  2. 您真的要编写 USB 驱动程序吗?它“不仅仅是”一个简单的 USB 驱动程序(抽象层)。为什么是 USB 驱动程序而不是软盘或 CD 驱动程序(相信我 - 32 位保护模式下的软盘驱动程序并不难)?

  3. 请专注于您的项目。当然 Linux(早期版本)和 Minix 有示例代码,但要注意设计结构(Monolithic/Microkernel 或混合内核)——不要混合使用,编写自己的代码。

请一个接一个。您编写了一个基本的 IRQ 处理程序,并且计划编写键盘/鼠标驱动程序 - 编写键盘驱动程序!不要梦想加载和执行文件(Rom 不是一天建成的)。

您必须阅读文档,例如英特尔手册或其他“书籍”。一个非常受欢迎的论坛是 osdev.org - 看看 wiki。正如 twalberg 所说,这是一个非常庞大的模块 - 专注于操作系统的主要部分。

我知道,这不是您问题的答案 - 但重要的是不要走错方向并梦想一个花哨的 UI 或类似的东西;)

osdev.org forum
osdev.org wiki
Intel manuals

您还可以在我的书架上找到其他几本书(Tanenbaum,Silberschatz 和 Peter Galvin - 好书!):

Books

【讨论】:

  • 感谢您的回复!对于 2:USB 突然出现在我的脑海中。我还在考虑在 USB 上模拟软盘并为其编写适当的驱动程序或者您是否建议承担一个稍微不那么艰巨的任务,例如进程通信?
  • 我写了一个软盘驱动,但回头看我会拿“El torito”。您可以模拟软盘或将其用作带有 GRUB 的普通 CD:wiki.osdev.org/Bootable_El-Torito_CD_with_GRUB_Legacy 使用 GRUB 和多引导头文件,您可以加载模块 - 看看它(也许加载一些部分)
  • 请告诉我我是否在正确的轨道上。目前,我在 Grub 的帮助下从 pendrive 启动我的内核二进制文件。如果我想接近实现文件系统,我的第一步将是处理诸如 open 等的系统调用,然后我什至可以开始检测它?另一方面,如果我可以管理自定义实现,我可以得到一个摇摇欲坠的文件系统?
  • 在我看来 - GRUB 是正确的方法。除非您对引导过程和组装(第一和第二阶段)有非常深入的了解,否则不要编写自己的引导加载程序。查看 GRUB 文档。 AFAIK GRUB 可以将 ramdisk 加载为 multibootheader-module - 然后您可以从内存中读取(和写入),而不必处理整个设备驱动程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2015-05-05
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
相关资源
最近更新 更多