Откуда берутся адреса ввода-вывода с отображением в память? - PullRequest
3 голосов
/ 08 марта 2012

Я возлюсь с какой-то увлеченной разработкой ОС, и я немного запутался в адресах ввода-вывода с отображением в памяти.Я понимаю всю концепцию ввода-вывода с отображением в памяти, но я пытаюсь выяснить, как разработчики получают адреса для манипулирования оборудованием.

Являются ли адреса, указанные поставщиками оборудования, или они являются своего рода стандартными адресамидля всех компьютеров?Например, память VGA для печати текста начинается с адреса 0xB8000.Это стандарт для каждой машины x86?Если да, то кто установил этот стандарт?И если бы я хотел поговорить, например, с сетевой картой Ethernet, как бы я узнал адреса или порты, которые она использует для связи?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Я не на 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
....
1 голос
/ 13 мая 2012

Вы получаете порт с некоторым механизмом обнаружения оборудования, таким как сканирование шины PCI, USB и ACPI. Например, если вы нашли поддерживаемую видеокарту в PCI, вы запрашиваете ее BAR (регистры базовых адресов) и получаете физический адрес, и / или базу портов IO, и / или номер IRQ. То же самое для NIC и других карт.

Для вещей, которых нет ни в одном автобусе, например. Контроллер PS / 2, обнаружение очень сложно и включает в себя анализ таблиц ACPI.

...