我了解MIPS汇编语言,并且我正在研究x86汇编语言(我使用masm),最近我读了有关Mikeos的文章,尤其是关于此的文章: http://mikeos.sourceforge.net/write-your-own-os.html 我有一些问题:
1)Windows上是否有任何IDE可以帮助我编译和执行此底层代码?如果该想法不存在,我该如何调试?
2)在引导程序部分中,有了这些教程,如果我需要访问文件怎么办?例如。我想在引导程序中创建一个简单的文本编辑器,如何访问硬盘上的文件?
3)这是引导程序,对吗?假设我在这里实现了一些功能并创建了一个不错的引导程序,下一步是什么?
也要感谢我在哪里可以找到其他资料?
答案 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,但是您可能会使用其他编辑器(例如vim,gedit等)。
您将使用C编译器(以某种方式作为交叉编译器;您可能希望选择类似于现有ABI的调用约定,因此请研究them)。我的推荐是GCC(还有Clang)。您需要详细了解如何invoke gcc
。您当然希望所有警告(因此-Wall -Wextra
)。您可能需要DWARF格式with -g
和一些optimizations标志(例如-O1
或-O2
)的调试信息。您将要使用某些build automation工具(例如ninja,make,...)和某些version control系统(选择git
并发布代码)像free software,github之类的东西;请迅速进行操作以获得反馈)。
您将使用链接器(您可以阅读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年前要复杂得多。
下一步是什么?
考虑操作系统设计(persistence和scheduler,持久性,multitasking,process isolation)。所以多读书。调查现有项目(system calls,Pliant,HURD,NewOS,Haiku-无效但有趣的是... ...),您将无法实现许多功能,因此请逐步进行。您可能首先希望能够在屏幕上显示一些文本(研究其他现有的自由软件OS的运行方式!)。如果您从自由软件项目中获取一些代码,请确保遵守其许可证。
开心并耐心等待。也许和一个好朋友一起工作是值得的(因为即使是一个很小的操作系统,对于一个人来说也是一个巨大的项目)。 Tunes的答案与您的动机有关。