これは常にLinuxが他のシステムのデバイスドライバをどのように処理するのか疑問に思いました。これをコンピュータAに接続し、完全に異なる仕様のコンピュータBに移動するとします。また、永久インストールをして別のコンピュータに移動すると、ドライバも影響を受けますか?もちろん、カーネルが起動時に自己調整されるかどうかは、カスタムコンパイルされたカーネルの範囲外です。
答え1
Linuxドライバはカーネルモジュールです。
これは、カーネルの大きなバイナリ(したがって組み込み)の一部であるか、カーネルの起動後にロードできることを意味します。
カーネルに実際に組み込む必要がある唯一のドライバは、ルートファイルシステムにアクセスするドライバです。それでも、最初のRAMディスクに必要なものがすべてあれば、そのようなドライバなしで利用可能なシステムを持つことができます。 (ブートローダはカーネルバイナリと初期RAMディスクをロードする役割を果たし、ブートローダはカーネルの起動時に初期RAMディスクがどこにあるかをカーネルに伝えます。)
したがって、いくつかのことが発生する可能性があります。すべてはあなた次第です。
必要なドライバをすべて組み込んでカーネルを構築できます。その後、適切なファイルまたは
/dev
類似mknod
のファイルを作成すると正常に動作します。これがUNIXと初期Linuxが動作する方法です。もちろん、他のシステムでカーネル+初期RAMディスクを実行すると、一部のデバイスが機能しなくなる可能性があり、ハードドライブコントローラがその1つであると正常に起動できません。ユーザー空間プロセスにドライバーをロードさせることができます。カーネル初期化タスクの1つは、仮想ファイル
proc
システムがsys
ACPIバスとPCIバスにアクセスする準備をすることです。これをさらに調べて、現在のハードウェアを確認できます。担当実行可能ファイルとサポートファイルは、初期RAMディスクに配置できます。それがまさにudev
それですsystemd
。従来のLinux initシステムでは、udev
バックグラウンドで生成された最初のサービスの1つであり、ACPIとすべてのバスを通過し、/dev
動的にノードを作成します。最新のsystemd
システムにはの機能がudev
含まれており、同じことを行います。
2番目のケースは、通常、どのくらいのLinuxカーネル+ユーザーゾーンツールがインストールされているかです。 Linuxは起動するたびにほぼ再起動し、Windowsなどのレジストリなどのシステムのいずれも参照しません。
正直なところ、上記は私が直接知らないので、いくつかの詳細が欠けているかもしれませんが、これが基本的なポイントです。私が読んだところ、カーネル自体は起動中にモジュールをロードできますが、その方法と理由はわかりません。
答え2
起動するたびに従うハードウェアやそのドライバのリストを作成するWindowsなどの他のオペレーティングシステムとは異なり、多くのLinuxディストリビューションにはほとんどのハードウェア構成をサポートするカーネルモジュールが含まれています。使いやすさ。
これにより、含まれているすべてのドライバ(カーネルモジュール)が必要なドライバだけでなくハードウェアも検索し、ブートプロセスが確実に長くなります。 Linuxカーネルの設計により、プロセス全体は通常、事前設定されたシステムを実行するよりも遅くなりませんが、カスタムLinuxインストールはより速く起動できます。