5

我正在通过一个项目开始在天空微粒上使用 contiki。我正在尝试通过空中编程来立即工作。
我一直在查看examples/sky-shell-exec 和apps/shell/。我觉得我需要通过 sky-shell-exec 和可能的 test-deluge 或 codeprop 提供的功能的某种组合。但是,通读代码给我带来了一些概念障碍,涉及需要实现哪些代码以及已经提供了哪些代码才能获得一些无线编程功能(我对此很陌生,没有太多嵌入式系统暴露)。对于我的问题有时含糊不清,我深表歉意,但这是由于我的普遍困惑,我真的不知道如何更好地进行。我主要是想让一些小东西(示例程序)现在可以工作,它可以简单地将代码发送到一个mote,然后使用发送的代码重新编程那个mote(例如

1) 我如何简单地将代码通过无线方式发送到微尘?我觉得 test-deluge 是无线编程问题的“无线”传输部分,但从代码中并没有完全理解它。

2) 为了接收无线代码,应该在 mote 上运行什么代码?

3)我怎么知道这个代码存储在哪里,然后知道如何加载它?我觉得这一步或多或少是sky-shell-exec,但又不能从代码中完全理解它。

4)我在网上读了很多东西,说如果代码库很大,因为内存有限,空中编程很困难。一般来说,当我的代码以无线方式传输时,我在哪里存储我的代码,我如何知道/验证它是否存在?另外,我怎么能简单地知道我是否会因为代码大小而出现内存存储问题(最终对于项目来说,需要传输大型代码库而不仅仅是单个模块)?

对于任何毫无根据的无知,我再次道歉,并且我意识到还有另一个与此类似的线程,但我发现我需要对其中提到的每个组件进行更详细的解释(线程是:On the Air programming for Contiki)。

谢谢

4

2 回答 2

5

要开始over the air (OTA) Programming工作,您自己的代码库需要在另一层之上工作(因此其他用户也提到过查看 shell 示例)。

它类似于运行可执行文件并需要更新的 Windows 内核。

1:内核下载 foo 并将其保存在其文件系统中。
2:内核终止旧的 foo 程序并在一些必要的文件验证后启动新的 foo 程序。
3:如果一切正常,旧的 foo 程序将被删除。

现在您可以看到,在更新您的程序时需要在同一设备上运行两次(旧的和新的)。

我希望这能让您更深入地了解 OTA 编程的工作原理。

因此,我现在将尝试一一回答您的问题:

1) 要将文件分发到所有其他节点,使用 deluge。现在使用 deluge 确实很难用。contiki 邮件列表中的以下帖子给出了天空代码示例的基本概念。http://permalink.gmane.org/gmane.os.contiki.devel/4884

2)每个mote都需要一个运行deluge应用程序的shell。并且一个 sink 节点(传输最新文件的那个)需要调用 deluge_dessiminate() 函数来分发(dessiminate)新程序。

3) 代码将存储在咖啡文件系统中。Deluge 将自动(在 deluge_dessiminate 和天空节点上的 deluge 应用程序的幕后)将新文件保存在天空节点的闪存上。完成此操作后,您需要使用 ELF 加载程序运行此程序。因为你需要你的程序是一个 ELF 编译文件,由 contiki ELF_LOADER 运行。

4)我认为你的意思是ROM?但是,是的,您需要额外的代码来支持 OTA 编程,并且您需要两倍于应用程序大小的空间。你说你需要的所有模块,你可能需要在 shell 端自己编程。文件验证可以通过 CRC 检查您的文件来完成。

这确实是很多工作,我建议这样做只是一小步。
1:使用保存在咖啡文件系统上的 ELF 加载程序运行程序。
2:将自己的(随机)文件从接收节点分发(泛滥)到其他节点
3:分发 ELF 文件。
4:使用 ELF 加载器运行 deluge_dessiminated 文件。

和 5:为其他人创建教程并分享知识!

我希望这会对您有所帮助。

于 2014-04-03T09:22:56.840 回答
4

当我自己尝试在 Contiki 中实现 OTA 时,我无法告诉你有多少次回到这篇文章。我知道这是一个老问题,但对于任何寻找工作示例的人来说,我通过 CoAP(最初是 HTTP)为 CC2650 实现了 OTA,服务器位于 NodeJS 中。

我可能会更罗嗦,但您可以阅读教程: http: //marksolters.com/programming/2016/06/07/contiki-ota.html

它抽象地讨论了图像架构、传输机制和下载验证,因此信息并没有真正唯一地绑定到 CC2650。

我没有使用动态链接。我静态链接了我的二进制文件并开发了一个引导加载程序,它将它们写入一个已知的闪存地址。我从未见过 elfloader 在 Contiki 中工作。

希望这会有所帮助!

于 2016-06-24T03:06:56.167 回答