Jump to content

    

Прилинковать HEX-файл, к файлу проекта

Пишу(пытаюсь) проект для LPC4357 с использованием обоих ядер. Не дойду своим умом как прилинковать hex (ну или elf) ядра M0 к основному elf проекта. Смотрел соответствующие демо проекты для IDE LPCXpresso, но там другие подходы. Есть понимание, что делать это надо в скрипте линкера, но полной ясности нет. Прошу помощи.

Share this post


Link to post
Share on other sites

Совсем необязательно делать это в скрипте линкера. Проще преобразовать файл из формата hex в формат elf утилитой objcopy из комплекта GNU binutils, а затем полученный elf прилинковать к проекту точно также как и все остальные объектные файлы.

Share this post


Link to post
Share on other sites
Совсем необязательно делать это в скрипте линкера. Проще преобразовать файл из формата hex в формат elf утилитой objcopy из комплекта GNU binutils, а затем полученный elf прилинковать к проекту точно также как и все остальные объектные файлы.

 

 

В сухом остатке:

- Как прилинковать файл?

- Да так же, как и все остальные!

 

Этот файл, по оношению к проекту, сторонний. Вот как то и нужно линкеру указать путь к нему, адрес линковки и т.п.

Как это сделать - об этом и был вопрос

Share this post


Link to post
Share on other sites
В сухом остатке:

- Как прилинковать файл?

- Да так же, как и все остальные!

 

Этот файл, по оношению к проекту, сторонний. Вот как то и нужно линкеру указать путь к нему, адрес линковки и т.п.

Как это сделать - об этом и был вопрос

Назревает вопрос:

Что вы хотите получить на выходе "объединения" кода от двух ядер? Один общий HEX файл или один общий elf файл?

Share this post


Link to post
Share on other sites
Назревает вопрос:

Что вы хотите получить на выходе "объединения" кода от двух ядер? Один общий HEX файл или один общий elf файл?

 

Не считал этот момент принципиальным, ибо нынешний скрипт линкера дает оба формата. Но если нужно выбрать что то одно, я предпочел бы elf.

Edited by nanorobot

Share this post


Link to post
Share on other sites
Не считал этот момент принципиальным, ибо нынешний скрипт линкера дает оба формата. Но если нужно выбрать что то одно, я предпочел бы elf.

Хм. Скрипт линкера не даёт вообще никаких выходных файлов. Вообще он к выходным форматам отношения не имеет.

Если нужно получить один общий HEX, то лучший способ - ознакомиться с у утилитами objcopy и srecord

Общий elf имеет смысл получать только для целей отладки. Т.к. для M0 ядра у вас отладочной информации в HEX скорее всего не содержится, то преобразование HEX -> ELF ИМХО бессмысленно.

П.С.

Опишите подробнее, что у вас имеется, и что вы хотите сделать.

Что вы называете "проектом"? Для меня "проект" в разделе "opensource" это, например, Makefile.

Share this post


Link to post
Share on other sites
Хм. Скрипт линкера не даёт вообще никаких выходных файлов. Вообще он к выходным форматам отношения не имеет.

Если нужно получить один общий HEX, то лучший способ - ознакомиться с у утилитами objcopy и srecord

Общий elf имеет смысл получать только для целей отладки. Т.к. для M0 ядра у вас отладочной информации в HEX скорее всего не содержится, то преобразование HEX -> ELF ИМХО бессмысленно.

П.С.

Опишите подробнее, что у вас имеется, и что вы хотите сделать.

Что вы называете "проектом"? Для меня "проект" в разделе "opensource" это, например, Makefile.

 

 

Под проектом я понимаю совокупность исходных и заголовочных файлов, Makefile и скриптов линкера. Проект начат на основе готового, взятого в инете, демо-проекта. Помаленьку обрастает функционалом. Часть проекта, которая на M4 - GUI, клавиши. леды, - HMI, короче говоря. На ядре M0 - критичный ко времени функционал. Ранее проект был начат на IAR, в котором я имею сравнительно приличный опыт. По причинам, которые долго излагать, пришлось

