关于内核:操作系统开发入门有哪些资源?

What are some resources for getting started in operating system development?

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

我很难找到资源/指南,让你过去编写一个简单的"Hello World"操作系统。

我知道很多人可能会建议我看看Linux或BSD;但是像这样的系统的代码库(大概)是如此之大,以至于我不知道从哪里开始。

有什么建议?

更新:为了让通过Google登陆此帖子的人们更容易,这里有一些操作系统开发资源:

  • 编写自己的操作系统(感谢Adam)

  • Linux From Scratch(感谢John)

  • SharpOS(C#操作系统)(谢谢lomaxx)

  • Minix3和Minix2(谢谢迈克)

  • OS Dev Wiki和论坛(感谢Steve)

  • BonaFide(谢谢史蒂夫)

  • 布兰(谢谢史蒂夫)

  • 滚动你自己的玩具UNIX克隆操作系统(谢谢史蒂夫)

  • Broken Thorn OS开发系列

其他资源:

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

版权所有11/14/08

我在Freebyte的指南中找到了一些资源...免费和非免费的操作系统链接到OSKit和ExOS库等工具包。这些在开始OS开发时似乎非常有用。

2009年2月23日更新

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

更新于3/9/09

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

2009年7月9日更新

LB提供了Pintos项目的链接,Pintos项目是为学生学习OS开发而设计的教育操作系统。

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

我偶然发现了伯克利的在线操作系统课程,有23个讲座。

TomOS是MikeOS的一个分支,包括一些内存管理器和鼠标支持。作为MikeOS,它旨在成为一个教育项目。它是用NASM汇编程序编写的。

2009年8月4日更新

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

2009年8月23日更新

所有问题都在stackoverflow上标记了osdev

OS / 161是一个用c语言编写的学术操作系统,可在模拟硬件上运行。该操作系统在Nachos中类似。感谢Novelocrat!

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

安德斯建议Robert Love开发Linux内核。这是"广受好评的内部人员对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获得

12/21/2012更新
一个基本的OS开发教程,旨在成为一个学期的项目。它将指导您构建具有基本组件的操作系统。初学者非常好的开始。相关论文。谢谢Srujan!

更新于2013年11月15日

从头开始编写简单的操作系统。谢谢James Moore!

更新于2013年12月8日

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

更新于3/18/2014

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

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

编写一个简单的操作系统 - 来自Scratch(谢谢@Tyler C)


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

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

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

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

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

最后,我知道usenet已经死了(因为对于互联网厄运的先知来说),但你会发现那个时代的许多笨拙的老专家仍然住在那里。你应该搜索google群组(他们有dejanews的旧存储库),我希望你会发现很多人在十年或者十五年前问你现在问的相同问题。你可能会在Linus Torvalds的许多查询中遇到帮助,因为他最初正在开发linux。如果搜索没有提起任何内容,请在相应的新闻组中询问(可能以comp.arch开头,但搜索名称中包含OS的那些)。


Minix是一个小得多,专为学习目的而设计的,并且随书附带的书也很好。

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


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

键盘去抖动程序,键盘驱动程序,磁盘驱动程序,视频驱动程序,文件系统,最后是一个启动加载程序 - 而这只是第一次无需启动它!

......我无法强调熟悉硬件的重要性!如果您真的想要自己完成所有操作,而不是仅仅选择其他人已经为您准备的原始系统,那么尤其如此。例如,联系英特尔并要求他们为您的CPU类型提供CPU卡!这将为您奠定 -"引脚",中断,操作码,您的名字!

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


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


我希望有一个地方可以获得有关开发自己的操作系统的所有信息。最接近的是OS Dev Wiki和论坛。它们提供了大量有关设置,开发和设备硬件信息的良好信息。

还有一些很棒的教程在BoneFide,我已经使用了Bran的入门教程,现在我正在看一个基于他的名为Roll你自己的玩具UNIX克隆操作系统的更新版本。

我再次检查:"操作系统:设计和实现"

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

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


麻省理工学院课程6.828:操作系统工程的材料是一个很好的资源。

XV6 - 用ANSI C for 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的书更喜欢它!这是一个真正的宝石!


您还可以查看SharpOS,它是一个用c#编写的操作系统。


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

我推荐Tanenbaum的标准教科书"现代操作系统"。您也可以通过Calingaert找到有用的"操作系统元素" - 它是一本书的简要概述,从设计者的角度给出了操作系统的粗略草图。

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

编辑:

你能用"更多技术"来说明你的意思吗?这些书给出了伪代码实现的详细信息,但您是在寻找示例操作系统,还是特定机器/语言的代码片段?

-亚当


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


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


以下是一些值得纳入此讨论的Stack Overflow页面:

创建自定义操作系统的障碍

为x86架构开发操作系统


开始攻击Minix。它比Linux(显然)小很多,它的设计考虑了教学目的(至少有一些)。不过Minix 3,这是一个完全不同的故事。


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


已经回答了,但是当我在大学学习操作系统时,我们开始使用早期的Linux内核并添加了简单的现代功能(基本文件系统,虚拟内存,多任务处理,互斥体)。好开心。你可以跳过一些非常疯狂的低级程序集,只能用于保护模式和页面表格,同时还要学习一些内容。

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


我想将Samy Pesse的这个repo to-make-a-Computer-Operating-System包含在内。是一项正在进行的工作。很有意思。


你可能想看一下linuxfromscratch。

Linux From Scratch (LFS) is a project
that provides you with step-by-step
instructions for building your own
custom Linux system, entirely from
source code.


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


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


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


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


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


一个相当简单的OS研究将是μC/ OS。这本书有一张软盘,上面有源代码。

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


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

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

Unix仇恨手册是一本有趣的书,半开始严肃地指责Unix及其衍生物的概念。许多部分都论述了Lisp机器概念的优越性。


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


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


当我开始使用我的基本操作系统时,我需要一个基本指南,如基本操作系统的踏脚石。 它帮助我摆脱了我的头脑。

如果你想从绝对没有(纯汇编代码)


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

  • 您需要关注汇编语言,C和C ++。你应该是这些语言的专家。
  • 首先阅读一本关于OS如何运作的好书[Google it],然后阅读Wiki OS中的所有信息
  • 在youtube中搜索"如何使用汇编语言创建自己的操作系统"观看视频,例如。视频
  • 下载Linux OS源代码并自行编译并尝试自己修改代码
  • 现在你是一位经验丰富的OS编辑器,现在下载Minix和QNX并开始使用它们并从这里获取他们的文档Minix Doc和QNX Doc
  • 现在你已经获得了硕士学位(不仅仅是一点点去)创建操作系统现在将这个知识分发给你的朋友,并在他们的帮助下尝试创建一个像Mac,Linux或Windows一样强大的操作系统


    当你创建一个基本的操作系统时,它实际上很难继续,因为在制作GUI或移植库时没有太多的资源。但我认为看看ToAruOS会有很大帮助!

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

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

    但无论如何,这两个操作系统将帮助你很多,特别是ToAruOS。