カーネルアーキテクチャとOSアーキテクチャの違いは何ですか?バイナリをコンパイルするアーキテクチャを理解しようとするときに、これらのどれが関連していますか?
私が読んだことから、一部のディストリビューションでは32ビットOSを使用しているにもかかわらず、64ビットカーネルをインストールすることが可能です。
uname -i
は何を印刷しますか、カーネルアーキテクチャまたはOSアーキテクチャですか? dpkg --print-architecture
とArch
はどうですか?
カーネルアーキテクチャは、カーネルの「優先」アーキテクチャです。これは、uname -m
とArch
(同等)によって提供されるアーキテクチャです。たとえば、64ビットのx86互換CPUで実行されている64ビットカーネルでは、x86_64
になります。
一部のプラットフォームでは、カーネルは複数のアーキテクチャのバイナリを実行できます。たとえば、64ビットのx86カーネルは32ビットのバイナリを実行することもできます(2つのABI、「古い」i386
/i686
ABIとx32
)。このようなバイナリを実行するときに32ビットモードで実行するようにCPUに指示し、32ビットシステムコールとそのネイティブ64ビットシステムコール間の変換を提供することで、これをサポートします。ユーザーランドエミュレーションviaQEMUを追加すると、カーネルはQEMUでサポートされている任意のアーキテクチャーのバイナリーを実行することもできます。たとえば、armhf
64ビットIntelCPUの場合。バイナリ自体に加えて、必要な翻訳レイヤーが何であれ、バイナリと同じアーキテクチャの適切なライブラリも必要になります。これは、マルチアーチが役立つものであり、マルチアーチの前は、/lib32
//lib64
分業です。 (そして、2つまたは3つのABIを扱うことが多いと思う場合は、MIPSシステムを見てください...)
このコンテキストでは、「オペレーティングシステムアーキテクチャ」は多くのことを意味する可能性があります。システムのインストール時に使用されるアーキテクチャ、またはシステム内の大多数のバイナリによって使用されるアーキテクチャなどです。Debian派生物では、次のアーキテクチャです。 dpkg --print-architecture
で指定されたインストール済みのdpkg
パッケージ。
バイナリを構築する場合、適切なライブラリもあると仮定すると、ターゲットにするのが最も簡単なアーキテクチャは、コンパイラのデフォルトのターゲットアーキテクチャです。通常、これは、意味が何であれ、オペレーティングシステムアーキテクチャになります。ここでは、カーネルアーキテクチャは特に重要ではありません。 Debian派生物では、クロスコンパイルをカバーするようにマルチアーチを拡張することは、サポートされているDebianアーキテクチャのバイナリを任意のDebianシステムで簡単に構築できることを意味します。ただし、これはかなり具体的なユースケースであり、クロスコンパイルの制約についてある程度の知識が必要です。したがって、デフォルトのアーキテクチャに固執します...
uname -i
は、何かを出力するときに、カーネルアーキテクチャのバリアントを出力します。 name -p -iは不明です それについて詳しく説明します。