“Tutorials”的版本间差异

来自osdev
跳到导航 跳到搜索
(创建页面,内容为“这个wiki上有几个与操作系统开发相关的教程。本页概述了相关教程,按主题区域和难度排序。 {{Ratingicon|1}} -非常基础或易于理解的教程。先试试这些。 {{Ratingicon|2}} -关于一些较难的主题的教程,但仍然很好。首先做一些简单的事情可能是个好主意。 {{Ratingicon|3}} -高级课程教程。不建议初学者使用。 {{Ratingicon|4}} -关于非常难的科目的教程。大师班。…”)
 
 
(未显示同一用户的4个中间版本)
第1行: 第1行:
这个wiki上有几个与操作系统开发相关的教程。本页概述了相关教程,按主题区域和难度排序。
本维基中有许多与操作系统开发相关的教程。 本页面是对相关教程的概述,和按主题领域和难度排序。


{{Ratingicon|1}} -非常基础或易于理解的教程。先试试这些。 {{Ratingicon|2}} -关于一些较难的主题的教程,但仍然很好。首先做一些简单的事情可能是个好主意。 {{Ratingicon|3}} -高级课程教程。不建议初学者使用。 {{Ratingicon|4}} -关于非常难的科目的教程。大师班。祝你好运 {{Ratingicon}} -还没有评级。 == 内核基础知识 ==
{{Ratingicon|1}} - 要么是非常基础的,要么是容易理解的教程。优先试试这些。
 
{{Ratingicon|2}} - 难度稍大的专题教程,但做起来仍不算难。最好首先做一些简单的。
 
{{Ratingicon|3}} - 高级专题的教程。不推荐初学者使用。
 
{{Ratingicon|4}} - 非常困难专题的教程。大师等级。祝你好运!
 
{{Ratingicon}} - 还没有评级。
 
==内核基础知识==


=== Bare Bones ===
=== Bare Bones ===
这些是“基本”教程,将为您提供一个足够安全的基本内核,作为您自己的起点。
这些是'bare bones'(译者注:这里的Bare Bones和下面的Meaty Skeleton是作者专门给教程难度阶段起的分类名称)教程,将为你提供一个足够的基本内核,作为你自己的起点。
 
{{Ratingicon|1}} [[Bare Bones]] - 用C语言为x86编写一个基本的32位内核
 
{{Ratingicon|1}} [[User:Zesterer/Bare Bones]] - 为x86用C编写一个基本的32位内核 (由zesterer改进的教程)
 
{{Ratingicon|1}} [[Stivale Bare Bones]] - 使用[[Limine]]引导加载程序编写一个简单的64位[[Higher Half Kernel | Higher Half Kernel]]。
 
{{Ratingicon|1}} [[Meaty Skeleton]] - 模板操作系统
 
{{Ratingicon|2}} [[Higher Half x86 Bare Bones]] - 演示如何编写[[Higher Half Kernel | Higher Half Kernel]]
 
{{Ratingicon|2}} [[Setting Up Long Mode]] - 切换到长模式
 
{{Ratingicon|2}} [[Creating a 64-bit kernel]] - 64位内核简介
 
{{Ratingicon|1}} [[Real mode assembly bare bones]] - 编写基本汇编语言内核的教程系列
 
{{Ratingicon|2}} [[Pascal Bare Bones]] - Pascal语言的一个基本内核
 
{{Ratingicon|2}} [[Ada Bare bones]] - 关于用Ada编写基本内核的教程
 
{{Ratingicon|2}} [[FreeBasic Bare Bones]] - FreeBasic语言的基本内核
 
我们也有其他平台的bare bones
 
{{Ratingicon|1}} [[GameBoy Advance Barebones]] - 有关编写基本GBA内核的教程
 
{{Ratingicon|2}} [[Sparc Barebones]] - SparcStations的基本内核
 
=== Babysteps ===
如何在汇编语言中创建基本内核<br/>
{{Ratingicon|1}} [[Babystep1]] - 你的第一个引导区。
 
{{Ratingicon|1}} [[Babystep2]] - 使用BIOS输出一条信息。
 
{{Ratingicon|1}} [[Babystep3]] - 机器代码一瞥
 
{{Ratingicon|1}} [[Babystep4]] - 在没有BIOS的情况下打印到屏幕上
 
{{Ratingicon|1}} [[Babystep5]] - 中断
 
