2012-03-08 7 views
2

私はいくつかの趣味のOSの開発を迷惑にしています。メモリマップされたI/Oアドレスについて少し混乱しています。メモリ全体のI/Oコンセプトを理解していますが、開発者がどのようにハードウェアを操作するためのアドレスを取得するのかを把握しようとしています。メモリマップドI/Oアドレスはどこから得られますか?

ハードウェアベンダーによって指定されたアドレスか、すべてのコンピュータの標準アドレスのようなアドレスですか。たとえば、テキスト印刷用のVGAメモリは0xB8000番地から開始されます。すべてのx86マシンの標準ですか?もしそうなら、誰がその基準を定めましたか?たとえば、イーサネットカードと話したければ、通信に使用するアドレスやポートをどのように知ることができますか?

ありがとうございます。

答えて

1

私は誰がアドレスを設定するかについて100%確信していませんが、私が知っている限り、ハードウェアベンダーは自分たちが望むようにメモリマップを設定できます。

00000000-0000ffff : reserved 
00010000-0009f3ff : System RAM 
0009f400-0009ffff : reserved 
000a0000-000bffff : PCI Bus 0000:00 
    000a0000-000bffff : Video RAM area 
000c0000-000c7fff : Video ROM 
000ca000-000cbfff : reserved 
    000ca000-000cafff : Adapter ROM 
000cc000-000cffff : PCI Bus 0000:00 
000d0000-000d3fff : PCI Bus 0000:00 
000d4000-000d7fff : PCI Bus 0000:00 
000d8000-000dbfff : PCI Bus 0000:00 
000dc000-000fffff : reserved 
    000f0000-000fffff : System ROM 
00100000-3fedffff : System RAM 
    01000000-01536143 : Kernel code 
    01536144-017c007f : Kernel data 
    01875000-0194bfff : Kernel bss 
3fee0000-3fefefff : ACPI Tables 
.... 
+0

あなたは、オンラインまたは書籍のどこかにリストされたポートの明確なリストを知りましたか? – QAH

+0

最新のlinuxカーネルをダウンロードした場合、いくつかのアーキテクチャでは 'arch/XXX/mach-XXX'ディレクトリにデバイスが宣言されています。また、QEMUには、リポジトリの 'hw /'ディレクトリに手作業で宣言された豊富なマッピングがありますが、これらはいずれも権威的で現実的なものではありません。詳細は、PCIやSCSIなどのさまざまなバスプロトコルを調べて、マッピングの検出機能があるかどうかを確認してください。 – Alex

+0

また、私は間違いであなたを捨てることはありません、それはiomemであり、ioportsではありません。私の悪い。 – Alex

1

あなたはPCIバスのスキャン、USB、およびACPIのようないくつかのハードウェア検出機構を備えたポートを取得:それは価値があるものを、Linuxはあなたが、メモリが現在cat /proc/iomemを行うことによって、あなたのマシン上にマッピングされているかを確認することができますについては

。 たとえば、PCIでサポートされているディスプレイカードが見つかった場合は、そのBAR(ベースアドレスレジスタ)を照会し、物理アドレスおよび/またはIOポートベース、および/またはIRQ番号を取得します。 NICや他のカードと同じです。

バス上にないものについては、例: ps/2コントローラでは、検出が非常に難しく、ACPIテーブルを解析する必要があります。

関連する問題