Итак, есть процессор, затем MMU, затем кэш l1, затем край «процессорного ядра», хотя то, что похоронено под ранними системами памяти, также является ядром, но глубже.
Когда «процессор» обращается к какому-то адресу, которым непосредственно манипулирует программист (значение, которое у вас есть в регистре, используемом для хранения адреса для загрузки или сохранения, плюс любые смещения, которые вы кодируете).
Если mmu включен, то mmu берет некоторые биты из адреса, выполняет некоторые математические операции на основе адресного регистра и того, как сконфигурирован mmu, а затем генерирует свой собственный цикл памяти на стороне памяти mmu (есть сторона процессора и сторону памяти). Который ищет запрограммированную пользователем информацию таблицы mmu, как происходят такие вещи, как изменение виртуального адреса на физический. После того, как MMU выполнит количество циклов памяти, необходимое для сбора данных (обратите внимание, что MMU может иметь небольшой кеш предыдущих поисков, чтобы сэкономить фактические циклы памяти), затем, пока нет ошибки (адрес, к которому осуществляется доступ описан в таблицах, и разрешения совпадают, так что вам разрешен доступ к этой памяти, и/или поиск в таблице mmu сам по себе не вызвал ошибку) доступ, который процессор хотел сделать, выполняется с использованием физического адреса.
если mmu отключен, то доступ процессора идет прямо в кэш l1, а затем в систему памяти через шину axi или amba. Кэш l2 живет на amba/axi, если есть l2.
Как только вы доберетесь до amba/axi, вы попадете в логику поставщика, независимо от того, кто сделал чип (рука не производит чипы, она производит процессорные ядра, некоторые поставщики оборачивают это ядро своей собственной логикой, а затем производят чипы и продают чипы). Вы попадаете в систему памяти поставщиков, которая может быть как очень простой, так и очень сложной. Например, у вас могут быть настраиваемые параметры, так что некоторое адресное пространство, такое как ноль, может в какой-то момент (например, при включении) указывать на ПЗУ, а затем, если вы измените настройку, доступ к нулю или около нуля приведет к тому, что он перейдет к какой-то оперативной памяти . У вас может быть некоторая логика, которая манипулирует всем адресным пространством, скажем, два старших бита адреса, например, входят в некоторую логику, которая имеет четыре набора регистров управления, и для каждой из четвертей адресного пространства эти регистры управления могут делать что-то для адрес или другие вещи, мало чем отличающиеся от мму.
В конце концов логика поставщика начнет декодировать больше адресных битов и определять, пытаетесь ли вы добраться до фактического ОЗУ, ПЗУ или периферийных устройств, а затем, когда он приближается к конечной цели, csr внутри периферийного устройства и т. д. биты адреса дальше расшифровывается. Адресное пространство любого процессора может (не всегда), но может быть похоже на дерево, ствол — это место, где адрес выходит из процессора, но когда адрес анализируется, он может разветвляться в разных направлениях, в конце концов он находит отдельный лист, который вы пытались адрес, будь то ячейка памяти в оперативной памяти, csr в каком-либо периферийном устройстве или какой-либо оперативной памяти или другом элементе в периферийном устройстве (что может вызвать другую цепочку событий на какой-либо другой шине, например, usb или pcie).
Итак, сказав все это, краткий ответ здесь: во-первых, вы должны работать без MMU и кешей, понять «физическое» адресное пространство чипа (со стороны поставщика), которое вам нужно будет понять с или без ммм. это адресное пространство очень специфично для этого поставщика и, возможно, для этого чипа или семейства чипов, поэтому вам понадобится документация поставщиков чипов. Затем позже узнайте, как использовать mmu, я бы сначала рекомендовал попробовать его с виртуальными адресами, такими же, как физические, научиться помечать оперативную память как кешируемую, а периферийное адресное пространство как некэшируемое (затем включите кеш данных и посмотрите, если это сработало). затем научитесь добавлять блоки виртуального адресного пространства, которые указывают на разные физические адреса, после чего вы готовы начать использовать mmu для операционной системы.
Процессор руки сам не знает периферии от барана от рома от дыры в стене. Биты адреса - это просто биты, некоторые шаблоны, которые обычно не заботятся, за некоторыми исключениями для некоторых архитектур процессоров рук, где есть некоторые периферийные устройства внутри самой руки, которые она декодирует и не позволяет вам использовать их дальше по линии, но поставщики периферийных устройств, оперативной памяти, ПЗУ и т. д., о которых рука не знает или не заботится, поэтому эти адресные пространства могут иметь свои виртуальные адреса, отличные от физических. Чего вы не хотите делать, так это кэшировать адресные пространства (данные) периферийных устройств. Некоторые более новые ядра рук имеют некоторые правила предсказания ветвлений и ограничения, для которых вы можете получить некоторую выборку, поэтому, если у вас есть такая тонко настроенная гибкость в вашей настройке и у вас есть периферийные устройства, которые выполняют некоторые изменения (очистка при чтении, автоматическое увеличение адреса в пределах периферийное устройство и т. д.), которые в любом случае являются плохим выбором дизайна в современных системах, вы хотели бы избежать возможного создания ситуации, когда выборка инструкции предсказания ветвления может вызвать чтение в одно из этих мест.
Другая проблема, с которой вы можете столкнуться, с которой Redboot может исправить или не исправить для вас, - это dram или даже sram, если на то пошло, но если RAM находится вне процессора и требует обучения или настройки, и это обучение или настройка были выполнены для вас, купите redboot или загрузчик до redboot, тогда вам действительно нужно просто позволить redboot сделать это, а затем загрузить redboot и запустить RTOS. инициализация физической памяти может быть (не всегда) учебным опытом наравне с написанием собственных RTO с нуля, поэтому в ряде этих систем с поддержкой Linux вам нужно решить, сколько вещей вы хотите заново изобрести и почему. У вас будет достаточно работы, чтобы заставить что-то работать без MMU и пространства памяти на основе плоского физического адреса, стройте один мост за раз, не пытайтесь построить их все сразу, подождите, пока вы не доберетесь до следующего препятствия, прежде чем пытаться решить Это.
person
old_timer
schedule
16.10.2013