我正在学习操作系统概念。我在ASM中创建了一个简单的引导装载程序,并在C中创建了一个循环内核文件。如何创建我自己的库以开始使用操作系统?
现在我需要使用C语言内核打印一些文本。我了解到,在开发OS时,必须省略标准库函数的使用。那么我怎样才能创建自己的图书馆。我的意思是在不包含任何标准头文件的情况下打印文本到屏幕。我怎样才能做到这一点?我应该使用内联汇编还是其他方法?
让它变得如此简单,我的问题是,如果没有标准库,C语言如何与硬件交互?
我正在学习操作系统概念。我在ASM中创建了一个简单的引导装载程序,并在C中创建了一个循环内核文件。如何创建我自己的库以开始使用操作系统?
现在我需要使用C语言内核打印一些文本。我了解到,在开发OS时,必须省略标准库函数的使用。那么我怎样才能创建自己的图书馆。我的意思是在不包含任何标准头文件的情况下打印文本到屏幕。我怎样才能做到这一点?我应该使用内联汇编还是其他方法?
让它变得如此简单,我的问题是,如果没有标准库,C语言如何与硬件交互?
我在15年前做同样的事情:),你不得不使用你自己的基于HAL概念(硬件抽象层)的内核函数。您构建了一个基于HAL的模块,例如一个屏幕输出驱动程序。这个驱动程序应该建立在两个方面:与您自己的定制操作系统联系的一方,以及与您的特定硬件联系的一方。因此,如果您在任何时候更换硬件,那么您的操作系统不会受到此更改的影响。这被称为(正式):接口。是一个软件模式概念。 好看。是一个非常野趣项目:)
作为一个伪代码示例:
// yourclientprogram.c
include "screendriver.h"
i = new instance of LCDScreenDriver;
i.selectScreen(0);
i.printf("%s","hello");
所以,你的内核文件将看起来像这样:
//screendriver.h
class LCDScreenDriver extends ScreenDriver {
protected function output(data){
...very specific ASM code for your LCD monitor goes here..
...this code is very specific to output a -data- buffer
...and nothing more than this
}
}
class ScreenDriver {
protected function output(data); // a virtual pure function
public function printf(args,...){
dataTobePrinted = ..make your own printf methods...
this.output(dataToBePrinted);
}
}
所以在C中编写我自己的驱动程序。如果没有标准库,我该如何实现它。在C中使用内联汇编? – user3718000
你应该选择那些标准库的一个子集,只有那些没有依赖于外部代码的库或其他为特定操作系统设计的库。 – christian
答案很简单:通过直接谈话的硬件。其他答案将过于广泛 –
这不是一个答案,但我的问题 – user3718000
这正是答案。你拿文件,并开始相应地访问你想要的硬件。 –