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

 
 
> Свой загрузчик
juvf
сообщение May 18 2011, 10:09
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Не получается ни как загрузчик сделать. Пишу от отчаянья. Тренируюсь уже на кошках. Нужно разместить загрузчик в ончип, который при запуске скопирует программу из EPCS в SDRAM и передаст ей управление. Делаю всё по пдф an458.pdf Скачал демо-загрузчик с альтеры. Только платформу свою сделал. Делаю все как доктора прописали:

1) создал в SOPC cвой процессор со своей периферией, рис1. Вектор сброса и прерываний в cpu на boot_rom, офсет ресета = 0, офсет прерываний = 0х20, размер boot_rom 8 Кбайт. Сгенерировал *.sopc
2) поместил в папру проекта папку с примером загрузчика boot_copier_sw
3) открыл файл <project>/boot_copier_sw/bsp/advanced_boot_copier/boot_copier_bsp_settings.tcl в текстовом редакторе. исправил следующие настройки

set ONCHIP 1

set EXCEPTION_OFFSET 0x20
set RESET_OFFSET 0x00000000

set BOOT_ROM_SIZE 0x2000

set SDRAM_SIZE 0x07FFFFF // я так понял что это размер моей внешней SDRAM в байтах
set FLASH_SIZE 0x080000 // а это размер EPCS. У меня EPCS4, соответственно выставил 512 Кбайт

заменил имена периферии на свои, peripheral_subsystem_jtag_uart на jtag_uart, peripheral_subsystem_sys_clk_timer на timerSys.
из-за строчки "add_memory_region ext_flash ext_flash $EXT_FLASH_REGION_START $EXT_FLASH_REGION_SIZE" была ошибка, не мог сделать регион .ext_flash. т.к. я внешнюю cfi не собираюсь использовать, то я эту строку закомментировал.

4) подправил <project>/boot_copier_sw/app/advanced_boot_copier/advanced_boot_copier.c
указал метод #define BOOT_METHOD BOOT_EPCS_FROM_ONCHIP_ROM
исправил имя порта с лампочками PERIPHERAL_SUBSYSTEM_LED_PIO_BASE на своё IOLED_BASE

5) запустил из <project>/boot_copier_sw/app/advanced_boot_copier скрипт ./create-this-app и получил заветный выхлоп удачной сборки
Код
Info: (advanced_boot_copier.elf) 8788 Bytes program size (code + initialized data).
Info:                            184 Bytes free for stack + heap.
Info: Creating advanced_boot_copier.objdump
nios2-elf-objdump --disassemble --syms --all-header advanced_boot_copier.elf >advanced_boot_copier.objdump
[advanced_boot_copier build complete]

To download and run the application:
    1. Make sure the board is connected to the system.
    2. Run 'nios2-configure-sof <SOF_FILE_PATH>' to configure the FPGA with the hardware design.
    3. If you have a stdio device, run 'nios2-terminal' in a different shell.
    4. Run 'make download-elf' from the application directory.

To debug the application:
    Import the project into Nios II IDE.  Refer to Nios II IDE Documentation for more information.

Только вот смущает 8788 Bytes program size, вроде для этого проекта по инструкции нужно выделить 8 Кбайт, а код занимает немного больше. ??? Ну да ладно, альтеровцам виднее.

6) Теперь тестовый проект Hello World. Перехожу в <project>/boot_copier_sw/app/hello_world и запускаю ./create-this-app. Здесь ни чего сложного, ни чего править не нужно
вывод
Код
Info: (hello_world.elf) 46 KBytes program size (code + initialized data).
Info:                   8138 KBytes free for stack + heap.
Info: Creating hello_world.objdump
nios2-elf-objdump --disassemble --syms --all-header --source hello_world.elf >hello_world.objdump
[hello_world build complete]


7) Packing the Test Application in a Boot Record
скрипт make_flash_image_script.sh почему-то не заработал. не может создать копию эльфа в hello_world.elf.tmp.elf, пишет
Код
ERROR: trying to strip entry section from elf file hello_world.elf.tmp.elf
Permission denited!
в скрипте закоментировал это копирование и из файл менеджера сам сделал копию. запустил скрипт.......
тут интересный момент. вот в оригинале как сказано
Цитата
Open <project>/boot_copier_sw/app/hello_world/make_flash_image_script.sh in
a text editor and update the flash_base and flash_end parameters to match your
system.
в переводе Егорова
Цитата
...обновите параметры flash_base и flash_end на те, что вы сделали в системе.
Вот тут загвоздка! что за адреса flash_base and flash_end? Я задовал в системе адреса контроллера епцс. Больше я адресов с флеш ни каких не делал. Выставил начальный и конечные адреса епцс-флеш-контроллера. Получаю ошибку
Код
(WARNING) elf2flash: ELF file will not fit in flash.  No flash file created

