2016-05-14 52 views
0

我正在学习操作系统概念。我在ASM中创建了一个简单的引导装载程序,并在C中创建了一个循环内核文件。如何创建我自己的库以开始使用操作系统?

现在我需要使用C语言内核打印一些文本。我了解到,在开发OS时,必须省略标准库函数的使用。那么我怎样才能创建自己的图书馆。我的意思是在不包含任何标准头文件的情况下打印文本到屏幕。我怎样才能做到这一点?我应该使用内联汇编还是其他方法?

让它变得如此简单,我的问题是,如果没有标准库,C语言如何与硬件交互?

+2

答案很简单:通过直接谈话的硬件。其他答案将过于广泛 –

+0

这不是一个答案,但我的问题 – user3718000

+1

这正是答案。你拿文件,并开始相应地访问你想要的硬件。 –

回答

2

我在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); 
    } 
} 
+0

所以在C中编写我自己的驱动程序。如果没有标准库,我该如何实现它。在C中使用内联汇编? – user3718000

+0

你应该选择那些标准库的一个子集,只有那些没有依赖于外部代码的库或其他为特定操作系统设计的库。 – christian

相关问题