我需要构建一个操作系统,这是一个非常小巧且基本的操作系统,实际上功能最少,用C编码。
可能是一个CUI OS,它执行一些内存管理,并至少具有一个文本编辑器和一个计算器,它只是关于如何制作对硬件进行完全直接控制的代码的实验。
我仍然需要一个接口(interface),它将需要输入/输出函数,例如printf(&args),scanf(&args)。现在我的基本问题是我应该使用现有的 header 还是从头开始进行编码,为什么?
我非常感谢你们的帮助。
最佳答案
首先,您无法链接到libc
中的任何内容……您将不得不从头开始编写所有内容。
现在,我自己已经在微内核上工作了,我将不再使用stdio
附带的实际libc
header ,因为它们会杂乱很多与您的操作系统无关的额外信息,或者会由于以下原因而产生编译器错误:缺失的定义等。我将要做的是使这些标准函数的函数签名保持相同...因此,最后您将为您的OS创建一个名为stdio.h
的文件,但这将是一个非常精简的头文件具有满足您需求的基本最低要求,并且仅具有所需的标准I/O功能以及正确的标准签名。
请记住,在后端,即stdio.c
文件中,您将不得不将这些功能指向自定义的控制台驱动程序或用于显示的其他某种类型的字符驱动器。要么,要么就可以将它们用作其他一些内核级显示打印例程的包装器。您还将要确保即使您可以在其他OS代码模块中使用#include <stdio.h>
指令来访问这些打印功能,也不要针对libc
进行链接。这可以使用gcc -ffreestanding
完成。
关于可以在为内核编码时使用stdio吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6386852/