Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перемещаемый elf
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
desh
Возможно ли заставить IAR для ARM генерировать перемещаемый (relocatable) elf файл и как это можно сделать?
Для загрузки и выполнения планирую использовать nuttx.
Спасибо.
Непомнящий Евгений
Немного оффтоп. А вы с nuttx работали? Я первый раз о ней слышу, глянул сайт - список поддерживаемого впечатляет. Во фриртосе за интегрированные допплюшки хотят денег, тут вроде как нет. И судя по гитхабу и поддерживаемым платформам - активно развивается
desh
Я с ней работаю в настоящее время. Система очень нравится. Особенно после ~7 лет работы с FreeRTOS.
Нужно понимать, что не все плюшки есть под все платформы, но переносится достаточно легко. Сейчас работаю над поддержкой NAND в STM32 (драйвер есть только для ATSAM).
Чуть ниже есть моя тема со сборкой nuttx под IAR. Порт уже в репозитории, но скрипты для импорта в IAR еще не включены.
В целом для меня тема загрузки elf сейчас осталась последней серьезной задачей.
Непомнящий Евгений
Тогда еще чуток офтопа - как она вам по сравнению с фриртос? Из-за чего переходите? Что лучше, что хуже?
desh
С freertos сравнивать не корректно. Это системы разного уровня и назначения.
Мне кажется, что nuttx лучше сравнивать с системами уровня MQX или eCos, но я не имею опыта работы с ними.
Причина перехода в том, что я делаю телеметрию (в том числе автономную) и у меня нет задач реального времени, но с другой стороны
важны сервисные функции и быстрая адаптация под новые задачи.
На платформе из freertos, fatfs и своих велосипедов я уперся в потолок.
Перехожу, так как вижу в этой системе потенциал для развития.
jcxz
Цитата(desh @ May 13 2016, 17:11) *
Возможно ли заставить IAR для ARM генерировать перемещаемый (relocatable) elf файл и как это можно сделать?

Панелька "Position-independence" в опциях проекта не годится?

Цитата(desh @ May 13 2016, 17:11) *
Для загрузки и выполнения планирую использовать nuttx.

Вы пишете про STM32. А зачем там перемещаемый код? Там код во FLASH обычно находится, а ОЗУ очень мало.
Или у Вас уже во FLASH не лезет и Вы в SDRAM грузите?
desh
Цитата(jcxz @ May 16 2016, 12:19) *
Панелька "Position-independence" в опциях проекта не годится?


Игрался я с этими опциями. Не получилось то, что надо.
Сам файл по прежнему генерируется как ET_EXEC (Executable file), а загрузчик ожидает файл ET_REL (Relocatable file).
Я так понимаю за это отвечает линкер. И вроде бы ранних версиях линкер xlink умел это делать (нашел подборку Rst7, в которой IAR генерил elf - ы для мобильных телефонов Siemens),
а вот с текущим ilink все как то мутно. Видимо придется писать в поддержку IAR.

Цитата(jcxz @ May 16 2016, 12:19) *
Вы пишете про STM32. А зачем там перемещаемый код? Там код во FLASH обычно находится, а ОЗУ очень мало.
Или у Вас уже во FLASH не лезет и Вы в SDRAM грузите?


Да, у меня внешняя SRAM. Хочу разделить прошивку на системную и пользовательскую части.
Система меняется редко в отличии от пользовательской части, а при дистанционном обновлении накладно и долго каждый раз перезаливать всю прошивку целиком.
Кроме того под одно железо часто имеется несколько вариантов пользовательского кода. Возможно так будет легче сопровождать весь зоопарк.
jcxz
Цитата(desh @ May 16 2016, 16:24) *
Да, у меня внешняя SRAM. Хочу разделить прошивку на системную и пользовательскую части.
Система меняется редко в отличии от пользовательской части, а при дистанционном обновлении накладно и долго каждый раз перезаливать всю прошивку целиком.
Кроме того под одно железо часто имеется несколько вариантов пользовательского кода. Возможно так будет легче сопровождать весь зоопарк.

И в чём проблема?
Эти несколько вариантов пользовательского ПО должны одновременно находиться в памяти? И одновременно выполняться???
Если нет, то проблемы нет: линкуете (обычно, не перемещаемо) Вашу пользовательскую часть ПО в один регион памяти, системную в другой.
Если нужно иметь несколько вариантов пользовательского ПО - храните их в разных областях ОЗУ, а тот вариант, который должен выполняться, копируйте в область выполнения, для которой линковали.
desh
Цитата(jcxz @ May 17 2016, 05:27) *
И в чём проблема?


Моя проблема описана в первом сообщении sm.gif

Цитата(jcxz @ May 17 2016, 05:27) *
Эти несколько вариантов пользовательского ПО должны одновременно находиться в памяти? И одновременно выполняться???
Если нет, то проблемы нет: линкуете (обычно, не перемещаемо) Вашу пользовательскую часть ПО в один регион памяти, системную в другой.
Если нужно иметь несколько вариантов пользовательского ПО - храните их в разных областях ОЗУ, а тот вариант, который должен выполняться, копируйте в область выполнения, для которой линковали.


Это все я знаю, умею и люблю, но этот вариант больше подходит для загрузчиков.
Я хочу получить систему с загружаемыми модулями на основе общепринятых стандартных решений.
Как линукс, только маленький. И что бы IARом собирался (стандарт предприятия).

А так, да - спасибо за совет.
scifi
Цитата(desh @ May 17 2016, 08:54) *
И что бы IARом собирался (стандарт предприятия).

Не факт, что яр это вообще умеет. Тогда придётся подумать, стоит ли так упираться в этот стандарт.
desh
Цитата(scifi @ May 17 2016, 10:28) *
Не факт, что яр это вообще умеет.


Не факт. Но до смены линковщика умел. Да и сейчас при сборке библиотек умеет. Вот только как этим воспользоваться в данном контексте я не знаю. sm.gif
jcxz
Цитата(desh @ May 17 2016, 11:54) *
Как линукс, только маленький. И что бы IARом собирался (стандарт предприятия).

Имхо - в линухе совсем другой механизм. Я думаю - там как в винде:
Все приложения компилятся по статическом адресам с одинаковым адресным пространством. А уже это адресное пространство отображается на разные физ. адреса при помощи MMU.
AlexandrY
Цитата(desh @ May 17 2016, 10:51) *
Не факт. Но до смены линковщика умел. Да и сейчас при сборке библиотек умеет. Вот только как этим воспользоваться в данном контексте я не знаю. sm.gif


У IAR есть такой проект со всеми исходниками - IElfTool
Этот тул умеет делать самоперемещаемые образы.
Сам IElfTool компилируется бесплатной версией Visual Studio Community 2015
При желании этот тул можно и в RTOS интегрировать.
desh
Цитата(AlexandrY @ May 17 2016, 12:22) *
У IAR есть такой проект со всеми исходниками - IElfTool
Этот тул умеет делать самоперемещаемые образы.


Спасибо. Видел его исходники.
Дождусь ответа от ТП IAR и если от них ничего интересного не узнаю - буду смотреть в эту сторону.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.