2013-10-15 2 views
1

Так что я написал небольшую RTOS раньше для школы, однако мы просто использовали карту памяти, которую оставил загрузчик (redboot). Он (TS-7200) имел сегменты RAM 4x 8MB, но загрузчик «повторно отобразил» их, чтобы они были непрерывными, начиная с 0. Я в основном задаюсь вопросом, какие механизмы сделали возможным, так как я сейчас смотрю на создание более легкую прошивку для автопилота на основе px4fmu и хотелось бы знать, что происходит с моей памятью, поэтому я могу выяснить, что такое скрипт компоновщика, а также защита памяти.Начинаем писать ARM RTOS и путать с отображением памяти

Включил ли загрузчик MMU и настроил таблицу страниц так, чтобы адреса 0-32MB были переведены на правильные физические адреса? Если это так, я думал, что перевод не происходит автоматически в режиме супервизора, и это то, что загружает загрузчик.

Я подозреваю, что это не так, и что загрузчик выполнил какое-то заклинание GPMC, чтобы изменить способ исправлены чипы памяти. Я читал что-то о том, что периферийные устройства не могут быть повторно отображены, что имело бы смысл в этой теории. Если это так, может ли кто-нибудь дать мне краткий обзор того, как это работает/где какие адреса в конечном итоге означают что? Раньше я видел в руководствах SoC что-то о «адресах шины», как они соотносятся/переходят на адреса в различных типах памяти?

ответ

3

Итак, есть процессор, затем mmu, затем l1 cache, а затем край «процессорного ядра», хотя то, что похоронено под ранними системами памяти, также является ядром, но глубже.

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

Если mmu включен, то mmu берет несколько бит от адреса, выполняет некоторую математику на основе регистра адреса и как настроен mmu, затем генерирует свой собственный цикл памяти на стороне памяти mmu (есть процессор и сторона памяти). Что ищет пользовательскую запрограммированную информацию в таблице mmu, в которой происходят такие вещи, как изменение виртуального на физический адрес. После того, как mmu завершит количество циклов памяти, ему необходимо собрать данные (обратите внимание, что mmu может иметь небольшой кеш предыдущих поисков для сохранения фактических циклов памяти), а затем, пока нет ошибки (адрес, к которому обращаются описан в таблицах, и разрешения соответствуют таким образом, что вам разрешен доступ к этой памяти, и/или просмотры таблицы mmu сами по себе не вызвали ошибку), доступ к которому процессор хотел сделать, выполняется с использованием физического адреса.

Если mmu отключен, доступ к процессорам идет прямо в кэш-память l1, а затем выключается в систему памяти через шину axi или amba. Кэш l2 работает на amba/axi, если есть l2.

Как только вы доберетесь до amba/axi, вы попадете в логику поставщика, кто сделал чип (рука не делает чипы, что делает процессорные ядра, некоторые вендоры обертывают это ядро ​​своей собственной логикой, а затем делают чипы и продают чипы). Вы попадаете в систему памяти поставщиков, которая может быть очень простой и очень сложной. Например, вы можете настроить параметры таким образом, чтобы какое-то адресное пространство, например, ноль, могло в какой-то момент (например, при включении питания) указывать на ром, а затем, если вы измените настройку доступа на нулевой или близкой к нулю, , У вас может быть некоторая логика, которая управляет всем адресным пространством, например, верхние два бита адреса, например, входят в некоторую логику, которая имеет четыре набора регистров управления, и для каждой из четвертей адресного пространства эти регистры управления могут делать что-то адрес или другие вещи, не похожие на mmu.

В конечном счете логика поставщика начнет декодировать больше битов адреса и определить, пытаетесь ли вы получить фактическое значение ram, rom или периферийных устройств, а затем, когда оно приближается к конечной цели, csr внутри периферийного устройства и т. Д. биты адреса дополнительно декодируются.Адресационное пространство любого процессора может (не всегда), но может быть как дерево, туловище - это место, где адрес выходит из процессора, но по мере анализа адреса он может разветвляться в разных направлениях, в конце концов он находит отдельный лист, который вы пытались адрес, будь то ячейка памяти в ram, csr в некоторых периферийных устройствах или какой-либо плунжер или другой элемент периферийного устройства (что может вызвать некоторую другую цепочку событий на какой-либо другой шине, например usb или pcie).

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

Сам процессор плеча не знает периферии от барана от рома из отверстия в стене. Биты адреса - это просто биты, некоторые шаблоны, на которые он вообще не заботится, с некоторыми исключениями на некоторых архитектурах процессорных процессоров, где есть некоторые периферийные устройства внутри самой руки, которые он декодирует, и не позволять вам принимать их дальше по линии, но периферийные устройства поставщиков, ram, rom и т. д. рука не знает или не заботится о том, чтобы эти адресные пространства могли иметь свои виртуальные адреса, отличные от физического. То, что вы не хотите делать, - это кеширование периферийных адресов (данных). В некоторых новых ядрах есть некоторые правила прогнозирования ветвей и ограничения, для которых вы можете получить некоторую выборку, поэтому, если у вас есть эта точная настройка гибкости в вашей настройке, и у вас есть периферийные устройства, которые выполняют некоторые изменения (очистить при чтении, автоматически увеличивая адрес внутри периферийное устройство и т. д.), которые в любом случае являются плохими вариантами дизайна в современных системах, вы бы хотели избежать возможной ситуации, когда выбор команды предсказания ветвления может привести к чтению в одно из этих местоположений.

Еще одна проблема, с которой вы можете столкнуться, что красная ботинок может или не может быть исправлена ​​для вас, - это драма или даже шрам в этом отношении, но если он находится вне процессора и требует обучения или настройки, и что обучение или настройка для вас купите redboot или загрузчик pre-redboot, тогда вам действительно нужно просто позволить redboot сделать это, а затем загрузить redboot и запустить ваши rtos. инициализация физической памяти может быть (не всегда) опытом обучения наравне с написанием собственных rtos с нуля, поэтому в ряде этих систем, поддерживающих linux, вам нужно решить, сколько материала вы хотите заново изобретать и почему. У вас будет достаточно работы, чтобы получить что-то, не имея мью и плоского физического пространства на основе адресов, создайте один мост за один раз, не пытайтесь собрать их все сразу, дождитесь, пока вы не перейдете к следующему препятствию, прежде чем пытаться заняться Это.

+0

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

Смежные вопросы