組み込みエントリクロスコンパイル、ブートローダー、カーネル、ルートファイルシステムの関係

実際の作業では、チップを入手すると、通常、チップの製造元はクロスコンパイル環境とブートロードを提供しますが、カーネルとルート ファイル システムはニーズに応じて調整する必要があり、最後にアプリケーションを作成する必要があります。

したがって、実際の作業においては、クロスコンパイル環境やブートローダーに力を入れる必要は通常ありません。

カーネルは、チップ、ボード、機能に適応するように調整する必要があります。簡単な例を挙げましょう。Linux システムは、ノートブックの x86 アーキテクチャにも、arm などの他のアーキテクチャにも適応できます。両方が適切であれば、カーネルはカスタマイズされます。は特に肥大化するため、構成するには 1 つのアーキテクチャに適応するだけで済みます。

別の例として、カメラに接続できる必要があるデバイスを開発したい場合は、カーネルにカメラ ドライバーが必要で、ルート ファイル システムに対応するアプリケーションが必要です。そのため、実際の作業ではカーネルやルートファイルシステムに力を入れて作業することが多いです。

したがって、チップレベルの企業であれば、クロスコンパイル環境とブートローダーに重点が置かれ、製品レベルの企業であれば、カーネルとルートファイルシステムに重点が置かれます。

参考文献:

クロスコンパイル、ブートローダー、カーネル、ルートファイルシステムの関係

少し詳しくご紹介しましょう

実際、組み込みシステムの構成は次の 4 つに要約できます。

クロスコンパイル環境、ブートローダー、カーネル、ルート ファイル システム、アプリケーションは最上位層に属し、ルート ファイル システムの一部とみなすこともできます。

1. クロスコンパイル環境

クロスコンパイルとは、あるプラットフォーム上で別のプラットフォーム上で実行可能コードを生成することです。

クロスコンパイルには、クロスコンパイラーとクロスコンパイル ツールチェーンの使用が必要です。

クロスコンパイルを実行するには、対応するクロスコンパイル ツール チェーン (クロス コンパイル ツール チェーン) をホスト プラットフォームにインストールし、このクロスコンパイル ツール チェーンを使用してソース コードをコンパイルし、最終的に実行可能なコードを生成する必要があります。ターゲットプラットフォーム上で。クロスコンパイルの一般的な例は次のとおりです。
1. Windows PC で、ADS (ARM 開発環境) と armcc コンパイラを使用して、ARM CPU 用の実行可能コードをコンパイルします。
2. Linux PC 上で、arm-linux-gcc コンパイラを使用して、Linux ARM プラットフォーム用の実行可能コードをコンパイルします。
3. Windows PC で、cygwin 環境を使用して arm-elf-gcc コンパイラを実行し、ARM CPU 用の実行可能コードをコンパイルします。

2.ブートローダー

この単語は別々に見る必要があります。1 つはボードのブート、開始、開始であり、もう 1 つはカーネルのロード、ロード、ロードです。

これは、ハードウェア リセット後に実行する必要がある最初のプログラムです。主な仕事は、メモリ、タイマーなど、オペレーティング システムが実行される環境を初期化することです。

ARM を例にとると、スタートアップ コードは、割り込みベクタ テーブルの設定、ウォッチドッグのオフ、クロックの初期化、SDRAM の初期化、コードの再配置、メイン関数の実行へのジャンプなど、いくつかの作業を行う必要があります。

したがって、私たち自身が作成した start.s アセンブラとブートロードの主な違いは、実際にはそれほど多くなく、負荷の読み込みです。もちろん、ブートロードには他の多くの機能も含めることができます。

自分でブートローダーを作成することもできますが、必須ではありません。uboot、read boot など、選択できる優れたブートロードが多数あります。

3. カーネル

カーネルについては、あまり言う必要はありません。カーネルのソース コードを完全に読もうとしないでください。数年後には読めなくなるでしょう。さらに詳しく説明する必要がある場合、カーネルは主にリソース管理、プロセスのスケジューリングなどを実行します。ライブラリ関数と同様に、基礎となるドライバーがカーネルに登録され、上位層が中間インターフェイスとして理解することもできます。アプリケーションがカーネルを呼び出します。

4. ルートファイルシステム

Linux カーネルの起動の最後に、ファイル システムにマウントする必要があります。これは Linux の機能です。QT システム、Android システム、および Ubuntu システムの基礎となる層はすべて Linux カーネルです。違いは、それらのカーネルが異なることです。つまり、グラフィカル インターフェイス システム、Android 仮想マシン、Android フレームワーク コードなど、Android システムに関連する一部のコードはすべて、Linux が最終的にマウントされるファイル システム内にあります。

彼は、人々との対話であろうと、プログラムとの対話であろうと、対話の責任者であると理解できます。

おすすめ

転載: blog.csdn.net/freestep96/article/details/126860239
おすすめ