2016-05-14 27 views
0

私はOSの概念を学んでいます。 ASMにシンプルなブートローダを作成し、Cでループしているカーネルファイルを作成しました。私はそれらをコンパイルして動作させています。OSを使い始めるための独自のライブラリの作成方法は?

私はCで書かれたカーネルを使ってテキストを印刷する必要があります。私は、OSの開発中に標準ライブラリ関数の使用を省略しなければならないことを学びました。では、どうすれば自分のライブラリを作成できますか?私は、標準的なヘッダーファイルを含めずにテキストをスクリーンに印刷することを意味します。どうやってやるの?インラインアセンブリやその他の方法を使用する必要がありますか?

私の質問は、どのようにC言語が標準ライブラリなしでハードウェアとやりとりできるかです。

+2

単純な答え:直接ハードウェアに話しによります。他の答えは広すぎるでしょう –

+0

それは答えではありませんが、私の質問 – user3718000

+1

それはまさに答えです。マニュアルを入手し、それに応じて必要なハードウェアへのアクセスを開始します。 –

答えて

2

私は15年前と同じことをしています:)、HALの概念(ハードウェア抽象化層)に基づいて、独自のカーネル関数を使用する必要があります。 HALベースのモジュール、たとえばスクリーン出力ドライバを作成します。このドライバは、あなた自身のカスタムOSと接触している側と、あなたの非常に特定のハードウェアと接触している側の2つの面で構築する必要があります。したがって、ハードウェアを変更した瞬間にOSがこの変更の影響を受けることはありません。これは(正式な)インターフェイスと呼ばれます。ソフトウェアパターンの概念です。 よく見えます。擬似コードの例としては非常にのinterstingプロジェクト:)

です:

// 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