Linuxデバイスドライバのモジュールスタック

Linuxデバイスドライバのモジュールスタック

私はLinuxを使用しようとしていましたが、モジュールスタックの概念に直面しました。他のモジュールからエクスポートされたシンボルを使用するために使用できます。つまり、モジュールですでに作成されたものを使用できるため、すでに完了したことを行う必要はありません。しかし、私はまだLinuxでこの種のことをリアルタイムで見るという概念を理解していません。

私はO'Reillyの本の同じリンクをクリックしています。http://www.makelinux.net/ldd3/chp-2-sect-5.shtml

パラレルポートサブシステムのスタッキングを図2-2に示します。

ここに画像の説明を入力してください。

この数字を理解できません。

私の視野を広げるモジュールスタッキングコンセプトを使用できるリアルタイムサンプルアプリケーションを提供できますか?

答え1

スタックは、一部のモジュールが他のモジュールで定義されている関数を呼び出すことを意味します。参照したページに例があります。図のようにlpパラレルポートプリンタ用ドライバです。汎用パラレルポートドライバを呼び出しますparport。さまざまな種類のパラレルポートがあり、それぞれ独自の低レベルドライバがあります。parport_pc現在のカーネルでは、ポートでparport_pc定義された関数が実際に呼び出されparport、表示されたものと逆ではありません。もちろん、これらはすべてデフォルトのカーネル関数(モジュールではない)を呼び出します。

同様のケースがたくさんあります。たとえば、ほとんどのストレージ(ディスク)ドライバはSCSIプロトコル(バリエーション)と通信するため、共通scsi_modモジュールを呼び出します。このモジュールは(保存用)および(USB用)usb_storageと呼ばれます。sci_modusbcore

インストールしたすべてのモジュール/lib/modules/*/modules.dep(多くのモジュールがある)の依存関係(つまり、どのモジュールが他のモジュールの関数を呼び出すか)を見ることができます。現在ロードされているモジュールの依存関係を表示できますlsmod。たとえば、次の出力行にはが表示され、parport_pcすべてppdevlpのようになりますparport

parport                27954  3 parport_pc,ppdev,lp

これはロードされたモジュールの依存関係グラフを生成する小さなスクリプトです。あなたは持っている必要がありますグラフィックビジュアライゼーション(ほとんどのディストリビューションで利用可能)

lsmod | awk '
    BEGIN {print "digraph modules {"}
    END {print "}"}
    NR != 1 {split($4, a, ","); for (i in a) print a[i], "->", $1;}
' | dot -Tpdf >lsmod.pdf

答え2

一般に、コンピュータが相互作用する物理デバイスに関連する機能セットがある。例えば、ディスクドライブ関連機能には、ファイルシステム、暗号化、冗長性などが含まれる。さまざまな機能を整理して提供する方法の1つスタック

以下は、「スタック」/「関数」(垂直方向)と「レイヤー」(水平方向)を確認できるLinuxカーネルの一般的な図です。

ここに画像の説明を入力してください。

上記の画像のより詳細なバージョンは次のとおりです。

ここに画像の説明を入力してください。

以下は、Linuxのデバイスドライバスタックの例です。

入力/出力スタック

コンセプト:

ここに画像の説明を入力してください。

詳細は次のとおりです。

ここに画像の説明を入力してください。

グラフィックスタック

ここに画像の説明を入力してください。

関連情報