Стратегия автоматического обновления программного обеспечения (горячая загрузка кода) по беспроводной сети

Иметь систему Linux (как часть моего проекта), где мне, возможно, придется выполнять горячую загрузку кода, то есть обновлять части программного обеспечения, по беспроводной сети (например, загружая программное обеспечение по WiFi) или по беспроводной сети. (по локальной сети). Есть 2 части этого программного обеспечения, одна часть написана на C++, а другая на Erlang. Часть C++ общается с некоторыми внешними объектами через TCP/IP (набор из 6-7 нестандартных проприетарных протоколов). Часть, из которой мне нужно в основном выполнять горячую загрузку, - это часть C++, которая взаимодействует с этими внешними объектами. Часть C++ говорит с Erlang через порты (в стадии разработки), но я хотел бы изменить это на NIFs (когда-нибудь в будущем).

Может кто-то предложить несколько стратегий для горячей загрузки кода функциональности C++. Я знаю о способности Эрланга делать, но я понимаю, что функциональность не распространяется на часть, написанную на C++.

Кроме того, мне нужно убедиться, что модуль C++, содержащий реализацию проприетарного протокола, взят из "действительного источника". Какова может быть правильная стратегия для этого?

Я предполагаю, что мои требования не редкость, поэтому, если такие модули, фреймворки, библиотеки существуют, были бы рады указать на них.

1 ответ

Решение

Не знаю ни о каких существующих библиотеках для этого. Загрузка кода в C/C++ в большинстве случаев выполняется с использованием динамических библиотек, которые вы можете загрузить из кода с помощью dlopen. Затем вы можете найти адреса символов, используя dlsym. Обратите внимание, что в C++ происходит искажение имен, что затрудняет поиск символов. Часто лучше всего создавать обычные функции, заключенные в extern "C", которые создают объекты для вас, которые вы затем можете использовать как любой другой объект.

Если вы хотите быть уверены, что код верен, вам, вероятно, стоит заняться криптографией с открытым / закрытым ключом. Вы подписываете код с помощью закрытого ключа (в основном вы создаете зашифрованный хэш своего двоичного файла), и программное обеспечение, загружающее код, проверяет подпись, используя открытый ключ.

Другие вопросы по тегам