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

 
 
> Xilinx bootloader, схематично: как сделать бут лоадер
Golikov A.
сообщение May 29 2013, 14:04
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

Имею: Ксалинкс спартан 6, с микроблайзом, ДДР, и Езернетом

На данный момент программа работает из ДДР, чтобы ее туда запихать в плисину заливаю bootloop а потом через жетаг средой заливаю программку.

Хочу к этому всем приделать загрузчик, чтобы оно все могло из флеши само стартовать, а в лучшем случае чтобы еще по езернету можно было прошивку обновить.

Кто-то может схематично описать как это делается?

1. я так понимаю мне нужно в микроблайз запихать модуль чтения - записи конфигурационной флэши. Есть такие готовые? Или конфигурационная флэш доступна из микроблайза напрямую?

2. Потом мне надо сформировать файл для этой флэши, что мне надо взять, какие утилиты применить?

3. После того как у меня будет бутлоадер, можно ли как то сделать так чтобы софт отлаживался по старой схеме? То есть мне не надо было бы перезаписывать флэш для того чтобы стартануть проект. Или это делается только через бутлуп и жетаг, а в конце формируется файл прошивки для загрузчика?

Если отказаться от загрузки через езернет, такое чувство что должно быть стандартное решение. Ведь сделать проект работающий из ДДР можно просто иснтрументами среды, так же его можно туда запихать, неужели не предусмотрели стандартного загрузчика?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jun 12 2013, 07:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ща я какую то глупость напишу, наверноеsm.gif.

У меня ДДР3 висит на акси шине, на кешированой. Проблемы были когда включал кэш, дохла прожка. Оказалось из-за перегрева вис проц, чуть помогло добавить регистры на шину. Но сильнее всего спасло внешнее охлаждение. Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю...

была бы ссылка на тему почитали быsm.gif...

П.С. у меня прога в ДДР работает и с кешем и на прямую.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 12 2013, 12:38
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Golikov A. @ Jun 12 2013, 11:13) *
Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю...

Те что DDR* они вроде да, сидят на встроенном готовом блоке. А вот у меня AXI_EMC, который вроде как на логике, очень даже с багом я так считаю. Так что Xilinx умеет делать баги sm.gif

По теме: я продвигаюсь с написанием своего загрузчика, пока осилил чтение из DataFlash, ибо после загрузки линии доступны для пользователя и там можно организовать SPI-интерфейс, что я и сделал, успешно научился читать данные.

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

Вот один из примеров:
Код
mb-objcopy  -O  binary  -R .vectors.reset -R .vectors.sw_exception -R .vectors.interrupt -R .vectors.debug_sw_break -R .vectors.hw_exception ./factory_test/executable.elf  ./flash_burn/app.bin
mb-objcopy  -O  binary  -j .vectors.reset -j .vectors.sw_exception -j .vectors.interrupt -j .vectors.debug_sw_break -j .vectors.hw_exception ./factory_test/executable.elf  ./flash_burn/vectors.bin


Отсюда следующий вопрос - это правильный способ? И если да, то что это за векторы и насколько они вообще нужны?

P.S.
Запускать программу из внешней памяти вроде как тупо так:
Код
int (*boot_app) (void);
boot_app = (int (*) (void)) APP_DESTINATION_ADDR;
boot_app();

Это я подсмотрел в одном из примеров кода загрузчика.

ДОБАВИЛ: Да, всё так, вышеуказанный mb-objcopy делает из ELF правильный bin-файл, его я сую в SPI-флэш (добавив в MCS файл) по определенному адресу, загрузчик из BRAMины вычитывает флэш и тупо приравняв к boot_app начальный адрес внешней памяти, запускаю свою программу boot_app();


--------------------
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Jun 13 2013, 07:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Цитата(AVR @ Jun 12 2013, 18:38) *
Вопрос: как подготовить ELF файл, чтобы его можно было вычитать из флэшки и просто записать во внешнюю память, а затем передать управление?

ДОБАВИЛ: Да, всё так, вышеуказанный mb-objcopy делает из ELF правильный bin-файл, его я сую в SPI-флэш (добавив в MCS файл) по определенному адресу, загрузчик из BRAMины вычитывает флэш и тупо приравняв к boot_app начальный адрес внешней памяти, запускаю свою программу boot_app();


Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.
Мы храним на флэше ELF, и разбираем его прямо при загрузке.
Если интересно, могу прислать исходник разборки ELF, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 13 2013, 18:21
Сообщение #5


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Дмитрий Мазунин @ Jun 13 2013, 11:40) *
Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.
Мы храним на флэше ELF, и разбираем его прямо при загрузке.
Если интересно, могу прислать исходник разборки ELF, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет.

