607

我一直想做的一件事是开发自己的操作系统(不一定像 Linux 或 Windows 那样花哨,但比我已经做过的简单引导加载程序更好)。

我很难找到资源/指南来帮助您完成编写简单的“Hello World”操作系统。

我知道很多人可能会建议我看一下 Linux 或 BSD;但是像这样的系统的代码库(大概)太大了,我不知道从哪里开始。

有什么建议么?

更新:为了让通过谷歌登陆这篇文章的人更容易,这里有一些操作系统开发资源:

其他资源:

我找到了一个名为MikeOS的好资源,“MikeOS 是一个学习工具,用于演示简单操作系统的工作原理。它使用 16 位实模式进行 BIOS 访问,因此不需要复杂的驱动程序”

2008 年 11 月 14 日更新

我在Freebyte's Guide to...Free and non-free Operating Systems中找到了一些资源,这些资源链接到诸如 OSKit 和 ExOS 库之类的工具包。这些似乎对开始操作系统开发非常有用。

2009 年 2 月 23 日更新

Ric Tokyo在这个问题中推荐了 nanoos。Nanoos 是一个用 C++ 编写的操作系统。

2009 年 3 月 9 日更新

Dinah 为有抱负的 OS 开发人员提供了一些有用的 Stack Overflow 讨论:创建自定义操作系统的路障讨论了您在开发 OS 时可能遇到的陷阱,而OS 开发是一个更普遍的讨论。

2009 年 7 月 9 日更新

LB 提供了Pintos Project的链接,这是一个为学生学习操作系统开发而设计的教育操作系统。

2009 年 7 月 27 日更新(依然强劲!)

我偶然发现了来自伯克利的一门在线操作系统课程,其中有 23 节课。

TomOSMikeOS的一个分支,其中包括一个小内存管理器和鼠标支持。作为 MikeOS,它被设计成一个教育项目。它是用 NASM 汇编程序编写的。

2009 年 8 月 4 日更新

我发现幻灯片和其他材料与上面列出的在线伯克利讲座一起使用。

2009 年 8 月 23 日更新

stackoverflow 上所有标记为 osdev 的问题

OS/161是一个用 c 语言编写的、在模拟硬件上运行的学术操作系统。这个操作系统在 Nachos 中是类似的。谢谢小说家!

tangurena 推荐http://en.wikipedia.org/wiki/MicroC/OS-II,一个为嵌入式系统设计的操作系统。还有一本配套书

Anders 建议 Robert Love 的Linux Kernel Development 。这是“广受好评的内部人士对 Linux 内核的看法”。

2009 年 9 月 18 日更新

感谢 Tim S. Van Haren 向我们介绍了Cosmos,这是一个完全用 c# 编写的操作系统。

tgiphil 向我们介绍了托管操作系统联盟 (MOSA) 框架,“一套工具、规范和源代码,用于促进基于通用中间语言的托管操作系统的开发。”

2009 年 9 月 24 日更新

Steve 找到了一些使用 Visual Studio 在 Windows 上进行开发的资源,请查看BrokenThorn 的 VS 2005 指南设置OSDev 的 VS 部分

2012 年 9 月 5 日更新

kerneltrap.org 不再可用。linux 内核 v0.01 可从kernel.org获得

更新于 2012年 12 月 21 日 一个基本的操作系统开发教程,设计为一个学期的项目。它指导您构建具有基本组件的操作系统。对初学者来说非常好的开始。相关论文。谢谢斯鲁扬!

2013 年 11 月 15 日更新

从零开始编写一个简单的操作系统。谢谢詹姆斯摩尔!

2013 年 12 月 8 日更新

如何制作电脑操作系统 谢谢ddtoni!

2014 年 3 月 18 日更新

ToAruOS 一个主要从头开始构建的操作系统,包括 GUI

2016 年 9 月 12 日更新

编写自己的玩具操作系统

2016 年 12 月 10 日更新

