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

T113-S3. Ламерский вопрос по работе бутлоадера.

5 minutes ago, mantech said:

А я вижу это так, есть бинарь, скомпилированный под адрес 0х40000000  и который нормально работает. После этого вы в начало этого бинаря прошиваете какую-то непонятную инфу с вашими хидерами и пр и он почему-то перестает работать? Да и с чего бы так)))))))

Допустим, ваш хидер занимает 16 байт. Вы должны указать линкеру, что старт будет со смещением в 16 байт, а потом через секции линкера дописать ваш хидер, после этого грузить бинарь с адрема 40000000, а запускать с этого адреса+ 16...

Об этом и разговор. Я собственно так и написал в первом посте.  С линкером отношения не складываются  ..

Изменено пользователем nanorobot

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


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

3 минуты назад, nanorobot сказал:

С линкером отношения не складываютя  ..

START_ADDR = 0x40000000 ; /* Entry Point */
 Здесь сложно прибавить размер хидера?

 

START_ADDR = 0x40000000 ; /* Entry Point */

ROM_SIZE    = 512K  ; /* Size of "Read-Only" Data  */
RAM_SIZE    =   2M  ; /* Size of Static R/W Data   */
HEAP_SIZE   =  21M  ; /* Heap Size                 */
STACK_SIZE  = 512K  ; /* Stack Size                */

ROM_BASE    = START_ADDR              ;
RAM_BASE    = ROM_BASE   +  ROM_SIZE  ;
HEAP_BASE   = RAM_BASE   +  RAM_SIZE  ;
STACK_BASE  = HEAP_BASE  +  HEAP_SIZE ;

ENTRY(start)

MEMORY
{
 ROM    (RX) : ORIGIN = ROM_BASE    , LENGTH =    ROM_SIZE
 RAM    (RW) : ORIGIN = RAM_BASE    , LENGTH =    RAM_SIZE
 HEAP   (RW) : ORIGIN = HEAP_BASE   , LENGTH =   HEAP_SIZE
 STACK  (RW) : ORIGIN = STACK_BASE  , LENGTH =  STACK_SIZE
}

Изменено пользователем mantech

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


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

On 9/4/2023 at 2:47 PM, nanorobot said:

Ранее, для F1C100S я использовал бутлоадер Simple Loader и там был задан подход близкий к BROM,  приложение пишется в SPI NOR с адреса 0х10000, с хидером,  Simple Loader считывает из него Magic code и параметры прошивки. Я этот подход пытаюсь распространить и на текущий проект с Т113, модифицируя под него awboot

 

может взять u-boot и грузить elf ?

https://github.com/u-boot/u-boot/blob/master/cmd/elf.c#L298

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


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

2 минуты назад, sasamy сказал:

может взять u-boot и грузить elf ?

ИМХО, это заметно сложнее, чем сделать смещение...

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


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

20 minutes ago, mantech said:

START_ADDR = 0x40000000 ; /* Entry Point */
 Здесь сложно прибавить размер хидера?

 

START_ADDR = 0x40000000 ; /* Entry Point */

ROM_SIZE    = 512K  ; /* Size of "Read-Only" Data  */
RAM_SIZE    =   2M  ; /* Size of Static R/W Data   */
HEAP_SIZE   =  21M  ; /* Heap Size                 */
STACK_SIZE  = 512K  ; /* Stack Size                */

ROM_BASE    = START_ADDR              ;
RAM_BASE    = ROM_BASE   +  ROM_SIZE  ;
HEAP_BASE   = RAM_BASE   +  RAM_SIZE  ;
STACK_BASE  = HEAP_BASE  +  HEAP_SIZE ;

ENTRY(start)

MEMORY
{
 ROM    (RX) : ORIGIN = ROM_BASE    , LENGTH =    ROM_SIZE
 RAM    (RW) : ORIGIN = RAM_BASE    , LENGTH =    RAM_SIZE
 HEAP   (RW) : ORIGIN = HEAP_BASE   , LENGTH =   HEAP_SIZE
 STACK  (RW) : ORIGIN = STACK_BASE  , LENGTH =  STACK_SIZE
}

 

Это похоже ИАР? У меня GCC, там линкер другой системы, менее внятный ..

