5

私はいくつかの愛好家のOS開発をいじっていて、メモリマップドI/Oアドレスについて少し混乱しています。メモリマップドI/Oの概念全体を理解していますが、開発者がハードウェアを操作するためのアドレスを取得する方法を理解しようとしています。

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

前もって感謝します。

4

2 に答える 2

3

誰がアドレスを設定するかについては100%わかりませんが、私が知る限り、ハードウェアベンダーはメモリマップを好きなように設定できます。

Linuxでは、次のようにして、現在マシンにメモリがどのようにマッピングされているかを確認できますcat /proc/iomem

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
....
于 2012-03-08T05:36:11.880 に答える
2

PCIバススキャン、USB、ACPIなどのハードウェア検出メカニズムを備えたポートを取得します。たとえば、PCIでサポートされているディスプレイカードを見つけた場合、そのBAR(ベースアドレスレジスタ)を照会すると、物理アドレス、IOポートベース、および/またはIRQ番号が取得されます。NICや他のカードも同様です。

バスに乗っていないもの、例えば。ps / 2コントローラーの場合、検出は非常に難しく、ACPIテーブルの解析が必要です。

于 2012-05-13T18:31:55.893 に答える