构建我的asm x86操作系统,从哪里开始

时间:2018-08-18 16:48:29

标签: assembly x86 operating-system

我了解MIPS汇编语言,并且我正在研究x86汇编语言(我使用masm),最近我读了有关Mikeos的文章,尤其是关于此的文章: http://mikeos.sourceforge.net/write-your-own-os.html 我有一些问题:

1)Windows上是否有任何IDE可以帮助我编译和执行此底层代码?如果该想法不存在,我该如何调试?

2)在引导程序部分中,有了这些教程,如果我需要访问文件怎么办?例如。我想在引导程序中创建一个简单的文本编辑器,如何访问硬盘上的文件?

3)这是引导程序,对吗?假设我在这里实现了一些功能并创建了一个不错的引导程序,下一步是什么?

也要感谢我在哪里可以找到其他资料?

1 个答案:

答案 0 :(得分:2)

学习Linux。使用它(并且可能以某种方式进行研究,例如ALP ...),因为它对开发人员友好。不要在自己的引导加载程序上花费数月的时间,而要使用现有的引导加载程序(例如GRUB)。

请参阅OSDEV Wiki(恕我直言,最好https://stackoverflow.com/a/51944435/841108than是您的MikeOS链接)并绝对阅读Operating Systems: Three Easy Pieces。花费几周的时间来阅读和学习内容(甚至在 甚至编码之前)。

  

Windows上是否有任何IDE可以帮助我编译和执行此低级代码?

您应该更喜欢使用Linux,并且您当然不需要IDE,但是不错的source code editor(您应该不要使用IDE,因为它会隐藏您需要的详细信息理解;您需要使用命令并了解每个命令的功能)。我的偏好是emacs,但是您可能会使用其他编辑器(例如vimgedit等)。

您将使用C编译器(以某种方式作为交叉编译器;您可能希望选择类似于现有ABI的调用约定,因此请研究them)。我的推荐是GCC(还有Clang)。您需要详细了解如何invoke gcc。您当然希望所有警告(因此-Wall -Wextra)。您可能需要DWARF格式with -g和一些optimizations标志(例如-O1-O2)的调试信息。您将要使用某些build automation工具(例如ninjamake,...)和某些version control系统(选择git并发布代码)像free softwaregithub之类的东西;请迅速进行操作以获得反馈)。

您将使用链接器(您可以阅读Levine的Linkers and Loaders书)。因此,binutils及其ld(当然,您会有一些汇编代码)。您需要了解linker scripts以及有关ELF格式的详细信息。

  

如果这个想法不存在,我该如何调试呢?

非常痛苦。也许您将使用一些仿真器或虚拟机,然后执行remote debugging with gdb(这并不简单;因此一开始您不会有这么奢侈的感觉)。实际上,您首先要对一些屏幕输出进行编码(也许是您自己的console_printf,而不使用<stdio.h>)并使用它。

  

如果我需要访问文件怎么办?

您真的很困惑(无需编写或借用大量代码,就无法访​​问任何文件)。一个操作系统(甚至是您的玩具操作系统)正在执行 file systems,没有它就没有。因此,您的操作系统将(稍后)提供一些文件抽象(针对能够运行的任何软件)。您一开始将无法访问任何文件(但GRUB可以访问,但只能在引导加载时访问),甚至从原始磁盘(或某个分区)读取块也很困难(SATA,{{ 3}},DMA等)。顺便说一句,您可以设计不带文件的操作系统,而可以通过其他方式拥有interrupts。而且,如果您要查找文件,则需要实现文件系统。

请注意,操作系统很复杂,因为它必须在硬件上方实现所有功能(包括屏幕显示,磁盘访问,键盘处理,鼠标操作,进程及其调度,内存管理和虚拟内存)。而且PC硬件(USB,SATA,以太网等)比25年前要复杂得多。

  

下一步是什么?

考虑操作系统设计(persistencescheduler,持久性,multitaskingprocess isolation)。所以多读书。调查现有项目(system callsPliantHURDNewOSHaiku-无效但有趣的是... ...),您将无法实现许多功能,因此请逐步进行。您可能首先希望能够在屏幕上显示一些文本(研究其他现有的自由软件OS的运行方式!)。如果您从自由软件项目中获取一些代码,请确保遵守其许可证。

开心并耐心等待。也许和一个好朋友一起工作是值得的(因为即使是一个很小的操作系统,对于一个人来说也是一个巨大的项目)。 Tunes的答案与您的动机有关。