SECTIONS
{

    __text_start = .;
    .text :
    {
        *(.vectors)
        *(.text)
        *(.text.*)

        /* section information for utest */
        . = ALIGN(4);
        __rt_utest_tc_tab_start = .;
        KEEP(*(UtestTcTab))
        __rt_utest_tc_tab_end = .;
        
        /* section information for finsh shell */
        . = ALIGN(4);
        __fsymtab_start = .;
        KEEP(*(FSymTab))
        __fsymtab_end = .;
        . = ALIGN(4);
        __vsymtab_start = .;
        KEEP(*(VSymTab))
        __vsymtab_end = .;

        /* section information for var export */
        . = ALIGN(4);
        __ve_table_start = .;
        KEEP(*(SORT(*.VarExpTab.*)))
        __ve_table_end = .;

        /* section information for modules */
        . = ALIGN(4);
        __rtmsymtab_start = .;
        KEEP(*(RTMSymTab))
        __rtmsymtab_end = .;

        /* section information for initialization */
        . = ALIGN(4);
        __rt_init_start = .;
        KEEP(*(SORT(.rti_fn*)))
        __rt_init_end = .;
    }=0
    __text_end = .;

    __exidx_start = .;
    .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
    __exidx_end = .;

    __rodata_start = .;
    .rodata   : { *(.rodata) *(.rodata.*) }
    __rodata_end = .;

    . = ALIGN(4);
    .ctors :
    {
        PROVIDE(__ctors_start__ = .);
        KEEP(*(SORT(.ctors.*)))
        KEEP(*(.ctors))
        PROVIDE(__ctors_end__ = .);
    }

    .dtors :
    {
        PROVIDE(__dtors_start__ = .);
        KEEP(*(SORT(.dtors.*)))
        KEEP(*(.dtors))
        PROVIDE(__dtors_end__ = .);
    }

    . = ALIGN(8);
    __data_start = .;
    .data :
    {
        *(.data)
        *(.data.*)
    }
    __data_end = .;

    . = ALIGN(8);
    __bss_start = .;
    .bss       :
    {
    *(.bss)
    *(.bss.*)
    *(COMMON)
    . = ALIGN(4);
    }
    . = ALIGN(4);
    __bss_end = .;

    /* Stabs debugging sections.  */
    .stab 0 : { *(.stab) }
    .stabstr 0 : { *(.stabstr) }
    .stab.excl 0 : { *(.stab.excl) }
    .stab.exclstr 0 : { *(.stab.exclstr) }
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment 0 : { *(.comment) }

    _end = .;
}

 

Изменено пользователем nanorobot

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


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

7 минут назад, nanorobot сказал:

Это похоже ИАР? У меня GCC

GCC

И я вообще не вижу, где у вас стартовый адрес указан? В ИДЕ где-то указывали?

SECTIONS
{

 .start    : { *(.start)    } > ROM
 .ivc      : {. = ALIGN(32); *(.ivc) *(.rodata)} > ROM
 .text     : { *(.text)     } > ROM
 .rodata   : { *(.rodata)   } > ROM
 .data     : { *(.data)     } > ROM
 

Изменено пользователем mantech

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


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

On 9/4/2023 at 3:14 PM, mantech said:

ИМХО, это заметно сложнее, чем сделать смещение...

если делать в eclipse то наверно 🙂 а вообще только строку загрузки написать - откуда грузить и как запускать, вот тут лог загрузка elf имиджа для dsp

 

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


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

1 минуту назад, sasamy сказал:

если делать в eclipse то наверно

Да, именно там и делаю. Где ТС делает - х.з.

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


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

7 минут назад, sasamy сказал:

Да уж... У меня к счастью все куда проще...

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


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

On 9/4/2023 at 3:41 PM, mantech said:

У меня к счастью все куда проще...

не знаю - никогда не пользовался еклипсом, u-boot прикольный потому что универсальный - достаточно разобраться на одном процессоре и по аналогии делать на любом другом, но грузит медленней. Я не настаиваю - кому-то каждый раз новый загрузчик делать удобней 🙂 По началу для t113 кроме awboot альтернативы не было - сейчас появляется

https://patchwork.ozlabs.org/project/uboot/list/?series=365063

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


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

2 минуты назад, sasamy сказал:

Я не настаиваю - кому-то каждый раз новый загрузчик делать удобней

Из-за вот этой универсальности все сложнее становится разобраться в этих деревьях зависимостей, хотя конечно, кому как...

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


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

Нашел ошибку в своей процедуре чтения из SPI NOR. Исправил. Упростил задачу до мыслимого предела. Никаких хидеров и смещений векторов, в SPI NOR пишу чистый рабочий бинарник. В бутлоадере, после загрузки из SPI NOR  в DDR  вывожу полный дамп DDR в уарт, визуально сличаю с файлом бинарника(не весь, разумеется, первые пару сотен байт, последние пару сотен, и в нескольких произвольных точках. После этого запускаю:

     arm32_mmu_disable();
     arm32_dcache_disable();
     arm32_icache_disable();
     arm32_interrupt_disable();
     __asm__ __volatile__ ("ldr pc, =0x40000000" : : : "memory");

не работает... ((  в бутлоадер не возвращается ...

можно конечно сделать вывод дампа DDR с уарта в файл и сравнить файлы побайтово, так наверное завтра и поступлю, хотя и чувствую, что это лишнее ...

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


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

7 часов назад, nanorobot сказал:

Никаких хидеров и смещений векторов, в SPI NOR пишу чистый рабочий бинарник.

Это еще как? То есть слинковали программу так, как будто она без загрузчика? И на что тогда надеетесь?:popcorm1:

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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