操作系统开发入门有哪些资源?[关闭]
-
09-06-2019 - |
题
我一直想做的一件事是开发我自己的操作系统(不一定像 Linux 或 Windows 那样奇特,但比我已经完成的简单引导加载程序更好)。
我很难找到可以帮助您编写简单的“Hello World”操作系统的资源/指南。
我知道很多人可能会建议我看看 Linux 或 BSD;但是这样的系统的代码库(大概)太大了,我不知道从哪里开始。
有什么建议么?
更新:为了让通过 Google 找到这篇文章的人更容易,这里提供了一些操作系统开发资源:
编写您自己的操作系统 (谢谢亚当)
Linux 从头开始 (谢谢约翰)
SharpOS(C# 操作系统) (感谢洛玛克斯)
善意 (谢谢史蒂夫)
麸 (谢谢史蒂夫)
打造您自己的 UNIX 克隆操作系统玩具 (谢谢史蒂夫)
其他资源:
我发现了一个不错的资源,名为 麦克操作系统, ,“MikeOS 是一个学习工具,用于演示简单操作系统如何工作。它使用 16 位实模式进行 BIOS 访问,因此不需要复杂的驱动程序”
更新于 11/14/08
我在以下位置找到了一些资源 Freebyte 的免费和非自由操作系统指南 链接到 OSKit 和 ExOS 库等套件。这些对于操作系统开发入门似乎非常有用。
更新于 2009 年 2 月 23 日
里克·东京 受到推崇的 纳诺斯 在这个 问题. 。Nanoos 是一个用 C++ 编写的操作系统。
更新于 2009 年 3 月 9 日
Dinah 为有抱负的操作系统开发人员提供了一些有用的 Stack Overflow 讨论: 创建自定义操作系统的障碍 讨论您在开发操作系统时可能会遇到的陷阱 操作系统开发 是一个更普遍的讨论。
更新于 7/9/09
LB提供了一个链接 平托斯项目, ,一款专为学生学习操作系统开发而设计的教育操作系统。
更新于 2009 年 7 月 27 日(仍然强劲!)
我偶然发现了一个 在线操作系统课程 来自伯克利,有 23 个讲座。
汤姆操作系统 是一个叉子 麦克操作系统 其中包括一些内存管理器和鼠标支持。作为 MikeOS,它被设计为一个教育项目。它是用 NASM 汇编程序编写的。
更新于 8/4/09
我找到了 幻灯片和其他材料 参加上面列出的伯克利在线讲座。
更新于 2009 年 8 月 23 日
全部 已标记为 osdev 的问题 在堆栈溢出上
操作系统/161 是一个用 c 语言编写的学术操作系统,运行在模拟硬件上。这个操作系统与 Nachos 类似。谢谢小说家!
唐古雷纳推荐 http://en.wikipedia.org/wiki/MicroC/OS-II, ,专为嵌入式系统设计的操作系统。有一个 配套书 以及。
Linux内核开发 罗伯特·洛夫 (Robert Love) 是安德斯 (Anders) 建议的。这是“广受好评的 Linux 内核内部人士视角”。
更新于 2009 年 9 月 18 日
谢谢蒂姆·S。范哈伦告诉我们 宇宙, ,一个完全用 C# 编写的操作系统。
tgiphil 告诉我们 托管操作系统联盟 (MOSA) 框架, ,“一套工具、规范和源代码,用于促进基于通用中间语言的托管操作系统的开发。”
更新于 2009 年 9 月 24 日
Steve 找到了一些使用 Visual Studio 在 Windows 上进行开发的资源,请查看 BrokenThorn 的 VS 2005 指南设置 或者 OSDev 的 VS 部分.
更新于 2012 年 9 月 5 日
kerneltrap.org 不再可用。Linux 内核 v0.01 可从以下位置获取 内核.org
更新于 12/21/2012基本操作系统开发 教程 设计为一个学期的项目。它指导您使用基本组件构建操作系统。对于初学者来说非常好的开始。有关的 纸. 。谢谢斯鲁詹!
更新于 11/15/2013
从头开始编写一个简单的操作系统. 。谢谢詹姆斯摩尔!
更新于 12/8/2013
如何制作计算机操作系统 谢谢德托尼!
更新于 2014 年 3 月 18 日
ToAruOS 一个主要从头开始构建的操作系统,包括 GUI
更新于 2016 年 9 月 12 日
更新于 2016 年 12 月 10 日
从头开始编写一个简单的操作系统 (谢谢@Tyler C)
解决方案
后面有很多链接 简要概述 为 X86 平台编写操作系统所涉及的内容。
看起来最有希望的链接 (www.nondot.org/sabre/os/articles) 不再可用,因此您需要浏览 Archive.org 版本 阅读它。
最终,引导加载程序获取内核的机器代码,将其放入内存中,然后跳转到该处。您可以将任何机器代码放入您想要的内核中,但大多数 C 程序都需要一个操作系统,因此您需要告诉编译器它不会拥有所有这些,或者引导加载程序必须创建其中一些。
然后内核会完成所有繁重的工作,我怀疑这就是您想要的示例内核。但是,从拥有一个会说“Hello world”的内核到拥有一个加载命令解释器、提供磁盘服务以及加载和管理程序的内核,还有很长的路要走。
您可能需要考虑订阅 ACM 以访问他们的旧文献 - 早期计算杂志中有很多 80 年代末和 90 年代初的文章,介绍如何 创建替代操作系统. 。这个时代也可能有一些书籍已经绝版。您也许可以通过查找这些杂志的索引(可以在该网站上找到 - 单击杂志名称附近的“索引”)然后询问周围有副本的人来免费获得相同的信息。
最后,我知道 usenet 已经死了(因为互联网末日的预言家这么说),但你会发现那个时代的许多粗暴的老专家仍然住在那里。你应该搜索谷歌群组(他们有 dejanews 的旧存储库),我希望你会发现很多人在十年或 1.5 年前问你现在问的同样的问题。您甚至可能会遇到 Linus Torvalds 提出的许多寻求帮助的问题,因为他最初是在开发 Linux。如果搜索没有找到任何内容,请在相应的新闻组中询问(可能以 comp.arch 开头,但搜索名称中带有 OS 的新闻组)。
其他提示
作为一个从头开始编写实时多任务操作系统的人......
键盘防抖例程、键盘驱动程序、磁盘驱动程序、视频驱动程序、文件系统,最后是引导加载程序 - 这只是第一次启动它,无需执行任何操作!
...我怎么强调熟悉硬件的重要性都不过分!如果您真的想自己完成这一切,而不是仅仅采用别人已经为您设计的原始系统,则尤其如此。例如,联系 Intel 并要求他们提供适合您 CPU 类型的 CPU 卡!这将为您展示 - “引脚输出”、中断、操作码,凡是您能想到的!
请记住,硬件使这一切成为可能。研究硬件。你不会后悔的。
.
编写一个微控制器操作系统。我推荐基于 x86 的微控制器。现代操作系统只是 巨大的. 。首先学习基础知识。
我希望有一个地方可以获取有关开发自己的操作系统的所有信息。最接近的是 操作系统开发维基 和 论坛. 。他们提供了大量有关设置、开发和设备硬件信息的有用信息。
另外还有一些很棒的教程 骨子里的, ,我使用了入门教程 麸, ,现在我正在根据他的名字寻找最近的一个 打造您自己的 UNIX 克隆操作系统玩具.
我第二次检查:“操作系统 :设计与实现》
如果您想在 Windows 上进行开发,请查看 jolson 的博客文章.
编辑:有关使用 Visual Studio 在 Windows 上进行开发的信息,请查看 断刺的指南 或者 OSDev 的 wiki.
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 的书,我更喜欢它!这是真正的宝石!
你可能还想看看 夏普操作系统 这是他们用 C# 编写的操作系统。
书籍中有关于操作系统基础知识的良好资源。由于没有太多要求从头开始创建新操作系统,因此您不会在互联网上找到大量业余爱好者类型的信息。
我推荐标准教科书,Tanenbaum 的《现代操作系统》。您可能还会发现 Calingaert 撰写的《操作系统元素》很有用 - 这是一本书的简要概述,从设计者的角度粗略地介绍了操作系统的含义。
如果您对实时系统有任何兴趣(并且您至少应该了解实时操作系统的差异和原因),那么我还推荐 Labrosse 的“MicroC/OS-II”。
编辑:
您能具体说明一下“更具技术性”是什么意思吗?这些书提供了伪代码实现细节,但您是否正在寻找示例操作系统或特定机器/语言的代码片段?
-亚当
刚刚来自另一个问题。我想提一下 平托斯...我记得我的操作系统课程中的 Nachos 和 Pintos 似乎是可以在 x86 上运行的同类东西。
我发现 Robert Love 的 Linux 内核开发非常有趣。它以非常实际的方式告诉您 Linux 内核中的不同子系统如何工作。由于源代码是可用的,Linux 是黑客攻击的主要候选者。
以下是一些其他值得纳入本次讨论的 Stack Overflow 页面:
开始攻击 Minix。它比 Linux 小很多(显然),并且它的设计考虑了教学目的(至少在某些方面)。但 Minix 3 不是这样,那是一个完全不同的故事。
已经回答了,但是当我在大学学习操作系统时,我们从早期的 Linux 内核开始,并添加了简单的现代功能(基本文件系统、虚拟内存、多任务处理、互斥体)。好开心。您可以跳过一些真正疯狂的低级汇编,仅用于破坏保护模式和页表,同时仍然了解一些内容。
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
我本科时的操作系统课程要求我们构建许多子系统 操作系统/161, ,一个简单的、类似 BSD 的内核,它提供了一些基础知识,同时在实现更高级别的服务时可以自由地探索各种设计空间决策。
您可能想看看 linux从头开始.
Linux From Scratch(LFS)是一个项目,可为您提供完全从源代码构建自己的自定义Linux系统的分步说明。
我想包含这个仓库 如何制作计算机操作系统 作者:萨米·佩斯。是一项正在进行的工作。很有意思。
µC/OS 是一种相当简单的研究操作系统。这本书有一张软盘,上面有源代码。
查看托管操作系统联盟 (MOSA) 项目: www.mosa-project.org. 。他们正在用 C# 设计 AOT/JIT 编译器和完全托管的操作系统。一些开发人员来自不活跃的 SharpOS 项目。
我玩过 宇宙, 这是“完全以CIL符合CIL的语言实施的操作系统项目”。它是用C#写的,所以那是我的小巷。对于像我这样从未尝试过构建操作系统的人来说,能够立即运行一个“Hello World”操作系统实际上是非常酷的。
这是一篇名为“从头开始编写一个简单的操作系统”。它涵盖了编写引导加载程序、进入 x86-32 保护模式以及用 C 语言编写基本内核。它似乎在详细解释一切方面做得很好。
这 x86 JS 模拟器 和 ARM模拟器 对于了解不同硬件的工作原理以及在不退出您喜欢的浏览器的情况下进行测试也非常有用。
对于程序员来说,这是一个有趣的问题。构建像 Windows 或 Mac 这样的操作系统需要很长很长的时间,但如果你想构建一个简单的操作系统,那么你可以尽力而为
- 你需要专注于汇编语言、C 和 C++。您应该是这些语言的专家。
- 首先阅读一本关于操作系统如何工作的好书[Google it],然后阅读来自 维基操作系统
- 在 youtube 中搜索“How to create your own OS in Assembly Language”观看视频, 例如。视频
- 下载Linux操作系统源代码并自行编译并尝试自行修改代码
- 现在您是一位经验丰富的操作系统编辑器,现在下载 迷你克斯 和 QNX 并开始与他们一起开发并从这里获取他们的文档 Minix 文档 和 QNX 文档
现在您已经获得了创建操作系统的硕士学位(不完全,只是还差一点),现在将这些知识分发给您的朋友,并在他们的帮助下尝试创建一个像 Mac、Linux 或 Windows 一样强大的操作系统
当你制作了一个基本的操作系统后,实际上很难继续下去,因为没有太多关于制作 GUI 或移植库的资源。但我想看看 托阿鲁操作系统 会有很大帮助!
该操作系统表面下的代码非常简单!但同时他也移植了诸如 cairo、python、(还没有但很快)sdl 之类的东西,制作了共享内存,并且他还制作了自己的小部件工具包。都是用C写的。
另一个有趣的操作系统是 谱系操作系统. 。它是由 JamesM(幕后黑手)制作的 jamesM 的内核教程. 。虽然它比 ToaruOS 有更多的功能,但它也更大、更混乱。
但无论如何,这两个操作系统都会对你有很大帮助,尤其是 ToAruOS。
当我开始研究基本操作系统时,我需要一个基本指南,例如 基本操作系统的垫脚石. 。它帮助我不失去理智。
如果你想从无到有(纯汇编代码)