Запутался в отображении памяти

Недавно я начал заниматься низкоуровневыми вещами и изучать загрузчики, операционные системы и т. Д.

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

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

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

person tangrs    schedule 11.07.2011    source источник


Ответы (3)


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

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

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

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

person doron    schedule 11.07.2011
comment
Спасибо, это помогло прояснить ситуацию. И последний вопрос: возможно ли «отменить отображение» чего-либо в пространстве физической памяти? - person tangrs; 11.07.2011
comment
Вы можете перепрограммировать GPMC и эффективно отключить память, хотя я сомневаюсь, что для этого есть хороший вариант использования. - person doron; 11.07.2011

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

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

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

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

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

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

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

person sanmara    schedule 24.01.2015

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

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

person ruhalde    schedule 13.07.2011