Linuxカーネルは、実行しているプラ​​ットフォームに関係なくどのように機能しますか?

Linuxカーネルは、実行しているプラ​​ットフォームに関係なくどのように機能しますか?

ここで私が特に興味を持っているのは、基本的なハードウェアに関係なく、Linuxカーネルが他のすべてのPCで動作する方法です。

あるいは、通常、PCのハードウェア構成に関係なく、すべてのカーネル(MicrosoftのNTカーネル、Mac OS、およびLinux)がPCでどのように機能するかです。

私の疑いを説明するシナリオは次のとおりです。 PC-2と比較して、PC-1はBluetooth、キーボード、Wi-Fi、その他の構成が異なり、他のメーカーによって開発されました。これらすべてのハードウェアが正しく機能するには、カーネルにこのハードウェアを有効にするハードウェア固有のコードが必要です。カーネルにデバイスドライバ層があると思いますが、このハードウェアを有効にするにはどこで行う必要がありますか?それとも別の場所からデバイス固有のファームウェアをロードするのですか?カーネル内のハードウェア固有のコードは正確にどこにありますか?そして疑問を解消している間、HAL、BSPに会いました。これらは何であり、これらのレイヤーはカーネルのどこにありますか?

ベストアンサー1

ここで特に気になるのは、基本的なハードウェアに関係なく、Linuxカーネルが他のすべてのコンピュータでどのように機能するかです。

まず、カーネルが特定のアーキテクチャに合わせてコンパイルされている限り、すべてのPCで実行されます。汎用コンピュータの場合、アーキテクチャは同じ傾向にありますが(x86_64/amd64)、これは組み込みデバイスを扱うときに変わります。

デバイスツリー

カーネル自体は、コンパイルを除いてハードウェアに拘束されません。私はあなたにデバイスツリー

Linuxカーネルが取得できないハードウェアを処理する方法は、デバイスツリーを介してです。これは、CPU、メモリ、バス、I2C、SPIなどを介して接続されたデバイスについてカーネルに通知します。デバイスレイアウトはハードコードされていませんが、デバイスツリーを介して変更できます。あなたがそれを理解すると、それはすべて本当に魔法です。デバイスツリーはまた、特定のデバイスにどのドライバを使用する必要があるかをパラメータでカーネルに通知しますcompatible

デバイスツリーは、カーネルのコンパイル方法に応じてさまざまな方法で保存できますが、一般的に/proc/device-tree階層は/sys/firmware/devicetree/base

USBデバイスと同じ場合、これはすべてUSBドライバによって処理されます。カーネルにはキーボードやマウスなどを制御するための基本コードがあります。一部のベンダーはカスタムドライバを持ち、デバイスに付属しています。

基準寸法

ドライバの場合、Linuxカーネルは次のプログラムを使用します。カーネルモジュール。すべてのモジュールは以下にあります/lib/modules。モジュールには、ロード可能モジュールと組み込みモジュールの2種類があります。このコマンドを使用すると、ロードされたすべてのモジュールを表示できますlsmod。カーネルがデバイスツリーでデバイスを見つけたり、デバイスを周辺機器に接続したりしても、デバイスにロードできるモジュールがあることを確認し、そのモジュールがデバイスのドライバになります。

ロード可能なモジュールの利点は、カーネルイメージをより小さく保つことです。これらのモジュールは別々にコンパイルできます。組み込みモジュールはカーネルでコンパイルされ、実際の画像サイズが増えます。カーネルの実行中にモジュールをコンパイルしてカーネルにロードすることもできますが、これはまったく異なるトピックです。

ブラジル

ベンダーがプロセッサや接続ハードウェアを含む独自のハードウェアの特定のモジュールとコアを提供している場合は、ボードサポートパッケージ(BSP)を受け取ります。ベンダーが既存のモジュールを変更したり、カーネルと共にカスタムモジュールを提供したりすることがあります。一部のベンダーは、カスタムパッケージ全体がBSPになるようにカーネル自体を変更します。組み込みの世界では、このようなことが常に起こります。

する

Hardware Abstraction Layer(HAL)はBSPと同義語です。 Linuxの世界ではあまり使われていませんが、マイクロコントローラに入るとかなり使われます。デフォルトでは、HALはハードウェアにアクセスするための一連のライブラリで、ハードウェアとのインターフェースをより簡単にします。たとえば、WiFiチップを使用すると、AP接続、ネットワーク検索、アクセスポイントの作成などの基本的なルーチンが提供されます。そういう意味ではドライバーと少し似ています。

おすすめ記事