nanorobot 6 4 сентября, 2023 Опубликовано 4 сентября, 2023 (изменено) · Жалоба 5 minutes ago, mantech said: А я вижу это так, есть бинарь, скомпилированный под адрес 0х40000000 и который нормально работает. После этого вы в начало этого бинаря прошиваете какую-то непонятную инфу с вашими хидерами и пр и он почему-то перестает работать? Да и с чего бы так))))))) Допустим, ваш хидер занимает 16 байт. Вы должны указать линкеру, что старт будет со смещением в 16 байт, а потом через секции линкера дописать ваш хидер, после этого грузить бинарь с адрема 40000000, а запускать с этого адреса+ 16... Об этом и разговор. Я собственно так и написал в первом посте. С линкером отношения не складываются .. Изменено 4 сентября, 2023 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 (изменено) · Жалоба 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 } Изменено 4 сентября, 2023 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 2 минуты назад, sasamy сказал: может взять u-boot и грузить elf ? ИМХО, это заметно сложнее, чем сделать смещение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 6 4 сентября, 2023 Опубликовано 4 сентября, 2023 (изменено) · Жалоба 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 = .; } Изменено 4 сентября, 2023 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 (изменено) · Жалоба 7 минут назад, nanorobot сказал: Это похоже ИАР? У меня GCC GCC И я вообще не вижу, где у вас стартовый адрес указан? В ИДЕ где-то указывали? SECTIONS { .start : { *(.start) } > ROM .ivc : {. = ALIGN(32); *(.ivc) *(.rodata)} > ROM .text : { *(.text) } > ROM .rodata : { *(.rodata) } > ROM .data : { *(.data) } > ROM Изменено 4 сентября, 2023 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба On 9/4/2023 at 3:14 PM, mantech said: ИМХО, это заметно сложнее, чем сделать смещение... если делать в eclipse то наверно 🙂 а вообще только строку загрузки написать - откуда грузить и как запускать, вот тут лог загрузка elf имиджа для dsp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 1 минуту назад, sasamy сказал: если делать в eclipse то наверно Да, именно там и делаю. Где ТС делает - х.з. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 6 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 1 minute ago, mantech said: Да, именно там и делаю. Где ТС делает - х.з. тоже Eclipse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба On 9/4/2023 at 3:28 PM, nanorobot said: тоже Eclipse https://habr.com/ru/articles/578830/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 7 минут назад, sasamy сказал: https://habr.com/ru/articles/578830/ Да уж... У меня к счастью все куда проще... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба On 9/4/2023 at 3:41 PM, mantech said: У меня к счастью все куда проще... не знаю - никогда не пользовался еклипсом, u-boot прикольный потому что универсальный - достаточно разобраться на одном процессоре и по аналогии делать на любом другом, но грузит медленней. Я не настаиваю - кому-то каждый раз новый загрузчик делать удобней 🙂 По началу для t113 кроме awboot альтернативы не было - сейчас появляется https://patchwork.ozlabs.org/project/uboot/list/?series=365063 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба 2 минуты назад, sasamy сказал: Я не настаиваю - кому-то каждый раз новый загрузчик делать удобней Из-за вот этой универсальности все сложнее становится разобраться в этих деревьях зависимостей, хотя конечно, кому как... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 6 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба Нашел ошибку в своей процедуре чтения из 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 с уарта в файл и сравнить файлы побайтово, так наверное завтра и поступлю, хотя и чувствую, что это лишнее ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 7 часов назад, nanorobot сказал: Никаких хидеров и смещений векторов, в SPI NOR пишу чистый рабочий бинарник. Это еще как? То есть слинковали программу так, как будто она без загрузчика? И на что тогда надеетесь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться