ARM LinuxシステムのPCI列挙はBIOSまたはLinuxで実行されますか? Linuxを起動する前にPCIeに対して何もしないとどうなりますか?

ARM LinuxシステムのPCI列挙はBIOSまたはLinuxで実行されますか? Linuxを起動する前にPCIeに対して何もしないとどうなりますか?

x86システムのBIOSがPCI列挙(バスとデバイス、機能の検索)を実行していることをどこかで読みました。 (今日は韓国語のWeb文書でもう一度見ました。https://melonicedlatte.com/computerarchitecture/2019/11/27/234300.html)。 arm64ベースのシステムはどうですか?私はで見つけたhttps://patchwork.kernel.org/project/linux-pci/patch/[Eメール保護]/arm64 は PCIe の初期化に UEFI を使用し、u-boot が arm64 の PCIe をサポートしていることが確認されました。もしそうなら、UEFIファームウェアを使用せずにu-bootを使用し、u-boot中にPCIe関連の操作を実行しないと、OS(linux)は列挙を実行しますか? (もちろん、私はPCIとPCIeコントローラ用にLinuxを設定しました。)

ベストアンサー1

ここで解くべき内容がたくさんあります。

PCI列挙

PCIはいいえPCIeと同じです。残りの質問はPCIeに関するものであり、PCIではなくPCIeに関するものであると仮定します。

厳密に言えば、PCIeには列挙型はありません。バスではなく、ポイントツーポイントリンクのネットワークなので、(コンピュータネットワーキングでは、次のように呼び出すことができます。ネットワークスイッチ)。ネットワーク内のどのポイントでも、ネットワーク全体の機能を知る必要はありません。いいえバスだからないバス列挙

オペレーティングシステムはどのデバイスがあるかを知る必要があります。これは、すべてのダウンストリーム接続デバイスのルートコンプレックスを照会することによって実行され、各デバイス自体はすべてのダウンストリーム接続デバイスのブリッジとして機能します。

これはすべてオペレーティングシステムによって実行できます。オペレーティングシステムは(通常PCIとは異なり)損傷を受けることなくいつでも実行できるため、オペレーティングシステム自体でこれを行います。次に、実際に見つかったハードウェアを設定し、メモリマッピング領域を提供するなどの作業を実行します。Linuxはこの列挙を実行します。

1つの例外があります。起動に必要なデバイス(ネットワークインターフェイス、NVMe、グラフィックコントローラなど)は、オペレーティングシステムを実行するためにファームウェアに必要なデバイスです。明らかに、これらを最初に見つける必要があります。だから:したがって、マザーボードのファームウェアもこれを行うことができます。

これは CPU アーキテクチャとは関係ありません。 x86 を使用しても arm を使用しても関係なく実行できます。一般に、「組み込み」と呼ばれる一部のデバイスでは、ファームウェアを直接作成または設定することができるため、どのデバイスがどこに行くのかを調べようとする必要はありません。それでもデバイスと通信し、デバイスを設定する必要があります。したがって、同じ話です。 「ネットワーク全体」列挙ではなく、事前設定されたデバイスの列挙です。

x86システムでBIOSで完了

「BIOS」はシステムファームウェア用のAPIです。実際のファームウェアはいくつかの初期化を実行できますが、「BIOS」部分はPCIeより前のバージョンとは何の関係もありません。

「UEFI」は別のAPIです。より現代的です。

arm64 は PCIe 初期化に UEFI を使用します。

正確には何ですか?はい「PCIe初期化」?ここでは非常に正確でなければなりません。

繰り返しますが、ARM64は、PCIeを保持するかどうか、またはファームウェアがPCIeと対話する方法とは関係ありません。ただ違うだけです。 ARM、PowerPC、またはCPUなど、非常にPCに似たコンピュータアーキテクチャとファームウェアを持つことも、内部にx86を含む非常にPC以外のアーキテクチャを持つこともできます。

また、UEFIは次のこともできます。何もない;名前は文字通り「拡張可能なファームウェアインターフェース」を意味します。 UEFIモジュールは完全なWebサーバーを提供します!これら講義TCP / IPスタックを提供するには追加のUEFIモジュールが必要です。これらのモジュールには、ネットワークインターフェイスを見つけて通信するためにネットワークインターフェイスドライバといくつかのPCIe列挙が必要です。
ただし、これらのコンテンツなしでUEFIを構築することもでき、PCIe列挙は必要ありません。

しかし、どういうわけか、どこかでソフトウェアブートローダ/OSをロードする必要があります。多くのコンピュータでは、このコンテンツを含むストレージデバイスはPCIeを介してのみアクセスできます。だから何らかの設定が必要です。

組み込みx86 SoCや一部のARM SoCなどの他のシステムでは、ブートローダはいくつかのeMMCにあり、CPUにある程度直接接続されています。それはすべてコンピュータのデザインに依存します!

CPU アーキテクチャは周辺機器インタフェースの設計とほとんど関係がありません。これらは単なるものです。

たとえば、PlayStation 4(Playstation 4)はx86でPCIeを持っていますが、PCではなくBIOSを持っていないため、ハードウェアにもPC互換タイマーや割り込みコントローラがありません。

その後、UEFIファームウェアを使用せずにu-bootを使用すると、

UEFインターフェイス名が示すように、UEFIは単にファームウェアによって提供される(または提供されていない)ソフトウェアAPIです。これは、ハードウェア内部で実行する作業とほとんど関係がありません。

おすすめ記事