Tutorials
本维基上有许多与操作系统开发相关的教程。 本页面是对相关教程的概述,按主题领域和难度排序。
- 关于难度稍大的专题教程,但做起来仍不算难。最好首先做一些简单的。
内核基础知识
Bare Bones
这些是'基础'教程,将为您提供一个足够的基本内核,作为您自己的起点。
Bare Bones - 用C语言为x86编写一个基本的32位内核
User:Zesterer/Bare Bones - 为x86用C编写一个基本的32位内核 (由zesterer改进的教程)
Stivale Bare Bones - 使用Limine引导加载程序编写一个简单的64位 Higher Half Kernel。
Meaty Skeleton - 模板操作系统
Higher Half x86 Bare Bones - 演示如何编写 Higher Half Kernel
Setting Up Long Mode - 切换到长模式
Creating a 64-bit kernel - 64位内核简介
Real mode assembly bare bones - 编写基本汇编语言内核的教程系列
Pascal Bare Bones - Pascal语言的一个基本内核
Ada Bare bones - 关于用Ada编写基本内核的教程
FreeBasic Bare Bones - FreeBasic语言的基本内核
我们也有其他平台的bare bones
GameBoy Advance Barebones - 有关编写基本GBA内核的教程
Sparc Barebones - SparcStations的基本内核
Babysteps
如何在汇编语言中创建基本内核
Babystep1 - 你的第一个引导区。
Babystep2 - 使用BIOS输出一条信息。
Babystep3 - 机器代码一瞥
Babystep4 - 在没有BIOS的情况下打印到屏幕上
Babystep5 - 中断
Babystep6 - 进入保护模式
Babystep7 - 非实模式
Babystep8 - 32位打印
Appendix A - 更多信息
其他内核
这些教程涵盖了可选的内核设计。 这些主要面向使用其他地方没有介绍的语言的开发人员,或者使用与BaySteps和Bare Bones教程中给出的设计方法显著不同的开发人员。
简要介绍Java入门,尤其是Java,通常不适合操作系统开发。
一个C#的Bare Bones教程,也属于使用操作系统开发中通常不使用的语言。
第三方教程
本节涵盖与本维基和论坛无关的教程。 考虑到相关教程的数量,没有办法得到一个完整的列表,所以这仅限于讨论中最常出现的那些。 之所以在这里列出它们,是因为它们主要集中在操作系统开发的早期步骤。
此外,它们的质量有惊人的差异,由于这些不是本维基本身的一部分,因此本维基作者无法确保其错误得到修复或进行更新。
虽然这些内容仅供参考,因为它们经常被提及,但建议任何关注维基教程的人将第三方教程作为补充,而不推荐学习。
James A. Molloy's Kernel Tutorials - 过去比较流行的教程之一,它有许多 已知问题,并且似乎没有积极更新。
BrokenThorn Operating System Development Series - 与James Molloy系列一样,这是一个非常著名的教程系列,但它非常过时,有大量尚未纠正的已知缺陷。
Bran's Kernel Tutorial - 这是一个非常过时,但仍然经常被引用的教程,来自现已奄奄一息的"Bona Fide OS Development"网站。 像JAM和BrokenThorn一样,代码示例也有许多 已知问题,并且许多材料早已过时。
How to write a simple operating system by Mike Saunders - 这是MikeOS项目的起点,这是一个用汇编语言编写的x86实模式系统。并重点介绍了为MikeOS开发所需的各个方面。
FlingOS Getting Started video series - 第三方系列视频教程,提供编写第一个操作系统的实际入门知识(针对x86,ASM、C和C#各提供完整示例)
The Little OS Book - 托管在GitHub上的第三方OS演示。经过几次更新,并且在代码库中列出了已知未修复的Bug。
Writing a Simple Operating System — From Scratch (PDF) - 2010年的教程,基于英国伯明翰大学一个班操作系统的课程材料,由Nicholas Blundell博士,原课程讲师编写。 该教程是作为补充材料编写的,供学生在课程前进行复习,根据Blundell的说法,并非旨在替代,而是作为Minix项目等出色工作的垫脚石。
So, You Want to Write an Operating System and Climbing the Kernel Mountain - 从2002年开始,OS新闻网站发布了一系列现在已经过时的文章,这些是许多老开发人员对OS开发的介绍。 它们写得很好,但对细节只有粗略的覆盖,而且今天主要只有历史价值。 放在这里仅仅是因为它们在论坛的许多旧帖子中被引用。 请注意,作者后来写了一篇后续,在这篇文章中,他反对开发新的内核。
Xv6与此列表中的大多数教程不同,这是一个功能齐全但简单的操作系统。 Xv6是经典的丹尼斯·里奇 (Dennis Richie) 和肯·汤普森 (Ken Thompson) 的UNIX V6的现代化版本,以ANSI C为x86保护模式编写,保留了原始的UNIX简单性哲学。
基础知识
GDT Tutorial - 关于GDT的指南
Interrupts tutorial - 如何用C设置中断
Creating A Shell - 关于如何编写Shell的教程
Going Further on x86 - 本指南将涵盖内核内部的基础知识
DEMO - 关于'386 (及以上) 和PC平台的一些基础知识的代码和散文教程,作为汇编语言 演示
内存管理
Setting Up Paging - 本教程介绍如何设置和维护启用了分页的系统
Setting Up Paging With PAE - 如上,但启用了PAE
Brendan's Memory Management Guide - 解释基本概念的内存管理指南
Writing a memory manager - 关于如何在计算机中处理RAM的教程。
Writing A Page Frame Allocator - 如何编写一个简单的页面帧分配器
进程和线程
Brendan's Multi-tasking Tutorial - 内核空间多任务教程。
Cooperative Multitasking - 如何创建内核空间多任务系统
Getting to User Mode- 如何将上下文切换到用户模式。
图形和视频
Drawing In Protected Mode - 基础知识,如何绘制像素。
Double Buffering - 一种防止Artifacts(译者注:指计算机合成图中的不自然之处)的简便方法。
PC Screen Font - 以位图字体显示文本。
Scalable Screen Font - 用矢量字体显示文本。
Loading Icons - 解码图像文件以显示图标。
引导
Bootable Disk - 解释如何创建可启动磁盘 (U盘) 映像的教程
Bootable CD - 介绍如何创建可引导CD的教程
Bootable El-Torito CD with GRUB Legacy - 说明如何创建可引导的GRUB CD的教程
Rolling Your Own Bootloader - 描述编写引导加载程序时要采取的步骤。
Writing a bootloader - 关于创建引导加载程序的基本教程
Writing a bootloader for UEFI - 有关使用UEFI创建引导加载程序的基本教程
Writing GRUB Modules - 编写将自定义功能添加到GRUB的模块的教程
构建
Makefile - 如何使用Makefile的指导性演示
OS Specific Toolchain - GCC和Binutils适应平台的指南
CMake Build System - 本指南演示了如何调整KitWare的CMake构建系统来构建操作系统。
VSCode for Debugging - 设置VSCode以调试内核。
编译器
GCC Cross-Compiler - 帮助构建针对不同平台的GCC的指南
GDC Cross-Compiler - 与上一个相同,但针对D编程语言的。
可执行文件格式
ELF Tutorial - 详细介绍加载ELF可执行文件过程的指南。
Manually Creating an ELF Executable - 这本指南演示了ELF二进制文件是如何工作的,以及如何仅使用十六进制编辑器从头开始构建一个。
移植软件
Porting Newlib - 将通用C库移植到另一个操作系统的指南
Using Libsupc++ - 关于移植libsupc++以更好地利用C++功能的指南
Porting Python - 关于将python移植到另一个操作系统的指南