C++ динамическое внедрение кода во встроенную систему
Я ищу решение следующей проблемы:
- разработан программный модуль C++, который работает на встроенном устройстве (нет возможности использовать файловую функцию "dlopen" для загрузки общих библиотек), а во время работы модуля он должен расширяться динамическим программным кодом
- динамический код записывается (реализация функций интерфейса) и кросс-компилируется (gcc) в системе ПК перед отправкой через систему шин в ранее описанный программный модуль, работающий на встроенном устройстве.
- программный модуль на встроенном устройстве должен хранить полученный динамический программный код в памяти и должен иметь возможность вызывать в нем функции
Как мне решить эту проблему?
Мой первый подход заключается в следующем:
- Кросс-компиляция и связывание динамического кода в виде общей библиотеки (файл ELF) на стороне ПК
- (после передачи) файл ELF доступен на встроенном устройстве в памяти
- Перемещение файла ELF -> здесь я сейчас абсолютно не представляю, как это можно сделать! Существуют ли бесплатные библиотеки для выполнения таких задач?
Я не знаю, может ли мой файловый подход ELF работать? Если так, как я должен выполнить перемещение библиотеки?
Есть ли лучший / другой подход к решению моей проблемы?
1 ответ
VxWorks может сделать именно это. Вместо общих библиотек как таковых, объектные модули могут быть частично связаны перемещаемым объектом (опция -r в GNU ld), а затем загружены во время выполнения к цели, где завершена ссылка, разрешая ссылки на существующий код на цели.