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

おすすめ記事