私は現在Linux用のデバイス開発を学んでいます。 LLD3のような本を読んでいますが、デバイスをコンピュータに接続すると、何が起こっているのかまだ理解できません。これが私が想像したものです。ポートで何が起こるのかは、Linuxカーネルがデバイスの種類を知り、適切なモジュールのプローブ機能を呼び出してモジュールに必要なデバイスであることを確認するための魔法の方法です。魔法のような...何でも誰でもこれを修正できますか?
答え1
実際には魔法ではなくハードウェアです。ペリフェラルイベントに関する情報は、プログラム的に(カーネルコードで)他のハードウェアのゲートウェイであるフロントバスを介してCPUに到達します。中断要求(中断要求)。
以下を順番に見てください。
http://en.wikipedia.org/wiki/Northbridge_%28computing%29
http://en.wikipedia.org/wiki/Front_side_bus。
それでは、カーネルがCPUで何をするのかを決めると思います。次:
http://en.wikipedia.org/wiki/interruption
http://en.wikipedia.org/wiki/IRQ
LinuxカーネルコードWRTをより具体的に説明するために、割り込み要求が受信されたときに実行されるハンドラを使用します。その基本部分はアーキテクチャ固有のasmコードで行われ、その多くは(たとえば)にありますsrc/arch/x86/kernel
。私はasm(files)でコーディングしない.S
ので、残念ながらこれは私にギリシャ語で聞こえますが、ここのアイデア(Wikipediaエントリに存在する必要があります)は、IRQを受け取った後にカーネルがIRQを処理するために実行されるすべてのユーザー空間コードをプリエンプトすることですです。 (任意のユーザースペースプロセスに何かを渡すことができます)