私は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_mod
usbcore
インストールしたすべてのモジュール/lib/modules/*/modules.dep
(多くのモジュールがある)の依存関係(つまり、どのモジュールが他のモジュールの関数を呼び出すか)を見ることができます。現在ロードされているモジュールの依存関係を表示できますlsmod
。たとえば、次の出力行にはが表示され、parport_pc
すべてppdev
次lp
のようになります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のデバイスドライバスタックの例です。
入力/出力スタック
コンセプト:
詳細は次のとおりです。