U-boot: Перемещение
Это один из основных вопросов, связанных с u-boot.
Почему код u-boot переместился?
Хорошо, имеет смысл, если u-boot выполняется из NOR-flash или загрузочного пространства ROM, но если он запускается из SDRAM, то почему он должен снова переместиться?
Ответы
Ответ 1
Этот вопрос возникает часто. Хорошие ответы.
Я согласен, что удобно загружать сборку в SDRAM во время разработки. Это работает для меня, я делаю это все время. У меня есть специальный код загрузки во флеше, который не позволяет использовать MMU/cache. Для моих сборщиков u-boot я переключаю CONFIG_SYS_TEXT_BASE между установками flash и ram. Я запускаю свои разработки так, как обычно.
Как практический вопрос, обработка повторной инициализации MMU/cache была бы нетривиальным вопросом. И U-Boot приносит пользу ИМО от простоты, как результат, оставляя такие вещи.
Технический лидер в Denx выразил свое мнение . IIRC его другие должности более четко сформулированы, чем тот. У меня создается впечатление, что он не любит повторять себя.
update: зачем переместить. Доступ к памяти быстрее из ОЗУ, чем из ПЗУ, это имеет значение, особенно если у цели нет кэша команд. Выполнение из ОЗУ позволяет перепрограммировать вспышку; также (более второстепенный) он позволяет программным точкам останова с инструкциями "ловушки"; также он больше похож на целевой режим работы, поэтому, если, например, всплеск чтения из ОЗУ, если неудача будет видна при ранней загрузке.
Ответ 2
U-boot должен резервировать 3 области памяти, в которых хранится: 1) сама u-boot, 2) uImage (сжатое ядро) и 3) несжатое ядро. Эти 3 области должны быть тщательно размещены в u-boot, чтобы предотвратить конфликт.
Однако загрузочный загрузчик предыдущего этапа (BL2 или BL1), который загружает u-boot в память DRAM, не знает о том, как вы планируете загрузку в этих трех регионах. Таким образом, он может загружать u-boot только на более низкий адрес в памяти DRAM и переходить на него. Затем, после того, как u-boot выполнит некоторую базовую инициализацию и обнаружит, что текущий компьютер не находится в планируемом местоположении, функция переустановки u-boot вызывает перемещение u-boot в запланированное местоположение и переход к нему.
Ответ 3
Код флэш-памяти NOR должен инициализировать SDRAM, Затем скопировать код из Nor Flash в SDRAM. Процесс будет скопировать сам, , потому что вы можете включить MMU, мы начнем отображение виртуальных адресов.