1

一部の initcall レベル (late_initcall など) を使用して、ブートの一部としてドライバーをロードしています。モジュール init の一部として、デバイス ノードを自動的に作成するために udev に登録します(t|g)。問題は、ブートプロセスのその時点で udev デーモンが実行されているかどうかをモジュールがどのように知ることができるかです。そうでない場合、ユーザー空間はデバイス ファイルを使用できず、ドライバーとデバイスが役に立たなくなります。

ありがとう。

4

1 に答える 1

3

まずudev、デバイス ノードを作成するメカニズムの 1 つにすぎません。コードはカーネル デバイス モデルでデバイスを作成する必要があり、その後、何かがデバイスのデバイス ノードを作成し/devます。単純なシェル スクリプトである可能性がある組み込みシステム。

タイミングに関する限り、デバイスがブートの早い段階で作成されている場合、udev が起動して実行されると、udev とカーネルが作成イベントの再生を処理します。これは、udev スキャンと各デバイスのファイルへの/sys書き込みによって発生します。これは、カーネルに作成イベントを送信するように指示します。これは、udev が netlink 経由で受信します (または を使用できます)。"add"ueventuevent_helper

また、udev がなくても/sys、メジャー番号とマイナー番号を照会し、デバイス ノードを手動で作成できる場所にデバイスが表示されます。

于 2012-08-19T10:10:46.323 に答える