私が知っている限り、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 を編集して)。