在编写内核时可以使用stdio吗?

Kar*_*kya 5 c kernel

我需要构建一个操作系统,一个非常小的基本操作系统,实际上功能最少,用C编码.

可能是一个CUI操作系统,它做一些内存管理,至少有一个文本编辑器和一个计算器,它只是一个关于如何制作一个完全和直接控制你的硬件的代码的实验.

我仍然需要一个接口,需要输入/输出功能,如printf(&args),scanf(&args).现在我的基本问题是我应该使用现有的标题还是实际从头开始编码,为什么会这样?

我非常感谢你们的帮助和帮助.

Jas*_*son 3

首先,你不能链接到任何东西libc......你将不得不从头开始编写所有代码。

现在,我自己已经开发了一个微内核,我不会使用stdio附带的实际标头libc,因为它们会混乱很多额外的信息,这些信息要么与您的操作系统无关,要么由于缺少而导致编译器错误我要做的就是保持这些标准函数的函数签名相同......所以最终你会有一个stdio.h为你的操作系统调用的文件,但它将是一个非常精简的头文件,其中包含基本的满足您需求的最低要求,并且仅具有您需要的标准 I/O 功能以及正确的标准签名。

请记住,在后端,即在您的stdio.c文件中,您必须将这些函数指向自定义控制台驱动程序或用于显示的其他类型的字符驱动器。或者,您也可以将它们用作其他一些内核级显示打印例程的包装器。您还需要确保即使您可能#include <stdio.h>在其他操作系统代码模块中使用指令来访问这些打印功能,您也不会链接到libc. 这可以使用 来完成gcc -ffreestanding

  • 哈哈,当然,没问题,不过说实话,我认为您会从 [OSdev.org](http://forum.osdev.org/) 的人们那里得到更多帮助。编写内核,尤其是当您接触汇编语言时,可能非常困难,尤其是当您启动双重错误和三重错误时(至少您可以在异常处理程序中捕获双重错误)。我绝对建议使用 QEMU 或 BOCHS 等模拟器,并非常熟悉它们的调试器(尤其是 BOCHS 调试器)。还要准备好花大量时间阅读英特尔处理器开发人员手册。 (2认同)