ERROR: converting srec file hello_world.elf.tmp.srec to binary.
А какое ещё адрес выставлять? ну по умолчанию в скрипте были
Код
flash_base=0x00000000;
flash_end=0x00FFFFFF;
чем-то напоминает на внутренние адреса в EPCS-FLASH. т.е. нужно указать минимальный адрес и максимальный той epcs-флешке, которая стоит на плате. Запускаю скрипт.... вижу завтеное "Script completed successfully."

8) Booting CFI or EPCS Flash From On-Chip Memory
Выполняю "elf2hex advanced_boot_copier.elf 0x1810000 0х1811FFF --width=32 --create-lanes=0 ../../../boot_rom.hex" и получаю нужный boot_rom.hex

9)В квартусе запускаю компиляцию. Умный компилятор только подхватил мой boot_rom.hex для инициализации onchip-memory boot_rom
10)команда "bin2flash --input=hello_world.elf.flash.bin --output=hello_world.flash --location=0x00060000"
11)команда "nios2-flash-programmer --base=<flash_base> --epcs hello_world.flash", выход команды
Код
Using cable "USB-Blaster [USB-1]", device 1, instance 0x01
Resetting and pausing target processor: OK

              : Checksumming existing contents          

00060000      : Verifying existing contents            

00060000      : Reading existing contents              

Checksummed/read 19kB in 0.4s                                        

00060000 ( 0%): Erasing                                

Erased 64kB in 0.6s (106.6kB/s)                        

00060000 ( 0%): Programming                            

Programmed 46KB +18KB in 1.4s (45.7KB/s)                  
Did not attempt to verify device contents
Leaving target processor paused

12)команда "nios2-download -r -g"
светодиоды не маргнули, а должны вроде....
13)команда "nios2-terminal"
14)жму ресет - тишина. Ни мигание лампочек, ни в терминале текста sad.gif


Где я оступился? Кому-нибудь удавалось свой загрузчик написать?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gosu-art
сообщение Aug 29 2012, 14:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Можно у вас поинтересоваться. Получалось ли загружаться в SDRAM при использовании стандартного бутлода EPCS?
Создал простой проект, попробовал ваш вариант со "своим загрузчиком" - работает! Но у меня блоков памяти в реальном проекте мало осталось, не хватит. А с использованием бутлода EPCSки не хочет грузится, хоть убей. И програмером пробовал, и консолью - не работает 1111493779.gif
Пытался сделать так. Во всех вариантах Ниос видится, а программа не стартует.
Помогите пожалуйста!
Go to the top of the page
 
+Quote Post
juvf
сообщение Oct 10 2012, 10:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(gosu-art @ Aug 29 2012, 20:13) *
Можно у вас поинтересоваться. Получалось ли загружаться в SDRAM при использовании стандартного бутлода EPCS?
Создал простой проект, попробовал ваш вариант со "своим загрузчиком" - работает! Но у меня блоков памяти в реальном проекте мало осталось, не хватит. А с использованием бутлода EPCSки не хочет грузится, хоть убей.

Если ещё актуально.... Да, со стандартным загрузчиком EPCS всё прекрасно работает. Только некоторые чипы перестали шиться флешпрограмматором. Стал конвертировать sof и elf в hex-ы, а из хексов делаю jic. по вашей ссылке jic делается сразу из sof. уже не помню почему я делаю через хекс, но по мойму сразу из софа что-то не пошло.

может вектора прерываний не правильно настроенны в BSP?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- juvf   Свой загрузчик   May 18 2011, 10:09
- - Reanimator++   А зачем вам свой загрузчик? ) Может проще обойтись...   May 18 2011, 16:40
|- - vadimuzzz   Цитата(Reanimator++ @ May 18 2011, ...   May 18 2011, 23:07
|- - juvf   Цитата(Reanimator++ @ May 18 2011, ...   May 19 2011, 02:33
|- - barabek   Цитата(juvf @ May 19 2011, 13:33) До того...   May 19 2011, 04:27
- - barabek   Цитата(juvf @ May 18 2011, 21:09) Где я о...   May 18 2011, 23:27
- - juvf   в общем по инструкции ан458 не получилось собрать ...   May 19 2011, 08:08
- - Sergey'F   Если я правильно понял вопрос, то весь процесс пои...   May 19 2011, 10:06
|- - juvf   Цитата(Sergey'F @ May 19 2011, 16:06)...   May 20 2011, 10:30
- - Sergey'F   Рискну предположить, что у Вас все-таки CycloneIII...   May 20 2011, 11:29
|- - juvf   Цитата(Sergey'F @ May 20 2011, 17:29)...   May 25 2011, 08:42
|- - Sergey'F   Цитата(juvf @ May 25 2011, 12:42) В общем...   May 25 2011, 14:47
|- - juvf   Цитата(Sergey'F @ May 25 2011, 20:47)...   May 25 2011, 16:07
- - gosu-art   Еще актуально, хотя я приостановил это дело. Reset...   Oct 10 2012, 11:39
- - prussta   Добрый день! Делаю все как по шпаргалке от juv...   Jun 24 2015, 03:08
- - viktory_93   Спасибо за замечательную шпаргалку! Правда не ...   Jan 25 2017, 13:01


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:53
Рейтинг@Mail.ru


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