реклама на сайте
подробности

 
 
> Bootloader, нужна помощь
cerg19
сообщение Oct 3 2012, 17:38
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



Здравствуйте.
Я работаю со Spartan6 и в моём проекте используется Microblaze. Необходимо, чтобы программа Microblaze исполнялась из DDR3 памяти. Я знаю, что для этого необходим Bootloader. Я использовал xapp482.exe для этого, при этом после загрузки ПЛИС из флешки программа не запускается вообще. Может кто подскажет инструкцию для создания прошивки с Bootloader без xapp482.exe. И вообще, не могли бы мне разъяснить что представляет из себя этот Bootloader, я где то читал, что его можно скачать в виде проекта для Microblaze, это так?
Понимаю, что тема вроде уже разжёвана ранее в постах, но всё что написано там, никакого результат не принесло.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flood
сообщение Oct 3 2012, 18:49
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(cerg19 @ Oct 3 2012, 21:38) *
И вообще, не могли бы мне разъяснить что представляет из себя этот Bootloader, я где то читал, что его можно скачать в виде проекта для Microblaze, это так?


Сразу после снятия Reset процессор должен начать выполнять какую-либо программу, а значит, эта программа уже должна находиться в адресуемой памяти. Из-за сложности современных процессоров в них часто используется начальный загрузчик, т.н. Bootloader. Часто в системе может быть более одного загрузчика - загрузчик первой фазы (First Boot, First Stage Loader, совсем маленький), затем загрузчик второй фазы (Second Stage Loader, большой и сложный, почти ОС), который уже загружает основную ОС. Например, в Microblaze с DDR-ом задача First Boot - убедиться в работоспособности DDR и загрузить туда код Second Loader'а или сразу ОС из какого-нибудь внешнего устройства. В xapp482 это конфигурационное ПЗУ.

Подходов к размещению загрузчика может быть много. По-умолчанию и в простейшем для Microblaze случае для загрузчика выделяется внутрикристальная память небольшого объема на BRAM, с адреса 0. Размер памяти зависит от сложности загрузчика и наличия свободных ресурсов. Из-за того, что при загрузке ПЛИС происходит инициализация BRAM, на момент окончания конфигурации программа в BRAM оказывается загружена "сама собой". Это близко к наличию масочной ПЗУ в обычном процессоре, с тем значительным отличием, что в BRAM память можно писать, а значит в ней может не только храниться сама программа, но и находиться стек, секции с изменяемыми переменными и т.п. Добавление загрузчика в битстрим ПЛИС делается программой data2mem, с использованием .bit-файла(битстрима) и .bmm-файла (описания реального маппинга BRAM-ов). Эти два файла меняются каждый раз после синтеза битстрима.

xps (или ise) автоматически передает в SDK информацию об аппаратной начинке системы, поэтому в SDK достаточно написать нужную программу, скомпилировать ее в .elf, после чего сгенерировать битстрим с внедренным туда .elf-ом. Все это делается автоматически.
Загвоздка при создании загрузчика в том, что в проекте, имеющем внешнюю память, настройки компоновщика (ldscript) будут таковы, что заставят расположить большинство секций elf-а во внешней памяти. Настройки нужно или поменять вручную, или дать сделать это автомату, убрав на время всю внешнюю память в проекте xps. В экспортированном в SDK проекте без внешней памяти нужно сохранить ldscript или запомнить его содержимое, и использовать его далее в основном проекте (с памятью). Убедиться в том, что запуск программы после начальной загрузки происходит нормально, можно загнав туда Hello World или memtest из готовых заготовок в SDK. Сразу же после окончания загрузки ПЛИС битстримом download.bit (по-умолчанию) или же напрямую из SDK, программа должна запуститься и сообщить об этом в UART.

В качестве реального First Stage Loader можно использовать готовый от petalinux (если есть, где его найти), или вручную обрезать u-boot до безобразия. Хотя лучше всего (с точки зрения экономии BRAM) написать свой. По-минимуму в FSL должны быть функции загрузки следующей программы из некоего внешнего устройства (ПЗУ), а также из UART-а (для первоначального программирования ПЗУ!) в DDR. Также очень желательно иметь в FSL базовые средства проверки работоспособности внешней памяти (анализ phy_init_done) и короткий тест памяти, сопровождающиеся соответствующей индикацией или печатью.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 21:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016