vitkorob 0 21 августа, 2017 Опубликовано 21 августа, 2017 · Жалоба Пишу программу RAM-загрузчик для прошивки флешки непопулярного МК через J-Link Commander или через J-Flash - https://wiki.segger.com/Adding_Support_for_New_Devices В этой программе надо разделить код в ELF-файле на 3 секции, название которых PrgCode, PrgData, DevDscr. Для этого я написал скрипт линкера (он в листенге ниже). При написании опирался на мануал - https://www.iar.com/support/tech-notes/link...ap-file-v.5.xx/ /* * Define a memory region that covers the entire 4 GB * addressible space of the processor. */ define memory mem with size = 4G; /* * Define a region for the on-chip SRAM */ define region RAM_region = mem:[from 0x20000000 to 0x2002FFFF]; /* * Indicate that the read/write values should be * initialized by copying from flash. */ initialize manually with packing=none { readwrite }; "PrgData": place in RAM_region { readwrite }; "PrgCode": place in RAM_region { readonly }; "DevDscr": place in RAM_region { readonly section DevDscr }; После получения ELF-файла я проверял названия секций утилитой arm-none-eabi-readelf.exe из пакета GNU Tools ARM. К сожалению, я наблюдал, что имена секций МЕНЯЛИСЬ! К секциям приписывался один из суффиксов rw, ro, zi (см. таблицу ниже) Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 00392c 000000 00 0 0 4 [ 1] .shstrtab STRTAB 00000000 00392c 0000e0 00 0 0 4 [ 2] .strtab STRTAB 00000000 003a0c 0002a2 00 0 0 4 [ 3] .symtab SYMTAB 00000000 003cb0 000330 10 2 37 4 [ 4] PrgData zi NOBITS 20000000 000034 00003c 01 WA 0 0 4 [ 5] PrgCode ro PROGBITS 2000003c 000034 000100 01 AX 0 0 4 [ 6] DevDscr ro PROGBITS 2000013c 000134 0010a0 01 A 0 0 4 Из-за это верхний уровень (J-Link Commander, J-Flash) ломается - не может распарсить ELF-файл, чтобы найти функции прошивки флеша. Пожалуйста, помогите найти способ предотвратить такой калечение имён секций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 21 августа, 2017 Опубликовано 21 августа, 2017 · Жалоба "Из-за это(го) .... не может распарсить ...." - а диагностика "нехочухи" есть ? Есть некоторая вероятность, что дело не в именах секций, а например, в опциях-настройке линкера. В файле .map имена правильные ? Если есть возможность - загрузите elf в софт-эмулятор и посмотрите, правильно ли "ложатся" секции на требуемые адреса RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 21 августа, 2017 Опубликовано 21 августа, 2017 · Жалоба GNU Tools ARM. По IAR'у не подскажу, но можно пойти другим путем, раз уж инструментарий в наличии: objcopy --rename-section oldname=newname Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitkorob 0 22 августа, 2017 Опубликовано 22 августа, 2017 · Жалоба "Из-за это(го) .... не может распарсить ...." - а диагностика "нехочухи" есть ? Есть некоторая вероятность, что дело не в именах секций, а например, в опциях-настройке линкера. В файле .map имена правильные ? Если есть возможность - загрузите elf в софт-эмулятор и посмотрите, правильно ли "ложатся" секции на требуемые адреса RAM. Софт J-Link просто пишет одну строку, что не может найти секцию PrgCode в указанном elf-файле - вот и вся диагностика "нехочухи". В map-файле имена правильные, нет ни намека на приписку суффиксов ro, rw, zi. Я уверен, что дело в изменении имен секций линковщиком IAR, потому что после того как "подшаманил" имена секций HEX-редактором, то эту валидацию elf-файл начал проходить. По IAR'у не подскажу, но можно пойти другим путем, раз уж инструментарий в наличии: objcopy --rename-section oldname=newname Похоже это трагедия IAR'а. Действительно придётся пользоваться дополнительными инструментами для исправления. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 28 августа, 2017 Опубликовано 28 августа, 2017 · Жалоба Пишу программу RAM-загрузчик для прошивки флешки непопулярного МК через J-Link Commander или через J-Flash В этой программе надо разделить код в ELF-файле на 3 секции, название которых PrgCode, PrgData, DevDscr. А зачем вообще Вам эти имена при прошивке? Что Вы с ними делаете? А если в следующей прошивке имена этих секций в icf-файле будут другие? Или программисту нужно будет добавить новые секции, в другие регионы памяти? Что будете делать? Для того чтобы определить - нужна секция для прошивки или нет, вроде как достаточно (и более правильно) использовать только флаги (столбец "Flg"). Да - а почему elf-файл, а не hex? Я писал подобный прошивальщик основанный на hex от IAR - проблем никаких не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться