0

1 つの組み込み Linux カーネルで 2 つの同様のハードウェア プラットフォームをサポートしたいと考えています。カーネルは複数のstruct machine_desc構造をサポートしていますか? この構造体のインスタンスは、通常、ボードの C 定義ファイルでMACHINE_STARTおよびマクロを使用して定義されます。MACHINE_END

MACH_TYPEブートローダーからカーネルに渡すメカニズムがあるため、カーネルが複数のマシンをサポートできることは理にかなっているようです。何か特別なことをする必要がありますか?

4

1 に答える 1

0

カーネル コード (バージョン 2.6.33) を調べてみたところ、ARM アーキテクチャは同じカーネルで複数のマシンをサポートしています。ただし、他のアーキテクチャがそうするかどうかはわかりません。仕組みは次のとおりです

  1. カーネルがサポートするボード タイプごとに、対応するCONFIG_MACH_TYPE_*値を構成ファイルに設定する必要があります。ビルドされると、カーネルはソースに含まれるマッハ タイプのバージョンに基づいてすべてのマシン マクロを生成します。マシン定義のソース コードもカーネルにコンパイルされます。
  2. r1ブートローダが開始されると、カーネルを開始する前に、対応するマシン タイプ番号 (つまり、マッハ タイプの最後の列の番号) を登録する必要があります。
  3. 初期化中、カーネルはマシン タイプ番号をレジスタr1からに渡し、__lookup_machine_typeマシン定義を見つけてボードを初期化します。
于 2012-08-17T14:58:31.817 に答える