Запутался в отображении памяти - PullRequest
7 голосов
/ 11 июля 2011

Я недавно начал изучать низкоуровневые вещи и изучать загрузчики, операционные системы и т.д.отображаются в пространство физической памяти.Отсюда код может обращаться к периферийным устройствам, просто записывая значения в пространство памяти, сопоставленное с регистрами периферийных устройств.Позже, если у чипа есть MMU, его можно использовать для дальнейшего переназначения в пространства виртуальной памяти.Я прав?

Чего я не понимаю (если предположить, что я сказал выше, верно):

  • Как загрузчик инициализирует периферийные устройства, если они не былиеще сопоставлены с адресным пространством?
  • При сопоставлении виртуальной памяти существуют таблицы, которые сообщают MMU, где что сопоставить.Но что определяет, где периферийные устройства отображаются в физической памяти?

Ответы [ 3 ]

5 голосов
/ 11 июля 2011

Когда устройство загружается, MMU выключается, и вы обычно работаете в режиме супервизора.Это означает, что любые адреса являются физическими.

Каждый ARM SOC (система на чипе) будет иметь карту памяти.Соответствие адресов устройствам определяется тем, какие физические данные и адресная линия подключены к каким частям процессора.Всю эту информацию можно найти в Техническом справочном руководстве.Для чипов OMAP4 это можно найти здесь .

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

При включении MMU эти адреса могут изменяться в зависимости от того, как запрограммирован MMU.Обычно прямой доступ к оборудованию также будет доступен только в режиме ядра.

2 голосов
/ 24 января 2015

Хотя это старый вопрос, подумайте над тем, чтобы ответить на него, поскольку это может помочь некоторым другим, таким как я, попытаться получить достаточные ответы от stackoverflow.

Ваше объяснение почти правильное, но вы хотите дать небольшое объяснение этому: периферийные устройства инициализируются загрузчиком, а затем отображаются в физическую память

Периферийные устройства Onchip уже имеют предопределенное физическое адресное пространство. Для других внешних периферийных устройств с отображением ввода-вывода (например, PCIe) нам необходимо настроить физическое пространство адресов, но диапазон их физического адресного пространства все еще предопределен. Они не могут быть настроены в произвольном адресном пространстве.

Теперь на ваши вопросы, вот мои ответы .. Как загрузчик инициализирует периферийные устройства, если они еще не были сопоставлены с адресным пространством?

Как я уже упоминал выше, все периферийные устройства (на кристалле) имеют заранее заданное физическое адресное пространство (обычно это будет указано в главе «Карта памяти» процессора RM). Таким образом, загрузчики (при условии, что MMU выключен) могут напрямую обращаться к ним.

При отображении виртуальной памяти существуют таблицы, которые сообщают MMU, куда и что отображать. Но что определяет, где периферийные устройства отображаются в физической памяти?

В VMM существуют таблицы страниц (созданные и хранящиеся в физической памяти DRAM ядром), которые сообщают MMU о необходимости сопоставления виртуального адреса с физическим адресом. В ядре linux с виртуальным пространством ядра 1G (скажем, виртуальные аддеры ядра от 0xc0000000-0xffffffff) периферийным периферийным устройствам необходимо иметь пространство виртуальных машин из указанного выше пространства виртуальных ядер ядра (чтобы ядро ​​и только ядро ​​могли получить к нему доступ); и таблицы страниц будут настроены для сопоставления этого периферийного виртуального адреса с его фактическим физическим адресом (определенным в RM)

0 голосов
/ 13 июля 2011

Невозможно переназначить периферийные устройства в процессоре ARM, все периферийные устройства соответствуют фиксированным позициям на карте памяти.Четные регистры отображаются во внутреннюю память RAM, которая имеет постоянные фиксированные позиции.Единственное, что вы можете переназначить, это устройства памяти, такие как SRAM, FLASH и т. Д. Через FSMC или аналогичные функции ядра.Однако вы можете переназначить подключенную к памяти дополнительную пользовательскую периферию, которая не является частью самого ядра, скажем, например, контроллер жесткого диска, но то, что находится внутри ядра ARM, исправлено.

Хорошим началом являетсявзгляните на технические описания процессоров на сайтах компаний, таких как Philips и ST, или на архитектуру ARM непосредственно на www.arm.com.

...