2016-05-14 55 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

相關問題