一部の initcall レベル (late_initcall など) を使用して、ブートの一部としてドライバーをロードしています。モジュール init の一部として、デバイス ノードを自動的に作成するために udev に登録します(t|g)。問題は、ブートプロセスのその時点で udev デーモンが実行されているかどうかをモジュールがどのように知ることができるかです。そうでない場合、ユーザー空間はデバイス ファイルを使用できず、ドライバーとデバイスが役に立たなくなります。
ありがとう。
一部の initcall レベル (late_initcall など) を使用して、ブートの一部としてドライバーをロードしています。モジュール init の一部として、デバイス ノードを自動的に作成するために udev に登録します(t|g)。問題は、ブートプロセスのその時点で udev デーモンが実行されているかどうかをモジュールがどのように知ることができるかです。そうでない場合、ユーザー空間はデバイス ファイルを使用できず、ドライバーとデバイスが役に立たなくなります。
ありがとう。
まずudev
、デバイス ノードを作成するメカニズムの 1 つにすぎません。コードはカーネル デバイス モデルでデバイスを作成する必要があり、その後、何かがデバイスのデバイス ノードを作成し/dev
ます。単純なシェル スクリプトである可能性がある組み込みシステム。
タイミングに関する限り、デバイスがブートの早い段階で作成されている場合、udev が起動して実行されると、udev とカーネルが作成イベントの再生を処理します。これは、udev スキャンと各デバイスのファイルへの/sys
書き込みによって発生します。これは、カーネルに作成イベントを送信するように指示します。これは、udev が netlink 経由で受信します (または を使用できます)。"add"
uevent
uevent_helper
また、udev がなくても/sys
、メジャー番号とマイナー番号を照会し、デバイス ノードを手動で作成できる場所にデバイスが表示されます。