如何为现代PC计算机创建自己的x86操作系统

时间:2010-05-10 06:30:21

标签: assembly operating-system x86 x86-64 osdev

我想为x86 PC电脑创建一个新的操作系统。我希望它是64位,但也可能以32位运行。

我有这些问题:

你先开始做什么样的事情?在我看来,从哪里开始编写自己的操作系统似乎是一个棘手的主题,所以我对你的输入很感兴趣。

一般来说,如何制作自己的32位/ 64位操作系统,或提供有关为x86计算机编写自己的操作系统的有用信息的良好资源。只要它们对我正在做的事情仍然具有相关性和实用性,我并不关心它们有多久。

我知道我希望它拥有直接访问外围硬件的内核驱动程序。我应该在哪里寻找有关编程的建议和文档,以及理解操作系统将与之通信的外围硬件接口?我需要了解操作系统如何接收输入并与键盘,鼠标,计算机显示器,硬盘驱动器,USB等进行交互等。这可能是我最不了解的领域。

我有英特尔指令集手册,并且对程序集编程越来越熟悉,因此CPU方面的内容是我最了解的。

此时我想我想在我的操作系统中实现Linux系统调用,以便在Linux上运行的程序可以在我的操作系统上运行。我希望我的操作系统使用ELF二进制格式。我想知道为了实现这种Linux兼容性,我必须克服哪些障碍。实现Linux提供的系统调用和使用ELF格式的主要内容是什么?还有什么?

我也对人们对为什么制作自己的操作系统不是一个好主意的想法感兴趣,以及为什么制作自己的操作系统是个好主意。

感谢您的任何意见。

9 个答案:

答案 0 :(得分:21)

最好查看Linux 0.01源代码。它是操作系统的第一个版本。它非常简单,内容丰富。这是一个开始的好地方

答案 1 :(得分:13)

您可能只是想让它在虚拟机内运行才能开始。这是PITA尝试在实际硬件上开发操作系统(通过不断重启和串口线调试)。

在VM中,您通常会得到一套简化的(相对标准化的)硬件支持,这也可以简化初始开发。特别是,如果你想向别人展示你的操作系统,你只需要给他们一个.vhd文件,并且有理由相信如果它适合你,那么它也适用于他们。

您可能还想从已经启动过的东西开始。最初运行(例如,Microsoft的Singularity非常简洁)。这将让你将所有无聊的引导加载程序和基本设备驱动程序排除在外,你可以更快地获得“多肉”的东西。

答案 2 :(得分:8)

答案 3 :(得分:6)

我建议首先研究像Minix1这样的小型操作系统,它是为教育目的而构建的 或Minix3符合POSIX标准。

答案 4 :(得分:4)

您必须实现几种描述符表才能启用32位模式。启用多线程并非易事,几乎肯定是先决条件。您可能还希望尽早开发文件系统支持以获取软盘映像或您当前使用的任何内容。

我相信你过去会遇到这个网站http://wiki.osdev.org/Main_Page 但它有很多很棒的文章。

您可能还会发现本书对您所处的开发阶段非常有用: The Indispensable PC Hardware Book它非常详细,有很多图表,还有一些代码片段。

答案 5 :(得分:2)

如果你想开发自己的操作系统,最好的第一步是在osdev论坛(http://forum.osdev.org/)中游荡,并仔细阅读他们的wiki:http://wiki.osdev.org/Main_Page

我发现那里的人不仅知识渊博,而且非常有帮助,他们甚至会在你的代码片段中指出错误!

我开始使用James Molloy的x86教程(谷歌我不允许发布此链接)。你可以从他的代码开始然后破解,破解,破解: - )。

答案 6 :(得分:1)

从启动加载程序开始,了解获取内存映射,扫描PCI总线,初始化各种芯片(如APIC)以及如何切换到保护模式。

您已经开始加载内核,尝试编写将输出到屏幕的例程,从键盘读取,获取简单的调试器,然后是物理内存管理器,然后是虚拟内存管理器。后两者不能长时间推迟,因为包括操作系统在内的每个程序都需要一种有序分配和释放内存的方法。

答案 7 :(得分:1)

只是提供一种新颖的建议方法......可以将启动加载程序映像到USB或RW CD,然后指示您的计算机将其用作主要设备。我安装了Vista,我只需使用boot loader和kernel.bin文件插入USB即可测试我的玩具操作系统。请务必使用相同的设备来保存其他文件或任何其他内容,以免损坏您的硬盘。当您的操作系统具备所有基础知识时,请购买垃圾计算机,安装操作系统并从那里进行扩展。

答案 8 :(得分:1)

https://github.com/rajneshrat/ratos

这是最小的操作系统,有以下支持 - 联网, vm支持, 中断支持, Pci支持。