перейти на GCC, в котором опыта практически не имею. Продвигаюсь вперед методом проб и ошибок. На данном этапе, естественно, работа идет по схеме "+20 строк кода->компиляция->заливка, проверка". Использую JLink. Поэтому пока интересует общий elf. С отладочной информацией для обоих ядер. Преобразования elf<->hex пока не обсуждаем. Далее будет видно. В головном посте hex был употреблен по недосмотру.

В итоге:

Имеется два независимых(с точки зрения IDE ) проекта. Один для LPC4357_M4, другой LPC4357_M0. Требуется об'яснить линкеру проекта для M4, что в такой то папке, надо взять такие то файлы и включить их в состав выходного файла формата elf.

Share this post


Link to post
Share on other sites
Имеется два независимых(с точки зрения IDE ) проекта. Один для LPC4357_M4, другой LPC4357_M0. Требуется об'яснить линкеру проекта для M4, что в такой то папке, надо взять такие то файлы и включить их в состав выходного файла формата elf.

Ну конечно всё в этом мире возможно особенно с gnu. Но как вы себе представляете есть у вас функция main() или переменная SystemFrequency и что? вот вы в отладчик вводите в Watch и получаете что?

Вам для чего два образа? Если просто для прошивки, то создаёте массив байт из бинарного файла --> обзываете его как нибудь типа __Attribute__(section(cortex_m0_core)) и в скрипте линкера пихаете его в необходимую Вам секцию по определённому адресу -- в этом случае наверное ваш JLink будет прошивать оба проекта.

 

 

 

Share this post


Link to post
Share on other sites
Ну конечно всё в этом мире возможно особенно с gnu. Но как вы себе представляете есть у вас функция main() или переменная SystemFrequency и что? вот вы в отладчик вводите в Watch и получаете что?

Вам для чего два образа? Если просто для прошивки, то создаёте массив байт из бинарного файла --> обзываете его как нибудь типа __Attribute__(section(cortex_m0_core)) и в скрипте линкера пихаете его в необходимую Вам секцию по определённому адресу -- в этом случае наверное ваш JLink будет прошивать оба проекта.

 

 

Вполне осознал тупость своего вопроса. Благодарю за науку. В IAR там как то не задумываешься над этими тонкостями(довольно толстыми тонкостями, как оказалось). Просто сохранились воспоминания что была возможность отлаживаться, как для M4 так и для M0, открывая соответствующий проект. Но как же тогда должен называться этот кентавр ? Файл типа elf с отладочной информацией для M4 и прилинкованный к нему Hex для M0? Такое бывает ?

Или просто 2 слитых хекса, без возможности отладки? Не дайте помереть дураком...

 

Вполне осознал тупость своего вопроса. Благодарю за науку. В IAR там как то не задумываешься над этими тонкостями(довольно толстыми тонкостями, как оказалось). Просто сохранились воспоминания что была возможность отлаживаться, как для M4 так и для M0, открывая соответствующий проект. Но как же тогда должен называться этот кентавр ? Файл типа elf с отладочной информацией для M4 и прилинкованный к нему Hex для M0? Такое бывает ?

Или просто 2 слитых хекса, без возможности отладки? Не дайте помереть дураком...

 

вроде что то стало доходить: должно быть три файла: один хекс с частями для обоих ядер, и два ELF , по одному для каждого ядра, для отладки. Но как сие получить - пока все равно загадка.

 

Edited by nanorobot

Share this post


Link to post
Share on other sites
вроде что то стало доходить: должно быть три файла: один хекс с частями для обоих ядер, и два ELF , по одному для каждого ядра, для отладки.

Да, самый разумный вариант.

 

Но как сие получить - пока все равно загадка.

Сначала отделите мухи от котлет. Сделайте два "проекта" всё что относится к M0 в один, остальное в другой. Если будут сложности по сборке каждого проекта - обращайтесь.

Потом с помощью objcopy и srecord можно всё это поместить в один хекс.

Начните с раздельных ELF.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this