質問: pciデバイスにはどのようにアクセスしますか? pciバスに関して2つの質問があります。デバイスドライバーはpciバス上のデバイスにどのようにアクセスしますか?デバイスに割り当てられたメモリ領域に書き込むだけで十分ですか(mov memory_space_allocated_for_dev, something、デバイスがメモリマップされている場合、またはout io_space_allocated for_dev, somethingそうでない場合)(ハードウェアは、メモリ位置にアクセスするこの試みを、pciバス上の一連のpciコマンドなどに変換しますか?)。すべてのpciバスにすべてのデバイスをセットアップした後(つまり、メモリスペースの割り当て、バスの列挙など)、デバイスドライバーは、pciバスが存在するかどうか、またはメモリのデコードが単純なデコーダーで行われるかどうかを知る必要がないというのは正しいですか(古いコンピューターのように) )(つまり、デバイスにアクセスするために、いくつかのメモリ位置から書き込みと読み取りを行うだけです)?
回答: しばらく経ちましたが、正しく思い出せば、カーネルドライバは/ devにデバイスをセットアップし、biosまたはカーネルのいずれかによってpciデバイスに割り当てられたメモリアドレスにマップします。次に、適切な権限を持つユーザースペースプログラムが、その/ dev /ファイルを開いたり、読み取り/書き込み/シークしたり、閉じたりして、pciデバイスと対話します。 linuxデバイスドライバーの第12章を参照してください: https://lwn.net/kernel/ldd3/