编写一个简单的操作系统——从零开始(谢谢@Tyler C)

4

28 回答 28

97

在简要概述了为 X86 平台编写操作系统所涉及的内容之后,有很多链接。

似乎最有希望的链接 (www.nondot.org/sabre/os/articles) 不再可用,因此您需要浏览Archive.org 版本才能阅读它。

在一天结束时,引导加载程序获取内核的机器代码,将其放入内存,然后跳转到它。您可以将任何机器代码放入您想要的内核中,但大多数 C 程序都需要一个操作系统,因此您需要告诉您的编译器它不会拥有所有这些,或者引导加载程序必须创建其中的一些。

然后内核完成所有繁重的工作,我怀疑它是您想要的示例内核。但是从拥有一个说“Hello world”的内核到拥有一个加载命令解释器、提供磁盘服务以及加载和管理程序的内核之间还有很长的路要走。

您可能想考虑订阅 ACM 以访问他们的旧文献 - 在 80 年代末和 90 年代初的早期计算杂志中有很多关于如何创建替代操作系统的文章。这个时代也有可能已经绝版的书籍。您可以通过查找这些杂志的索引(可在该网站上找到 - 单击杂志名称附近的“索引”)然后向周围的人询问一份副本,从而免费获得相同的信息。

最后,我知道 usenet 已经死了(因为互联网末日的预言家这么说),但你会发现那个时代的许多崎岖不平的老专家仍然生活在那里。您应该搜索 google 群组(他们有 dejanews 的旧存储库),我希望您会发现很多人在十年或 1.5 年前提出与您现在所问的相同的问题。当 Linus Torvalds 最初开发 linux 时,您甚至可能会遇到许多寻求帮助的问题。如果搜索没有带来任何东西,请在相应的新闻组中询问(可能以 comp.arch 开头,但搜索名称中带有 OS 的新闻组)。

于 2008-09-05T12:38:38.060 回答
36

Minix要小得多,专为学习目的而设计,与之配套的书也很不错。

更新:我猜 Minix 3 的目标有点不同,但Minix 2(当然还有第一个版本)是出于教学目的。

于 2008-09-04T04:30:31.923 回答
34

作为一个从头开始编写实时多任务操作系统的人......

键盘去抖动例程、键盘驱动程序、磁盘驱动程序、视频驱动程序、文件系统,最后是引导加载程序——这只是第一次启动它,无事可做!

...我不能足够强调熟悉硬件的重要性!如果您真的想自己做这一切,而不是仅仅拿起别人已经为您设计的原始系统,则尤其如此。例如,联系 Intel 并要求他们为您的 CPU 类型提供 CPU 卡!这将为您布置 - “引脚输出”、中断、操作码,应有尽有!

请记住,硬件使这一切成为可能。研究硬件。你不会后悔的。

.

于 2008-10-20T05:09:44.110 回答
19

编写微控制器操作系统。我推荐一个基于 x86 的微控制器。现代操作系统非常庞大。首先学习基础知识。

于 2008-10-20T05:47:42.723 回答
17

我希望有一个地方可以获取有关开发自己的操作系统的所有信息。最接近这一点的是OS Dev WikiForums。它们提供了大量关于设置、开发和设备硬件信息的好信息。

BoneFide也有一些很棒的教程,我使用了Bran的入门教程,现在正在查看基于他的名为Roll your own toy toy UNIX-clone OS 的更新教程。

我第二次检查:“操作系统:设计和实现”

如果您想在 Windows 上进行开发,请查看 jolson 的博客文章

编辑:对于使用 Visual Studio 在 Windows 上进行开发,请查看BrokenThorn 的指南OSDev 的 wiki

于 2008-09-23T17:29:38.167 回答
17

一个极好的资源是 MIT 课程 6.828:操作系统工程的材料。

XV6 - 用 ANSI C 为 x86 编写的简单的类 Unix 教学操作系统 http://pdos.csail.mit.edu/6.828/2012/xv6.html