{{Ratingicon|1}} [[Babystep6]] - 进入保护模式
 
{{Ratingicon|1}} [[Babystep7]] - 非实模式
 
{{Ratingicon|1}} [[Babystep8]] - 32位打印
 
{{Ratingicon|1}} [[Real mode assembly appendix A|Appendix A]] - 更多信息
 
=== 其他内核 ===
这些教程涵盖了可选的内核设计。 这些主要面向使用其他地方没有介绍的语言的开发人员,或者使用与BaySteps和Bare Bones教程中给出的设计方法显著不同的开发人员。
 
{{Ratingicon|3}} 简要介绍[[Java Primer|Java入门]],尤其是Java,通常不适合操作系统开发。
 
{{Ratingicon|2}} 一个[[C_Sharp_Bare_Bones |C#的Bare Bones]]教程,也属于操作系统开发中通常不使用的语言。
 
====第三方教程====
 
本节涵盖与本维基和论坛无关的教程。 考虑到相关教程的数量,没有办法得到一个完整的列表,所以这仅限于讨论中最常出现的那些。 之所以在这里列出它们,是因为它们主要集中在操作系统开发的早期步骤。


{{Ratingicon|1}} [[Bare Bones]] -用C为x86编写一个基本的32位内核 {{Ratingicon|1}} [[User:Zesterer/Bare Bones]] -用C为x86编写一个基本的32位内核(zesterer改进的教程) {{Ratingicon|1}} [[Stivale Bare Bones]] -使用[[Limine]]引导加载程序编写一个简单的64位[[Higher Half Kernel | Higher Half Kernel]]。 {{Ratingicon|1}} [[Meaty Skeleton]] -模板操作系统 {{Ratingicon|2}} [[Higher Half x86 Bare Bones]] -演示如何编写[[Higher Half Kernel | Higher Half Kernel]]的教程
此外,它们的质量有惊人的差异,由于这些不是本维基本身的一部分,因此本维基作者无法确保其错误得到修复或进行更新。


{{Ratingicon|2}} [[Setting Up Long Mode]] -切换到长模式 {{Ratingicon|2}} [[Creating a 64-bit kernel]] -64位内核简介 {{Ratingicon|1}} [[Real mode assembly bare bones]] -关于编写基本汇编语言内核的教程系列 {{Ratingicon|2}} [[Pascal Bare Bones]] -Pascal中的一个基本内核
虽然这些内容仅供参考,因为它们经常被提及,但建议任何关注维基教程的人将第三方教程作为补充,而不推荐学习。


{{Ratingicon|2}} [[Ada Bare bones]] -在Ada中编写基本内核的教程 {{Ratingicon|2}} [[FreeBasic Bare Bones]] -FreeBasic中的basic内核 我们还为其他平台提供了基础
{{Ratingicon}} [http://jamesmolloy.co.uk/tutorial_html/ James A. Molloy's Kernel Tutorials] - 过去比较流行的教程之一,它有许多 [[James Molloy's Tutorial Known Bugs| 已知问题]],并且似乎没有积极更新。


{{Ratingicon|1}} [[GameBoy Advance Barebones]] -关于编写基本GBA内核的教程 {{Ratingicon|2}} [[Sparc Barebones]] -SparcStations的基本内核 === 婴儿步 ===
{{Ratingicon}} [http://www.brokenthorn.com/Resources/OSDevIndex.html BrokenThorn Operating System Development Series] - 与James Molloy系列一样,这是一个非常著名的教程系列,但它非常过时,有大量尚未纠正的[[Brokenthorn's Known Bugs|已知缺陷]]
如何在汇编中创建基本内核<br/>
{{Ratingicon|1}} [[Babystep1]] - 您的第一个引导扇区。


{{Ratingicon|1}} [[Babystep2]] -使用BIOS编写消息。 {{Ratingicon|1}} [[Babystep3]] -机器代码一瞥 {{Ratingicon|1}} [[Babystep4]] -在没有BIOS的情况下打印到屏幕 {{Ratingicon|1}} [[Babystep5]] - {{Ratingicon|1}} [[Babystep6]] -进入保护模式 {{Ratingicon|1}} [[Babystep7]] -虚幻模式 {{Ratingicon|1}} [[Babystep8]] -32位打印 {{Ratingicon|1}} [[Real mode assembly appendix A|Appendix A]] -补充资料 === 其他内核 ===
{{Ratingicon}} [http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial Bran's Kernel Tutorial] - 这是一个非常过时,但仍然经常被引用的教程,来自现已奄奄一息的"Bona Fide OS Development"网站。 像JAM和BrokenThorn一样,代码示例也有许多 [[Bran's Known Bugs| 已知问题]],并且许多材料早已过时。
这些教程涵盖了可选的内核设计。 这些主要面向使用其他地方未涉及的语言的开发人员,或者与Babysteps和裸体教程中给出的设计方法有显著不同的设计方法。


{{Ratingicon | 3}}A[[Java Primer]]处理通常不适合操作系统开发的一般语言,特别是Java语言。
{{Ratingicon}} [http://mikeos.sourceforge.net/write-your-own-os.html How to write a simple operating system] by Mike Saunders - 这是MikeOS项目的起点,这是一个用汇编语言编写的x86实模式系统。并重点介绍了为MikeOS开发所需的各个方面。


==== 第三方教程 ====
{{Ratingicon|1}} [https://www.youtube.com/playlist?list=PLKbvCgwMcH7BX6Z8Bk1EuFwDa0WGkMnrz FlingOS Getting Started video series] - 第三方系列视频教程,提供编写第一个操作系统的实际入门知识(针对x86,ASM、C和C#各提供完整示例)


本节介绍与wiki和论坛无关的教程。 考虑到周围教程的数量,没有办法有一个完整的列表,因此这仅限于讨论中最常出现的教程。 这里列出它们是因为其中大多数主要关注操作系统开发的早期步骤。
{{Ratingicon}} [https://github.com/littleosbook/littleosbook The Little OS Book] - 托管在GitHub上的第三方OS演示。经过几次更新,并且在代码库中列出了已知未修复的Bug。


此外,它们的质量有着惊人的差异,而且由于它们不是wiki本身的一部分,wiki作者无法确保修复bug或进行更新。
{{Ratingicon|1}} [https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf Writing a Simple Operating System — From Scratch] (PDF) - 2010年的教程,基于英国伯明翰大学操作系统的课程材料,由原课程讲师Nicholas Blundell博士编写。 该教程是作为补充材料编写的,供学生在课程前进行复习所用。根据Blundell的说法,它''并非旨在替代,而是作为Minix项目等出色工作的垫脚石而建立。''


虽然这些内容仅供参考,因为它们经常被提及,但建议任何关注wiki教程的人将第三方教程作为补充,而不是建议。
{{Ratingicon|1}} [https://www.osnews.com/story.php/1482/So_You_Want_to_Write_an_Operating_System So, You Want to Write an Operating System] 和 [https://www.osnews.com/story/1532/ Climbing the Kernel Mountain] - 从2002年开始,OS新闻网站发布了一系列现在已经过时的文章,这些是许多老开发人员对OS开发的介绍。 它们写得很好,但对细节只有粗略的覆盖,而且今天主要只有历史价值。 放在这里仅仅是因为它们在论坛的许多旧帖子中被引用。 请注意,作者后来写了一篇[https://www.osnews.com/story/8162 后续],在这篇文章中,他反对开发新的内核。


{{Ratingicon}} [http://jamesmolloy.co.uk/tutorial_html/ James A. Molloy's Kernel Tutorials] -作为过去比较流行的教程之一,它有许多[[James Molloy的教程已知bug |已知问题]],并且似乎没有积极更新。 {{Ratingicon}} [http://www.brokenthorn.com/Resources/OSDevIndex.html BrokenThorn Operating System Development Series] -与詹姆斯·莫洛伊系列一样,这是一个非常著名的教程系列,但它非常过时,并且有大量尚未纠正的[[Brokenthorn的已知bug |已知缺陷]]。 {{Ratingicon}} [http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial Bran's Kernel Tutorial] -这是一本非常过时但仍然经常被引用的教程,来自现在奄奄一息的“真正的操作系统开发”网站。与JAM和BrokenThorn一样,代码示例也有许多[[Bran的已知bug |已知问题]],而且许多内容早已过时。 {{Ratingicon}} [http://mikeos.sourceforge.net/write-your-own-os.html How to write a simple operating system] by Mike Saunders -这是MikeOS项目的起点,这是一个用汇编语言编写的x86实模式系统。并重点关注为MikeOS开发所需的方面。 {{Ratingicon|1}} [https://www.youtube.com/playlist?list=PLKbvCgwMcH7BX6Z8Bk1EuFwDa0WGkMnrz FlingOS Getting Started video series] -第三方系列视频教程为编写第一个操作系统提供了一个实际的开始(针对x86,ASM、C和C#中都有完整的示例) {{Ratingicon}} [https://github.com/littleosbook/littleosbook The Little OS Book] -GitHub上托管的第三方操作系统演示程序。经过一段时间的更新,尚未修复的已知bug会列在回购协议中。 {{Ratingicon|1}} [https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf Writing a Simple Operating System — From Scratch] (PDF) -一个2010教程基于课程材料从一个班在操作系统在英国伯明翰大学,由Dr. 尼古拉斯·布伦德尔,最初的课程讲师。 本教程是作为补充材料编写的,供学生在课程开始前复习,根据Blundell的说法,“不是作为替代品,而是作为优秀作品(如Minix项目)的垫脚石”。 {{Ratingicon|1}}[https://www.osnews.com/story.php/1482/So_You_Want_to_Write_an_Operating_System So, 您想编写一个操作系统]和[https://www.osnews.com/story/1532/攀登内核山]- 从2002年开始,OS新闻网站发布了一系列现在已经过时的文章,这些文章是许多老开发人员对OS开发的介绍。 它们写得很好,但对细节的描述很粗略,主要是今天的历史兴趣。 这仅仅是因为它们在论坛的许多老帖子中被引用。 注意,作者后来写了一篇[https://www.osnews.com/story/8162在这篇文章中,他反对开发新的内核。 {{Ratingicon|1}} [[Xv6]] unlike most tutorials in this list, this is a fully functional, yet simple OS. Xv6 is a modernized version of the classic Dennis Richie's and Ken Thompson's UNIX V6, written in ANSI C for the x86 protected mode, keeping the original UNIX philosophy of simplicity.
{{Ratingicon|1}} [[Xv6]]与此列表中的大多数教程不同,这是一个功能齐全但简单的操作系统。 Xv6是经典的丹尼斯·里奇 (Dennis Richie) 和肯·汤普森 (Ken Thompson) 的UNIX V6的现代化版本,以ANSI C为x86保护模式编写,保留了原始的UNIX简单性哲学。


== 基础 ==
==基础知识==
{{Ratingicon|1}} [[GDT Tutorial]] - 关于[[GDT]]的指南
{{Ratingicon|1}} [[GDT Tutorial]] - 关于[[GDT]]的指南


{{Ratingicon|1}} [[Interrupts tutorial]] -set如何从C中断 {{Ratingicon|1}} [[Creating A Shell]] -关于如何编写[[Shell | Shell]]的教程 {{Ratingicon|2}} [[Going Further on x86]] -应涵盖内核内部基础知识的指南 {{Ratingicon|3}} [[User:Johnburger/Demo|DEMO]] -以代码和散文形式编写的教程,介绍了386(及以上版本)和PC平台的一些基础知识,作为汇编语言[[用户:约翰伯格/Demo | Demo]] 本教程介绍如何设置和维护启用分页的系统== 内存管理 ==
{{Ratingicon|1}} [[Interrupts tutorial]] - 如何用C设置中断
{{Ratingicon|1}} [[Setting Up Paging]] - {{Ratingicon|1}} [[Setting Up Paging With PAE]] -如上所述,但已启用PAE {{Ratingicon|1}} [[Brendan's Memory Management Guide]] -解释基本概念的内存管理指南 {{Ratingicon|2}} [[Writing a memory manager]] -关于如何在计算机中处理RAM的教程。 {{Ratingicon|2}} [[Writing A Page Frame Allocator]] -如何编写一个简单的页面框架分配器 内核空间多任务教程。== 进程和线程 ==
 
{{Ratingicon|2}} [[Brendan's Multi-tasking Tutorial]] - {{Ratingicon|3}} [[Cooperative Multitasking]] -如何创建内核空间多任务系统。 {{Ratingicon|3}} [https://web.archive.org/web/20160326162854/http://xarnze.com/article/Entering%20User%20Mode Getting to User Mode]-如何将上下文切换到用户模式。 == 图形及;视频 ==
{{Ratingicon|1}} [[Creating A Shell]] - 关于如何编写[[Shell|Shell]]的教程
{{Ratingicon|1}} [[Drawing In Protected Mode]] - 基本知识,如何绘制像素。
 
{{Ratingicon|2}} [[Going Further on x86]] - 本指南将涵盖内核内部的基础知识
 
{{Ratingicon|3}} [[User:Johnburger/Demo|DEMO]] - 关于'386 (及以上) 和PC平台的一些基础知识的代码和散文教程,作为汇编语言 [[User:Johnburger/Demo|演示]]
 
==内存管理==
{{Ratingicon|1}} [[Setting Up Paging]] - 本教程介绍如何设置和维护启用了分页的系统
 
{{Ratingicon|1}} [[Setting Up Paging With PAE]] - 如上,但启用了PAE
 
{{Ratingicon|1}} [[Brendan's Memory Management Guide]] - 解释基本概念的内存管理指南
 
{{Ratingicon|2}} [[Writing a memory manager]] - 关于如何在计算机中处理RAM的教程。
 
{{Ratingicon|2}} [[Writing A Page Frame Allocator]] - 如何编写一个简单的页面帧分配器
 
==进程和线程==
{{Ratingicon|2}} [[Brendan's Multi-tasking Tutorial]] - 内核空间多任务教程。
 
{{Ratingicon|3}} [[Cooperative Multitasking]] - 如何创建内核空间多任务系统
 
{{Ratingicon|3}} [https://web.archive.org/web/20160326162854/http://xarnze.com/article/Entering%20User%20Mode Getting to User Mode]- 如何将上下文切换到用户模式。
 
==图形和视频==
{{Ratingicon|1}} [[Drawing In Protected Mode]] - 基础知识,如何绘制像素。
 
{{Ratingicon|1}} [[Double Buffering]] - 一种防止Artifacts(译者注:指计算机合成图中的不自然之处)的简便方法。
 
{{Ratingicon|1}} [[PC Screen Font]] - 以位图字体显示文本。
 
{{Ratingicon|2}} [[Scalable Screen Font]] - 用矢量字体显示文本。
 
{{Ratingicon|2}} [[Loading Icons]] - 解码图像文件以显示图标。
 
==引导==
{{Ratingicon|1}} [[Bootable Disk]] - 解释如何创建可启动磁盘 (U盘) 映像的教程
 
{{Ratingicon|1}} [[Bootable CD]] - 介绍如何创建可引导CD的教程
 
{{Ratingicon|1}} [[Bootable El-Torito CD with GRUB Legacy]] - 说明如何创建可引导的GRUB CD的教程
 
{{Ratingicon|2}} [[Rolling Your Own Bootloader]] - 描述编写引导加载程序时要采取的步骤。
 
{{Ratingicon|1}} [[Babystep1|Writing a bootloader]] - 关于创建引导加载程序的基本教程
 
{{Ratingicon|2}} [[uefi.inc|Writing a bootloader for UEFI]] - 有关使用UEFI创建引导加载程序的基本教程
 
{{Ratingicon|3}} [[Writing GRUB Modules]] - 编写将自定义功能添加到GRUB的模块的教程
 
==构建==
{{Ratingicon|1}} [[Makefile]] - 如何使用Makefile的指导性演示
 
{{Ratingicon|3}} [[OS Specific Toolchain]] - GCC和Binutils适应平台的指南
 
{{Ratingicon|1}} [[CMake Build System]] - 本指南演示了如何调整KitWare的CMake构建系统来构建操作系统。
 
{{Ratingicon|1}} [[User:TheCool1Kevin/VSCode_Debug|VSCode for Debugging]] - 设置VSCode以调试内核。
 
== 编译器 ==
{{Ratingicon|1}} [[GCC Cross-Compiler]] - 帮助构建针对不同平台的GCC的指南
 
{{Ratingicon|1}} [[GDC Cross-Compiler]] - 与上一个相同,但是针对D编程语言的。
 
== 可执行文件格式 ==
 
{{Ratingicon|2}} [[ELF Tutorial]] - 详细介绍加载ELF可执行文件过程的指南。
 
{{Ratingicon|3}} [https://web.archive.org/web/20140130143820/http://robinhoksbergen.com/papers/howto_elf.html Manually Creating an ELF Executable] - 这本指南演示了ELF二进制文件是如何工作的,以及如何仅使用十六进制编辑器从头开始构建一个。
 
== 移植软件 ==
{{Ratingicon|2}} [[Porting Newlib]] - 将通用C库移植到另一个操作系统的指南


{{Ratingicon|1}} [[Double Buffering]] -一种防止伪影的简便方法。 {{Ratingicon|1}} [[PC Screen Font]] -使用位图字体显示文本。 {{Ratingicon|2}} [[Scalable Screen Font]] -使用矢量字体显示文本。 {{Ratingicon|2}} [[Loading Icons]] -解码图像文件以显示图标。 == 引导 ==
{{Ratingicon}} [[Libsupcxx|Using Libsupc++]] - 关于移植libsupc++以更好地利用C++功能的指南
{{Ratingicon|1}} [[Bootable Disk]] - 介绍如何创建可引导磁盘(USB棒)映像的教程


{{Ratingicon|1}} [[Bootable CD]] -介绍如何创建可引导CD的教程 {{Ratingicon|1}} [[Bootable El-Torito CD with GRUB Legacy]] -介绍如何创建可引导GRUB CD的教程 {{Ratingicon|2}} [[Rolling Your Own Bootloader]] -描述编写引导加载程序时要采取的步骤。 {{Ratingicon|1}} [[Babystep1|Writing a bootloader]] -关于创建引导加载程序的基本教程 {{Ratingicon|2}} [[uefi.inc|Writing a bootloader for UEFI]] -关于使用UEFI创建引导加载程序的基本教程 {{Ratingicon|3}} [[Writing GRUB Modules]] -关于编写向GRUB添加自定义功能的模块的教程。 == Building ==
{{Ratingicon|4}} [[Porting Python]] - 关于将python移植到另一个操作系统的指南
{{Ratingicon|1}} [[Makefile]] -关于如何使用Makefiles的指导演示 {{Ratingicon|3}} [[OS Specific Toolchain]] -关于将GCC和Binutils适应平台的指南 {{Ratingicon|1}} [[CMake Build System]] -一个指南,演示如何调整KitWare的CMake构建系统来构建操作系统。 {{Ratingicon|1}} [[User:TheCool1Kevin/VSCode_Debug|VSCode for Debugging]] -设置VSCode以调试内核。 == 编译程序 ==
{{Ratingicon|1}} [[GCC Cross-Compiler]] -帮助构建针对不同平台的GCC的指南 {{Ratingicon|1}} [[GDC Cross-Compiler]] -与前面相同,但这次是针对D编程语言。 == 可执行文件格式 ==


{{Ratingicon|2}} [[ELF Tutorial]] -详细说明加载ELF可执行文件过程的指南。 {{Ratingicon|3}} [https://web.archive.org/web/20140130143820/http://robinhoksbergen.com/papers/howto_elf.html Manually Creating an ELF Executable] -本指南演示了ELF二进制文件的工作原理,以及如何仅使用十六进制编辑器从头开始构建一个二进制文件。 == Porting Software ==
[[Category:Tutorials]]
{{Ratingicon|2}} [[Porting Newlib]] -关于将通用C库移植到另一个操作系统的指南 {{Ratingicon}} [[Libsupcxx|Using Libsupc++]] -LIbSuc++移植以从C++的特点中获取更多的指南 {{Ratingicon|4}} [[Porting Python]] -关于将python移植到其他操作系统的指南 [[Category:Tutorials]]

2022年2月17日 (四) 14:08的最新版本

本维基中有许多与操作系统开发相关的教程。 本页面是对相关教程的概述,和按主题领域和难度排序。

Difficulty 1.png - 要么是非常基础的,要么是容易理解的教程。优先试试这些。

Difficulty 2.png - 难度稍大的专题教程,但做起来仍不算难。最好首先做一些简单的。

Difficulty 3.png - 高级专题的教程。不推荐初学者使用。

Difficulty 4.png - 非常困难专题的教程。大师等级。祝你好运!

Difficulty 0.png - 还没有评级。

内核基础知识

Bare Bones

这些是'bare bones'(译者注:这里的Bare Bones和下面的Meaty Skeleton是作者专门给教程难度阶段起的分类名称)教程,将为你提供一个足够的基本内核,作为你自己的起点。

Difficulty 1.png Bare Bones - 用C语言为x86编写一个基本的32位内核

Difficulty 1.png User:Zesterer/Bare Bones - 为x86用C编写一个基本的32位内核 (由zesterer改进的教程)

Difficulty 1.png Stivale Bare Bones - 使用Limine引导加载程序编写一个简单的64位 Higher Half Kernel

Difficulty 1.png Meaty Skeleton - 模板操作系统

Difficulty 2.png Higher Half x86 Bare Bones - 演示如何编写 Higher Half Kernel

Difficulty 2.png Setting Up Long Mode - 切换到长模式

Difficulty 2.png Creating a 64-bit kernel - 64位内核简介

Difficulty 1.png Real mode assembly bare bones - 编写基本汇编语言内核的教程系列

Difficulty 2.png Pascal Bare Bones - Pascal语言的一个基本内核

Difficulty 2.png Ada Bare bones - 关于用Ada编写基本内核的教程

Difficulty 2.png FreeBasic Bare Bones - FreeBasic语言的基本内核

我们也有其他平台的bare bones

Difficulty 1.png GameBoy Advance Barebones - 有关编写基本GBA内核的教程

Difficulty 2.png Sparc Barebones - SparcStations的基本内核

Babysteps

如何在汇编语言中创建基本内核
Difficulty 1.png Babystep1 - 你的第一个引导区。

Difficulty 1.png Babystep2 - 使用BIOS输出一条信息。

Difficulty 1.png Babystep3 - 机器代码一瞥

Difficulty 1.png Babystep4 - 在没有BIOS的情况下打印到屏幕上

Difficulty 1.png Babystep5 - 中断

Difficulty 1.png Babystep6 - 进入保护模式

Difficulty 1.png Babystep7 - 非实模式

Difficulty 1.png Babystep8 - 32位打印

Difficulty 1.png Appendix A - 更多信息

其他内核

这些教程涵盖了可选的内核设计。 这些主要面向使用其他地方没有介绍的语言的开发人员,或者使用与BaySteps和Bare Bones教程中给出的设计方法显著不同的开发人员。

Difficulty 3.png 简要介绍Java入门,尤其是Java,通常不适合操作系统开发。

Difficulty 2.png 一个C#的Bare Bones教程,也属于操作系统开发中通常不使用的语言。

第三方教程

本节涵盖与本维基和论坛无关的教程。 考虑到相关教程的数量,没有办法得到一个完整的列表,所以这仅限于讨论中最常出现的那些。 之所以在这里列出它们,是因为它们主要集中在操作系统开发的早期步骤。

此外,它们的质量有惊人的差异,由于这些不是本维基本身的一部分,因此本维基作者无法确保其错误得到修复或进行更新。

虽然这些内容仅供参考,因为它们经常被提及,但建议任何关注维基教程的人将第三方教程作为补充,而不推荐学习。

Difficulty 0.png James A. Molloy's Kernel Tutorials - 过去比较流行的教程之一,它有许多 已知问题,并且似乎没有积极更新。

Difficulty 0.png BrokenThorn Operating System Development Series - 与James Molloy系列一样,这是一个非常著名的教程系列,但它非常过时,有大量尚未纠正的已知缺陷

Difficulty 0.png Bran's Kernel Tutorial - 这是一个非常过时,但仍然经常被引用的教程,来自现已奄奄一息的"Bona Fide OS Development"网站。 像JAM和BrokenThorn一样,代码示例也有许多 已知问题,并且许多材料早已过时。

Difficulty 0.png How to write a simple operating system by Mike Saunders - 这是MikeOS项目的起点,这是一个用汇编语言编写的x86实模式系统。并重点介绍了为MikeOS开发所需的各个方面。

Difficulty 1.png FlingOS Getting Started video series - 第三方系列视频教程,提供编写第一个操作系统的实际入门知识(针对x86,ASM、C和C#各提供完整示例)

Difficulty 0.png The Little OS Book - 托管在GitHub上的第三方OS演示。经过几次更新,并且在代码库中列出了已知未修复的Bug。

Difficulty 1.png Writing a Simple Operating System — From Scratch (PDF) - 2010年的教程,基于英国伯明翰大学操作系统的课程材料,由原课程讲师Nicholas Blundell博士编写。 该教程是作为补充材料编写的,供学生在课程前进行复习所用。根据Blundell的说法,它并非旨在替代,而是作为Minix项目等出色工作的垫脚石而建立。

Difficulty 1.png So, You Want to Write an Operating SystemClimbing the Kernel Mountain - 从2002年开始,OS新闻网站发布了一系列现在已经过时的文章,这些是许多老开发人员对OS开发的介绍。 它们写得很好,但对细节只有粗略的覆盖,而且今天主要只有历史价值。 放在这里仅仅是因为它们在论坛的许多旧帖子中被引用。 请注意,作者后来写了一篇后续,在这篇文章中,他反对开发新的内核。

Difficulty 1.png Xv6与此列表中的大多数教程不同,这是一个功能齐全但简单的操作系统。 Xv6是经典的丹尼斯·里奇 (Dennis Richie) 和肯·汤普森 (Ken Thompson) 的UNIX V6的现代化版本,以ANSI C为x86保护模式编写,保留了原始的UNIX简单性哲学。

基础知识

Difficulty 1.png GDT Tutorial - 关于GDT的指南

Difficulty 1.png Interrupts tutorial - 如何用C设置中断

Difficulty 1.png Creating A Shell - 关于如何编写Shell的教程

Difficulty 2.png Going Further on x86 - 本指南将涵盖内核内部的基础知识

Difficulty 3.png DEMO - 关于'386 (及以上) 和PC平台的一些基础知识的代码和散文教程,作为汇编语言 演示

内存管理

Difficulty 1.png Setting Up Paging - 本教程介绍如何设置和维护启用了分页的系统

Difficulty 1.png Setting Up Paging With PAE - 如上,但启用了PAE

Difficulty 1.png Brendan's Memory Management Guide - 解释基本概念的内存管理指南

Difficulty 2.png Writing a memory manager - 关于如何在计算机中处理RAM的教程。

Difficulty 2.png Writing A Page Frame Allocator - 如何编写一个简单的页面帧分配器

进程和线程

Difficulty 2.png Brendan's Multi-tasking Tutorial - 内核空间多任务教程。

Difficulty 3.png Cooperative Multitasking - 如何创建内核空间多任务系统

Difficulty 3.png Getting to User Mode- 如何将上下文切换到用户模式。

图形和视频

Difficulty 1.png Drawing In Protected Mode - 基础知识,如何绘制像素。

Difficulty 1.png Double Buffering - 一种防止Artifacts(译者注:指计算机合成图中的不自然之处)的简便方法。

Difficulty 1.png PC Screen Font - 以位图字体显示文本。

Difficulty 2.png Scalable Screen Font - 用矢量字体显示文本。

Difficulty 2.png Loading Icons - 解码图像文件以显示图标。

引导

Difficulty 1.png Bootable Disk - 解释如何创建可启动磁盘 (U盘) 映像的教程

Difficulty 1.png Bootable CD - 介绍如何创建可引导CD的教程

Difficulty 1.png Bootable El-Torito CD with GRUB Legacy - 说明如何创建可引导的GRUB CD的教程

Difficulty 2.png Rolling Your Own Bootloader - 描述编写引导加载程序时要采取的步骤。

Difficulty 1.png Writing a bootloader - 关于创建引导加载程序的基本教程

Difficulty 2.png Writing a bootloader for UEFI - 有关使用UEFI创建引导加载程序的基本教程

Difficulty 3.png Writing GRUB Modules - 编写将自定义功能添加到GRUB的模块的教程

构建

Difficulty 1.png Makefile - 如何使用Makefile的指导性演示

Difficulty 3.png OS Specific Toolchain - GCC和Binutils适应平台的指南

Difficulty 1.png CMake Build System - 本指南演示了如何调整KitWare的CMake构建系统来构建操作系统。

Difficulty 1.png VSCode for Debugging - 设置VSCode以调试内核。

编译器

Difficulty 1.png GCC Cross-Compiler - 帮助构建针对不同平台的GCC的指南

Difficulty 1.png GDC Cross-Compiler - 与上一个相同,但是针对D编程语言的。

可执行文件格式

Difficulty 2.png ELF Tutorial - 详细介绍加载ELF可执行文件过程的指南。

Difficulty 3.png Manually Creating an ELF Executable - 这本指南演示了ELF二进制文件是如何工作的,以及如何仅使用十六进制编辑器从头开始构建一个。

移植软件

Difficulty 2.png Porting Newlib - 将通用C库移植到另一个操作系统的指南

Difficulty 0.png Using Libsupc++ - 关于移植libsupc++以更好地利用C++功能的指南

Difficulty 4.png Porting Python - 关于将python移植到另一个操作系统的指南