
たとえば、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 よりもはるかに) 実際に効果があります。