Стратегия автоматического обновления программного обеспечения (горячая загрузка кода) по беспроводной сети - PullRequest
1 голос
/ 08 июля 2011

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

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

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

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

1 Ответ

2 голосов
/ 08 июля 2011

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

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

...