Да, выложите пожалуйста, думаю многим будет интересно - как самому ТС, так и мне возможно в будущем потребуется.

Я полагал ELF это сложный формат, не хотелось с ним ковыряться, к тому же вероятно такой парсер ELF-а может не влезть в 8 Кб памяти вместе с загрузчиком, я хочу в будущем обойтись лишь минимально возможной памятью для загрузчика. Сейчас флэшка у меня огромная и я даже текущими успехами счастлив, но если можно сэкономить место храня просто ELF, то это плюс.


--------------------
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Jun 14 2013, 08:24
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Цитата(AVR @ Jun 14 2013, 00:21) *
Да, выложите пожалуйста, думаю многим будет интересно - как самому ТС, так и мне возможно в будущем потребуется.

Я полагал ELF это сложный формат, не хотелось с ним ковыряться, к тому же вероятно такой парсер ELF-а может не влезть в 8 Кб памяти вместе с загрузчиком, я хочу в будущем обойтись лишь минимально возможной памятью для загрузчика. Сейчас флэшка у меня огромная и я даже текущими успехами счастлив, но если можно сэкономить место храня просто ELF, то это плюс.


У нас сделана двухступенчатая загрузка. В BRAM загрузчик очень простой, влезает в 8К. На самом деле, он немного больше 4К, и при желании можно и в 4к утоптать.
Этот первичный загрузчик грузит в DDR вторичный загрузчик. Вторичный хранится в BIN образе для простоты первичного. А вот вторичный уже грузит боевую прогу, хранящуюся в ELF. И волки сыты, и овцы целы.

Код парсера, найденный в свое время на просторах интернета, прилагаю. Проверен, работает. В архиве еще описание формата.Прикрепленный файл  elf.rar ( 130.31 килобайт ) Кол-во скачиваний: 106
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   Xilinx bootloader   May 29 2013, 14:04
- - Дмитрий Мазунин   Посмотрите XAPP1140 и XAPP1146. По этому примеру м...   May 30 2013, 08:14
|- - Corvus   В общем случае, так http://www.xilinx.com/support...   May 30 2013, 12:37
- - Golikov A.   Спасибо, да здорово что многое является стандартом...   May 30 2013, 18:42
|- - AVR   Цитата(Golikov A. @ May 30 2013, 22:42) С...   Jun 3 2013, 21:02
|- - Дмитрий Мазунин   Цитата(AVR @ Jun 4 2013, 03:02) Но вопрос...   Jun 4 2013, 06:53
|- - AVR   Цитата(Дмитрий Мазунин @ Jun 4 2013, 10:5...   Jun 5 2013, 17:02
|- - Дмитрий Мазунин   Цитата(AVR @ Jun 5 2013, 23:02) Я правиль...   Jun 6 2013, 07:26
- - Golikov A.   на данный момент возникли еще проблемы, так что по...   Jun 4 2013, 05:54
- - Golikov A.   есть настройка по умолчанию которая почти подходит...   Jun 5 2013, 21:02
|- - AVR   Цитата(Golikov A. @ Jun 6 2013, 01:02) са...   Jun 8 2013, 16:05
|- - Corvus   Цитата(AVR @ Jun 8 2013, 20:05) У кого-ни...   Jun 8 2013, 18:37
|- - Дмитрий Мазунин   Цитата(AVR @ Jun 8 2013, 22:05) У кого-ни...   Jun 10 2013, 09:54
- - Golikov A.   http://www.xilinx.com/support/answers/43615.htm в...   Jun 9 2013, 18:29
- - Golikov A.   1140 This application note discusses an in-the-fie...   Jun 10 2013, 10:08
- - Дмитрий Мазунин   Да ничего крутого там нету. Все сделано как раз пр...   Jun 10 2013, 10:49
- - Golikov A.   Ну начнем с малого, а там разберемся): в любом слу...   Jun 10 2013, 14:00
- - AVR   Вопрос - кто пользуется асинхронной SRAM для кода ...   Jun 11 2013, 19:55
|- - Flood   Цитата(Дмитрий Мазунин @ Jun 13 2013, 11...   Jun 13 2013, 20:02
- - Golikov A.   как же может быть не интересно...   Jun 13 2013, 12:29


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

 


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


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