TCCBOOTプロジェクトは、ソースコードから直接Linuxカーネルをコンパイルして起動することがブートローダーです。
TCCBOOTは大きいだけで138キロバイト(非圧縮コード)であり、それは、2.4GHzのPentium 4で15秒未満で、典型的なLinuxカーネルをコンパイルして実行することができます。
TCCBOOTはTinyCCコンパイラ、アセンブラ、リンカに基づいています。 TinyCCは、GNU Cコンパイラおよびバイナリユーティリティとの互換性が非常に小さく、簡単なCコンパイラを生成するための実験です。
TCCBOOTブーツTCCBOOTを実行することができます 'bzImageを実行」のLinuxカーネルイメージを実行することができますLinuxカーネルと同じようなので、任意のブートローダー。私はISOLINUXでそれをテストしたが、LILOまたはGRUBがあまりにも動作するはずです。
TCCBOOTは初期RAMディスク(initrdの)に保存されているgzip圧縮されたROMFSのファイルシステムからCまたはアセンブリソースを読み込みます。それは最初TinyCCコマンドライン(TCCの実行ファイルと同じ構文)が含まれているファイル 'ブート/ tccargs'を読み込みます。 TinyCCの呼び出しを出力すべき1の二値画像「カーネル」。この画像は、アドレス0x00100000にロードされます。 TCCBOOTその後、32ビットフラットモード時のアドレス0x00100000にジャンプを行います。これは「のvmlinux 'カーネルイメージのABIと互換性があります。
編集:
TCCBOOTはLinuxだけ2.4.26でテストされました。単純化のTCCBOOTのためのLinuxカーネルからいくつかのバイナリファイルとヘッダを使用しているのでTCCBOOTを構築するためには、最初に2.4.26カーネルをコンパイルする必要があります。 TCCBOOTもTinyCC(TinyCCバージョン0.9.21でテスト)のソースコードを必要とします。あなたが必要なパスを与えるためにMakefileを変更することができます。
例:
「Hello World」のROMFSパーティションが含まれている(initrd.imgを)。あなたは例/ディレクトリからそれを再構築することができます。あなたは「QEMU-tccboot 'スクリプトでQEMU PCエミュレータでそれをテストすることができます。
カーネルのコンパイル:
あなたの詳細については、パッチ 'のlinux-2.4.26-tcc.patchは「TCCBOOTたLinuxカーネル構築するために必要な修正を与える(注:それは、独自のメイクファイルとカーネルを構築するsuffisantされていない - 私は試したことがありません)。対応するカーネルの設定は、ファイルのlinux-2.4.26-config設定です。パッチは、次の理由のために必要です:
- サポートされていない組立指示:.rept、.ENDR、.subsection
- アセンブリのソースに必要な 'の#define __ASSEMBLY__'
- 静的変数は、インラインアセンブリコードから見ることができません
- 'と入力/左辺値の問題? : '
- なしlong longのビットフィールド
- 「整列」フィールドだけのために、全体の構造体のためにサポートされていない属性
- obscurプリプロセッサのバグ
これらの問題のいくつかは、簡単に修正することができたが、私は今のが面倒です。それはTinyCC / TCCBOOTによって生成されたカーネル内の多くのバグが残っていることを確認していますが、少なくともそれはシェルを起動し、起動することができます。
ソフトウェアの詳細:
コメントが見つかりません