kbuildはデバイスツリーとどのように比較されますか?

kbuildはデバイスツリーとどのように比較されますか?

나는 KConfig가 Linux 커널 컴파일 시작 시 C 전처리기를 조정하는 데 사용된다는 것을 알고 있습니다. 장치 트리는 런타임에 하드웨어에 대한 설명을 컴파일된 커널에 제공하는 데 사용됩니다.

이 두 가지 구성 가능한 기능은 어떻게 겹치나요?

たとえば、両方とも内部 CPU 詳細と外部周辺機器ドライバに関する情報を提供します。デバイスツリーに記載されているすべての周辺デバイスは、.configファイルに以前に宣言されたドライバをインポートする必要があると思います。また、ドライバが組み込みドライバにコンパイルされている場合は、再びモジュールにロードされないと推測できます。しかし、もっと詳しくは何ですか?

ベストアンサー1

カーネル構成はコンパイル時に指定できます。〜これカーネルソースツリーに含まれるすべての標準ドライバを含みます。どのようにこれらのドライバは組み込みまたはロード可能なモジュールとして含まれており、一部のドライバも含まれています。その他のパラメータカーネルをコンパイルするときに使用する最適化やその他の選択肢に関連します(たとえば、特定のCPUモデルの最適化、可能な一般的な最適化、またはSpectre / Meltdownセキュリティの軽減などの特定の機能がデフォルトで有効になっているかどうか)。

コンパイル時のカーネル構成が十分に一般的に設定されている場合は、同じプロセッサアーキテクチャ内のさまざまなシステムで同じカーネルを使用できます。

一方、デバイスツリーはカーネルが現在実行されている物理ハードウェアに関連付けられています。組み込みシステムや自動検出技術を持たない他のシステム(ACPIやPCI(e)など)の場合は、デバイスツリーで次のように指定します。正確なI/Oまたはメモリアドレス特定のハードウェアコンポーネントは、ドライバが見つけて使用できるように、次の場所にあります。

デバイスツリーに特定のハードウェアコンポーネントの存在とそのアクセス方法が記載されていますが、必要なドライバがコンパイル時に無効になっている場合は、後でドライバモジュールを別途追加しない限り、カーネルはそれを使用できません。あるいは、カーネルがロード可能なモジュールをサポートせずに完全にモノリシック構成にコンパイルされている場合、そのデバイスのドライバがカーネルコンパイルに含まれていない限り、カーネルは特定のデバイスをまったく使用できません。

ハードウェアコンポーネントのドライバがカーネル構成(組み込みまたはロード可能モジュール)に含まれているがデバイスツリーにそれに関する情報がない場合(ハードウェアアーキテクチャに標準検出メカニズムが含まれていない場合)、カーネルハードウェアコンポーネントの存在を認識するできません。たとえば、デバイスツリーでディスプレイコントローラのフレームバッファ領域を汎用RAMとして誤って指定した場合、ディスプレイコントローラのメインフレームバッファ領域に格納されているすべてのバイトを乱雑なピクセル「ノイズ」としてランダムに表示することがあります。あるいは、ディスプレイコントローラが動作を開始するために特定の初期化が必要な場合、出力が全く出ないことがある。

つまり、デバイスツリーの目的は、システムのさまざまなハードウェア機能がプロセッサのアドレス空間にある場所をカーネルに伝えることです。これにより、カーネルが正しいドライバを正しい物理ハードウェアに指すようにし、カーネルが次のことを実行できるようにします。正しいドライバを正しい物理ハードウェアとして指定してください。カーネルが使用する必要があるアドレス空間の部分を示します。いいえ通常のRAMとしてお試しください。

おすすめ記事