FreeBSDカーネル構成ファイルと物理デバイスの関係を理解する

FreeBSDカーネル構成ファイルと物理デバイスの関係を理解する

私が知っている限り、FreeBSDのカーネルはテキストファイルで構成されています。各カーネル構成エントリは1行にあります。多くの項目には、ハッシュマークで区切られたコメントもあります。一般的な構成。ファイルは /usr/src/sys/<'arch'>/conf/GENERIC にあります。これをコピーしてカスタムカーネルに変更できます。

例:

    device      ehci            # EHCI PCI->USB interface (USB 2.0)

しかし、これは実際のデバイスとどのような関係がありますか? USBフラッシュドライブを挿入すると仮定すると、USBデバイスはハンドシェイクまたは一種の認識を実行しますか?また、ドライバがコアドライバではなくロード可能なカーネルモジュールである場合、カーネルが要求したドライバを探しますか?

付随的な質問で。 KERNCONF = ''コマンドはmake(1)にカーネル名だけを伝えます。

答え1

identカーネル名はカーネルconfファイルの行として定義されます。 KERNCONF変数は、使用するkernelconfファイルを定義します。

FreeBSDアーキテクチャマニュアルの「デバイスの検索と接続」セクションでは、USBデバイスを検出する方法について説明します。 https://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/usb-devprobe.html

答え2

テキストファイルはカーネルに組み込まれたもののみを定義します。そこに入れていないものは通常、ロード可能なカーネルモジュールにコンパイルされます。

はい、起動中またはカーネルモジュールをkldロードした後、ドライバの「プローブ」ルーチンが実行されます。このルーチンは、ドライバが特定のハードウェアをサポートするかどうかを決定します。その場合、「接続」ドライバ機能が実行され、実際にドライバインスタンスをデバイスに接続します。 FreeBSDは通常カーネルモジュールを自動的にロードしようとしないため、ドライバがカーネルに組み込まれていない場合は手動でロードするか(kldload)、rcスクリプトを使用してロードするか(kld_list rc変数を使用)、ブートローダを使用してプリロードします。 (/boot/loader.conf を編集して)。

関連情報