2017-10-27 13 views
1

everyone。私はLDD3を学んでいます。以下の文で質問「各デバイスの初期化」の相違点

「という構造体net_deviceは常に実行時に一緒に置かれている注意してください。それはfile_operationsまたはblock_device_operations構造と同様に、コンパイル時に設定することができません」いので、ルートは何

ですこの違いの原因?異なる動作btwネットワークドライバとcharドライバ??誰でもここで説明できますか?感謝

答えて

2

違いの根本原因は、これらの構造に格納されているデータの性質です。

file_operationsは、よく定義された目的(例えば.open,.mmapなど)を持ち、コンパイル時に利用できる(既知の)特定のデバイス用の何らかのグローバルコールバックセットです。 モジュールの使用プロセス中に変更される可能性のある揮発性データフィールドは想定しません。つまり、コンパイル時に知られている単なるコールバックのセットです。

net_deviceは、データが多くの実行時の変更を受け入れやすいようにするための構造です。つまり、statemtuなど多くのフィールドはわかりやすいものです。コンパイル時には知られておらず、実行時に初期化/変更する必要があります。 つまり、構造はデバイスプローブ/コンフィギュレーション/開始順序の厳密なインタフェースに従い、対応するフィールドは対応するステップで初期化されます。いいえ、誰もコンパイル時にRxキューまたはTxキューの数を認識していません。ドライバは、OSのいくつかの制限と要求に基づいて、初期化時にこれらの値を計算します。たとえば、1つのRxキューと1つのTxキューを1コアCPUシステムに割り当てることが可能である一方、クアッドコアシステムに4つのキューを設定する可能性が高いネットワークアダプタもあります。コンパイル時にこれを予測し、構造体を何らかの値に初期化して、それを変更する必要はありません。

異なる動作btwネットワークドライバとcharドライバ??

だから、それを一緒に入れて、それが構造物の2種類の目的との間の差です。あるケースではコールバックに関する静的情報を保持し、他のケースでは揮発性のデバイス状態(名前、調整可能なプロパティ、カウンタなど)を維持します。あなたはそれがはっきりしていることを望みます。

+0

ありがとうございます。それは非常に明確で分かりやすいです。 – nathan

+0

@nathanよろしくお願いします。ご親切にありがとうございます。 –