无线/无线自动软件更新(热代码加载)策略

Over-the-Air / Over-the-Wire automated Software Update (hot-code-loading) strategy

本文关键字:代码 加载 策略 更新 软件 无线      更新时间:2023-10-16

有一个Linux系统(作为我项目的一部分),我可能不得不做热代码加载,即更新部分软件,通过无线(例如通过WiFi下载软件)或有线(通过局域网)。本软件分为两部分,一部分用c++编写,另一部分用Erlang编写。c++部分通过TCP/IP(一组6-7个奇怪的专有协议)与一些外部实体进行通信。我最需要做热加载的部分,是与那些外部实体对话的c++部分。c++部分通过端口与Erlang对话(目前正在开发中),但我希望将其更改为nif(将来某个时候)。

谁能建议一些c++功能的热代码加载策略?我知道Erlang的能力,但我的理解是,功能没有扩展到用c++编写的部分。

另外,我需要确保包含专有协议实现的c++模块来自"有效源"。什么才是正确的策略呢?

我想,我的需求并不罕见,所以如果这样的模块,框架,库存在,我会很高兴被指向那些。

我不知道有什么现成的库。在大多数情况下,C/c++中的代码加载是使用动态库完成的,您可以使用dlopen从代码中加载动态库。然后可以使用dlsym找到符号的地址。注意c++的名称混淆会使查找符号变得困难。通常最好是创建用外部"C"封装的普通函数,这些函数为您创建对象,然后您可以像使用任何其他对象一样使用这些对象。

如果您想确定代码是有效的,您可能应该查看公钥/私钥加密。您使用私钥对代码进行签名(基本上是创建二进制文件的加密散列),然后加载代码的软件使用公钥检查签名。