Перейти к содержанию
    

SoC Cyclon V. Конвертация axf в img

Работаю с Quartus 17.0 + SoC EDS.

Тренируюсь на KIT для Cyclon V.

На SD карточке зашивка ПЛИС и baremetal программка.

При включении Preloader грузит зашивку ПЛИС, я вижу что она работает.

А вот baremetal программа не работает(светодиоды не мигают).

 

Чувствую что ошибка где-то при переходе от файла axf к файлу img.

Я получил файл img следующим образом.

 

Преобразовал файл axf в bin командой

arm-altera-eabi-objcopy\

-O binary altera_gcc_hps_led.axf\

altera_gcc_hps_led.bin

 

Преобразовал файл bin в img командой

mkimage\

-A arm\

-O u-boot\

-T standalone\

-C none\

-a 0x100040\

-e 0x100040\

-n "baremetal image"\

-d altera_gcc_hps_led.bin\

altera_gcc_hps_led.img

 

Я не понимаю какой смысл несут параметры

-a адрес загрузки и -е точка входа,

чувствую что ошибка где-то здесь, а в чем не могу понять.

 

 

В свойствах проекта DS-5 линкеру указывается файл cycloneV-dk-ram.ld

На просторах интернета видел вот такой совет.

Будто бы файл для линкера cycloneV-dk-ram.ld надо поправить руками,

а конкретно на строке 24 должно быть так

MEMORY

{

boot_rom (rx) : ORIGIN = 0xfffd0000, LENGTH = 64K

oc_ram (rwx) : ORIGIN = 0xffff0000, LENGTH = 64K

/* Need to have 64bytes available before start of program, to store the mkimage header */

ram (rwx) : ORIGIN = 0x100000 + 0x40, LENGTH = 1023M - 0x40

}

 

Я это пока не пробовал и не понимаю зачем это.

 

Кто нибудь пролейте свет по этому вопросу?

Зачем руками править файл cycloneV-dk-ram.ld

И какой смысл несут параметры -a адрес загрузки и -е точка входа команды mkimage.

И как это вообще все друг с другом связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Преобразовал файл bin в img командой

mkimage\

-A arm\

-O u-boot\

-T standalone\

-C none\

-a 0x100040\

-e 0x100040\

-n "baremetal image"\

-d altera_gcc_hps_led.bin\

altera_gcc_hps_led.img

 

Я не понимаю какой смысл несут параметры

-a адрес загрузки и -е точка входа,

чувствую что ошибка где-то здесь, а в чем не могу понять.

Приветствую.

Я использую немного другой синтаксис для mkimage :

mkimage -A arm -T standalone -C none -a 0x100000 -e 0 -n "baremetal image" -d app_binary.bin app.img

Попробуйте.

 

В свойствах проекта DS-5 линкеру указывается файл cycloneV-dk-ram.ld

На просторах интернета видел вот такой совет.

Будто бы файл для линкера cycloneV-dk-ram.ld надо поправить руками,

а конкретно на строке 24 должно быть так

MEMORY

{

boot_rom (rx) : ORIGIN = 0xfffd0000, LENGTH = 64K

oc_ram (rwx) : ORIGIN = 0xffff0000, LENGTH = 64K

/* Need to have 64bytes available before start of program, to store the mkimage header */

ram (rwx) : ORIGIN = 0x100000 + 0x40, LENGTH = 1023M - 0x40

}

 

Использую компилятор ARM, файл линкера такой:

SDRAM 0x00100000 0x40000000
{
    VECTORS +0
    {
        * (VECTORS, +FIRST)
    }

    APP_CODE +0
    {
        * (+RO, +RW, +ZI)
    }

  ; Application heap and stack
    ARM_LIB_STACKHEAP  +0 ALIGN 16 EMPTY  0x4000; Application heap and stack
    {
    }
}

OCRAM 0xFFFF0000 0xFFFFF000 
{
    TLB +0 ALIGN 16384 UNINIT 0x4000
    {
        *(tlb_table)
    }
    
    
}

Область OCRAM используется для расположения таблицы MMU, всё остальное - в DDR SDRAM.

Смещение в 64 байта не делаю, нафиг не нужно оказалось.

 

Вообще, неплохо для начала использовать дебаггер, в нём видно будет весь процесс.

А в слепую тяжеловато ковыряться.

 

Прелоадер какую информацию по UART выдаёт?

Лог загрузки (в случае MPL загрузчика) обычно такой:

INIT: MPL build: May  7 2017 20:11:53
INIT: Initializing board.
INIT: MPU clock = 800 MHz
INIT: DDR clock = 400 MHz
INIT: Initializing successful.
MPL: SDRAM Size is 1048576KB.
MPL: Booting from FAT.
FAT: Mounting FAT.
FAT: Read image [app.img] header.
FAT: Read remaining image data.
FAT: Image loaded to memory.
FAT: Read FPGA [fpga.img] header.
FAT: Read remaining FPGA data.
FAT: FPGA loaded to memory.
MPL: FPGA configured.
MPL: Launching next stage.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как, Preloder может выдавать информацию о своем ходе по UART?

Что для этого нужно сделать?

Нужно какие-то галочки поставить в bsp-editor?

Или нужно в DS-5 как-то настроиться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как, Preloder может выдавать информацию о своем ходе по UART?

Что для этого нужно сделать?

Нужно какие-то галочки поставить в bsp-editor?

Или нужно в DS-5 как-то настроиться?

Да, просто поставить галочку в bsp-editor напротив опции SERIAL_SUPPORT.

Потом подключаетесь к порту UART0 со стандартными настройками 9600 8n1 и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PS: по последнему посту поправочка - скорость UART должна быть 115200 бод, а не 9600.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...