XV6 源 - 作为带有行号的印刷小册子 http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6 书 - 解释 os 设计的主要思想 http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

材料紧凑:92 页源和 96 页评论。

我比 Minix 书更喜欢它!这是一个真正的宝石!

于 2014-01-07T01:50:34.370 回答
12

您可能还想看看SharpOS,这是他们用 c# 编写的操作系统。

于 2008-09-04T06:20:56.200 回答
10

书籍中有很好的操作系统基础资源。由于没有太多要求从头开始创建新操作系统,因此您不会在互联网上找到大量的爱好者类型信息。

我推荐标准教科书,Tanenbaum 的“现代操作系统”。您还可以找到 Calingaert 的“操作系统元素”很有用 - 这是一本书的简要概述,从设计师的角度粗略地描绘了操作系统是什么。

如果您对实时系统感兴趣(并且您至少应该了解实时操作系统的差异和原因),那么我还推荐 Labrosse 的“MicroC/OS-II”。

编辑:

您能否具体说明“更具技术性”的含义?这些书提供了伪代码实现细节,但您是在寻找示例操作系统,还是特定机器/语言的代码片段?

-亚当

于 2008-09-04T04:33:04.320 回答
8

刚刚来自另一个问题。我想提一下Pintos ......我记得我的操作系统课程与 Nachos 和 Pintos 似乎是可以在 x86 上运行的同一类东西。

于 2009-07-08T12:52:35.673 回答
8

我发现 Robert Love 的 Linux Kernel Development 非常有趣。它以非常实际的方式告诉您 Linux 内核中的不同子系统是如何工作的。由于源代码可用,Linux 是黑客攻击的主要候选者。

于 2009-08-22T14:31:59.860 回答
7

以下是其他一些值得纳入本次讨论的 Stack Overflow 页面:

创建自定义操作系统
的障碍 为 x86 架构开发操作系统

于 2009-03-09T18:07:13.140 回答
7

我在本科的操作系统课程让我们为OS/161构建了许多子系统,这是一个简单的、类似 BSD 的内核,它提供了一些基础知识,同时让我们可以自由地探索各种设计空间决策以实现更高级别的服务。

于 2009-08-22T13:44:11.133 回答
7

开始破解 Minix。它比 Linux 小很多(显然),并且在设计时考虑到了教学目的(至少在某些方面)。不过不是 Minix 3,那是完全不同的故事。

于 2009-09-25T00:26:32.513 回答
5

已经回答了,但是当我在大学学习操作系统时,我们从早期的 linux 内核开始,并添加了简单的现代特性(基本文件系统、虚拟内存、多任务处理、互斥锁)。好开心。您可以跳过一些真正疯狂的低级程序集,仅用于处理带保护模式和页表的东西,同时仍然学到了一些胆量。

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2

于 2008-09-05T13:35:48.063 回答
5

我想包括这个 repo How-to-Make-a-Computer-Operating-System by Samy Pesse。正在进行中。很有意思。

于 2013-12-07T16:06:57.170 回答
4

您可能想查看linuxfromscratch

Linux From Scratch (LFS) 是一个项目,它为您提供构建您自己的自定义 Linux 系统的分步说明,完全来自源代码。

于 2008-09-04T06:25:45.190 回答
4

一个简单而基本的操作系统开发教程,设计为一个学期的项目。它指导您构建具有基本组件的操作系统。对初学者来说非常好的开始。相关论文在这里

于 2012-12-21T03:53:27.787 回答
3

µC/OS 是一种相当简单的操作系统来研究。这本书有一张软盘,上面有出处。

http://en.wikipedia.org/wiki/MicroC/OS-II

于 2009-08-22T14:20:15.947 回答
3

查看www.mosa-project.org上的托管操作系统联盟 (MOSA) 项目。他们正在用 C# 设计 AOT/JIT 编译器和完全托管的操作系统。一些开发人员来自非活动的 SharpOS 项目。

于 2009-09-18T04:18:59.317 回答
3

