ARM SoC はなぜカーネルで扱うのが難しいように見えるのでしょうか?

ARM SoC はなぜカーネルで扱うのが難しいように見えるのでしょうか?

たとえば、x64 システムに Linux ディストリビューションをインストールした場合、ストレージ ドライブを取り外して別の x64 マシンに挿入し、グラフィック ドライバーなどの HL ドライバーをいくつかインストールするだけで、問題なく実行できる可能性が高くなります。

ARM システム、特に ARM SoC に関しては、あらゆる種類のスマートフォンと同様に、まったく異なる状況があります。すべてのスマートフォンに、同じ OS (たとえば、OEM Android ディストリビューション) の異なるビルドが存在します。

私の質問は、それはなぜかということです。

標準化されたアーキテクチャを持つ PC とは異なり、SoC チップとアーキテクチャは数多くあることは理解しています。しかし、デバイス ツリーを念頭に置いて、デバイス ツリーをハードウェア記述として、ブートローダーとともに ROM チップに配置し、少なくとも定義された制限内では、ハードウェア仕様とは独立して Linux OS を構築する方法がないのはなぜかと自問します。

答え1

ハードウェア記述としてのデバイス ツリーを、ブートローダーと一緒に ROM チップ上に配置して、少なくとも定義された制限内で、ハードウェア仕様から独立して Linux OS を構築する方法がなぜないのか、と自問します。

答え: 安さです。誰も ROM チップにお金を払いたくありません。SoC にはブート ROM が内蔵されていますが、デバイス ツリーは SoC が内蔵されている回路によって異なるため、これは役に立ちません。これを機能させるには、x86 ボードに必要な別の「BIOS チップ」が必要になります。

ほとんどの ARM ボードが起動する SD カードを BIOS チップとして扱うことで、これを何とか動作させることができます。U-Boot とデバイス ツリーをそこに配置して、U-Boot に USB ドライブからカーネルをロードさせるだけです。そうすれば、USB ドライブは ARM ボード間で (かなり) 移植可能になります。

最適化の点では、ARM 用に汎用的にコンパイルできますが、特定のプロセッサをターゲットにすると、(x86_64 よりもはるかに) 実際に効果があります。

関連情報