Linuxのドライバ開発の寄せ集め(0×01) - などエイサー__initなど、いくつかのマーカーのカーネル

>以下はからの抜粋であるカーネルの初期化マクロの最適化、初期化シーケンス、INIT、 devexitなど、唯一のメモを保存します。

別のマクロをマークするために使用されたカーネル関数やデータ構造の多くは異なる効果を持っています。以下のようなマクロのinit、その上devinitからとします。これらのマクロは、で定義されている/ linuxの/ init.hヘッダファイルが含まれています。これらのマクロコンパイラは、メモリフットプリントを低減し、コアの効率を改善するために、適切なメモリ位置にコードを最適化することができます。

ここではいくつかの一般的に使用されるマクロは以下のとおりです。

__初期化

リブートフラグカーネルの初期化コードは、起動後のカーネルは、もはや必要とされない完了です。このマーカーは、コードメモリ領域.init.text位置しています。

__出口

マークの終了コードは、非モジュラーには有効ではありません。

__initdata

起動時のカーネルのマーカーで使用されるデータ構造を初期化し、もはやコアプロモーターの完了後に必要とされません。このマーカーは.init.dataコードメモリエリアに位置しています。

__devinit

使用するデバイスをマーキング初期化コード。

へ__devinitdat

デバイス初期化関数のデータ構造をマーキング。

__devexit

削除コードを使用して、デバイスのタグ。

xxx_initcall

優先順位の高い順に初期化コードの一連。

機能の初期化コードです:システムで実行を開始し、一度すぐにメモリを占有し、メモリからではない撤退実行されています。

次のようにドライバモジュールの場合は、これらのケースの最適化フラグは以下のとおりです。

  • あなたが使用する必要がある機能にmodule_init()とmodule_exit()関数呼び出しによってinitとマークする終了のマクロを。
  • マーキングなしpci_driverデータ構造。
  • プローブ()および()関数が使用されるべきで除去devinitからと devexit数字のみ標識プローブ()および除去()
  • 使用)(削除した場合devexitマークを、構成pci_driver使用 devexit_pは、(削除)()関数を除去するために参照されます。
  • 不明な点があるまたはマクロを追加する必要がある場合は、最適化を追加しないでください。

オリジナル:ビッグボックス  のLinuxドライバ開発の寄せ集め(0×01) -などエイサー__initなど、いくつかのマーカーのカーネル


おすすめ

転載: www.cnblogs.com/petewell/p/11615213.html