我玩过Cosmos,它是“一个完全用 CIL 兼容语言实现的操作系统项目”。它是用 C# 编写的,所以这很合我的胃口。对于像我这样从未尝试过构建操作系统的人来说,能够立即运行“Hello World”操作系统实际上非常酷。

于 2009-09-18T04:26:47.113 回答
3

看看这个网站:http ://osix.net/modules/article/?id=359

于 2011-07-28T01:08:11.260 回答
3

如上所述,OSDev Wiki是(迄今为止)操作系统开发的最佳来源。对于讲德语的人来说,lowlevel.eu Wiki 也很棒。一些相对不为人知的Incitus OS,一个带有少量用户空间应用程序的简单内核。它非常适合用于进入操作系统开发的复杂主题。

于 2014-02-06T16:22:32.390 回答
2

Movitz是一个 Lisp 环境,用 Common Lisp 编写并“在金属上”运行。不幸的是,Movitz 主页上的一些链接拒绝访问,但您可以从trac 页面找到有关如何下载和编译源代码的说明。此外,可以在此页面的存档中找到现成的图像。

恕我直言,这非常有趣,因为它在当前可用的硬件上带回了Lisp 机器概念。它在商业上失败了,但这并不能向我证明这个想法是坏的。

The Unix haters handbook是一本有趣的书,它半认真地抨击了 Unix 及其衍生产品的概念。许多章节都在争论 Lisp 机器的概念有多好。

于 2011-07-28T09:39:04.490 回答
2

这是一篇名为“从零开始编写一个简单的操作系统”的论文。它涵盖了编写引导加载程序、进入 x86-32 保护模式以及用 C 编写基本内核。它似乎在详细解释所有内容方面做得很好。

于 2013-05-17T12:29:48.340 回答
2

x86 JS 模拟器ARM 模拟器对于了解不同硬件的工作原理以及在不退出您喜欢的浏览器的情况下进行测试也非常有用。

于 2014-06-27T15:03:43.813 回答
1

程序员的有趣问题。看到构建像 Windows 或 Mac 这样的操作系统需要很长时间,但如果你想构建一个简单的操作系统,那么你可以尽力而为

  1. 您需要专注于汇编语言、C 和 C++。您应该精通这些语言。
  2. 首先阅读一本关于操作系统如何工作的好书[Google it],然后阅读来自Wiki OS的所有信息
  3. 在 youtube 中搜索“如何用汇编语言创建自己的操作系统”观看视频,例如。视频
  4. 下载Linux OS源代码并自行编译并尝试自己修改代码
  5. 现在您是一位经验丰富的操作系统编辑器现在下载MinixQNX并开始使用它们进行开发并从这里获取他们的文档Minix DocQNX Doc

现在你已经获得了创建操作系统的硕士学位(不完全只是多一点)现在将这些知识分发给你的朋友,并在他们的帮助下尝试创建一个像 Mac、Linux 或 Windows 一样强大的操作系统

于 2013-02-05T12:24:34.100 回答
1

当您制作了一个基本的操作系统时,实际上很难继续,因为制作 GUI 或移植库的资源并不多。但我认为看看ToAruOS会有很大帮助!

该操作系统表面下的代码非常简单!但与此同时,他移植了诸如 cairo、python、(尚未但很快)sdl、共享内存之类的东西,他还制作了自己的小部件工具包。都是用 C 写的。

另一个有趣的操作系统是pedigreeOS。它由 JamesM(jamesM 内核教程背后的人)制作。虽然它比 ToaruOS 具有更多功能,但它也更大更令人困惑。

但无论如何,这 2 个操作系统会对您有很大帮助,尤其是 ToAruOS。

于 2014-03-15T13:39:12.547 回答
1

当我开始研究我的基本操作系统时,我需要一个基本指南,比如基本操作系统的垫脚石。它帮助我不松懈。

如果你想从零开始(纯汇编代码)

于 2014-07-16T18:18:49.953 回答