|
Xilinx bootloader, схематично: как сделать бут лоадер |
|
|
|
Jun 12 2013, 07:13
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

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

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

|
Цитата(Golikov A. @ Jun 12 2013, 11:13)  Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю... Те что DDR* они вроде да, сидят на встроенном готовом блоке. А вот у меня AXI_EMC, который вроде как на логике, очень даже с багом я так считаю. Так что Xilinx умеет делать баги  По теме: я продвигаюсь с написанием своего загрузчика, пока осилил чтение из 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();
--------------------
|
|
|
|
|
Jun 13 2013, 07:40
|
Местный
  
Группа: Свой
Сообщений: 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, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет.
|
|
|
|
|
Jun 13 2013, 18:21
|

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

|
Цитата(Дмитрий Мазунин @ Jun 13 2013, 11:40)  Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки. Мы храним на флэше ELF, и разбираем его прямо при загрузке. Если интересно, могу прислать исходник разборки ELF, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет. Да, выложите пожалуйста, думаю многим будет интересно - как самому ТС, так и мне возможно в будущем потребуется. Я полагал ELF это сложный формат, не хотелось с ним ковыряться, к тому же вероятно такой парсер ELF-а может не влезть в 8 Кб памяти вместе с загрузчиком, я хочу в будущем обойтись лишь минимально возможной памятью для загрузчика. Сейчас флэшка у меня огромная и я даже текущими успехами счастлив, но если можно сэкономить место храня просто ELF, то это плюс.
--------------------
|
|
|
|
|
Jun 14 2013, 08:24
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|