Linuxで認識されるすべての物理デバイスのメモリマップを取得するにはどうすればよいですか。私はすでに/proc/iomemと/proc/ioportsを見ました。ただし、デバイスごとのメモリマップを見つけることができませんでした。これを達成する方法について何かアイデアはありますか?
4 に答える
私の知る限り、唯一の一般的な方法は/proc/iomem
. これは、どのメモリ範囲が誰に割り当てられているかを示すカーネルを示しています。
詳細が必要な場合は、個々のドライバーを確認する必要があります。
使用して/proc/vmallocinfo
いるため、より多くの情報が得られる場合があります(ただし、すべてのアーキテクチャではない可能性があります)。ioremap()
vmalloc
マシンの周辺機器レジスタはどこにありますか? 以前の回答から、貴重な情報が得られたと思います。を組み合わせて、多くの情報を提供します/proc/iomem
。では、カーネル ソース コードを調べて、関数名をデバイスのドライバーに関連付ける必要があることに/proc/vmallocinfo
注意してください。vmalloc
しかし、本当の質問は、あなたが正確に知りたいことですか? どのような目的でこの情報が必要ですか?
デバイスの物理メモリに直接アクセスしようとしているように思えます.ioctl、sysfs、またはデバイスと「通信」するためにドライバーが提供する既存のサービスに依存する必要があります。
これを忘れないでください: Linux で必要な情報が表示されない場合は、適切な情報を探していないか、既存のサービスをバイパスしようとしている可能性があります。ユーザー空間の観点、つまりアプリから見ると、物理メモリの場所を気にする必要はありません。
カーネルのコーディング時間を正しく覚えていると、 iomem/ports の出力には、ドライバーがそこに登録するものがリストされているだけです。したがって、デバイスごとの出力ではなく、ドライバーごとの出力になります。
現在、ほとんどのデバイスは pci デバイスであるlspci -v
ため、使用されているメモリと io ポートを示す a がおそらく最良の方法です。