我正在學習操作系統概念。我在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
這正是答案。你拿文件,並開始相應地訪問你想要的硬件。 –