Contiki空中编程

5

我正在通过一个项目开始使用sky mote上的contiki。我现在正在尝试让空中编程正常工作。

我一直在查看examples/sky-shell-exec 和 apps/shell/。我感觉我需要一些来自sky-shell-exec和可能是test-deluge或codeprop的功能组合。然而,阅读代码让我陷入了一些概念障碍,不知道需要实现哪些代码以及已经提供了哪些代码,以获得某些无线编程功能(我非常新手,并没有接触过嵌入式系统)。我很抱歉我的问题有时会含糊不清,但这是因为我很困惑,不知道该怎么做。我主要希望能够让一个小程序(例如 hello-world)正常工作,只需将代码发送到mote上,然后使用发送的代码重新编程mote即可。

1)我如何简单地通过无线网络向mote发送代码?我感觉test-deluge是无线编程问题的“无线”传输部分,但从代码中并不完全理解它。

2)在mote上运行哪些代码才能接收无线编程代码?

3)我如何知道存储此代码的位置,然后知道如何加载它?我感觉这一步就是sky-shell-exec,但从代码中并不完全理解它。

4)我在网上看到很多关于当代码库很大时无线编程会变得困难的文章,因为RAM有限。我通常在哪里存储我的代码以进行无线传输,并如何知道/验证它是否存在?此外,由于代码大小,我如何知道是否会出现存储问题(最终项目需要传输大型代码库而不仅仅是单个模块)?

对于任何无端的无知,我再次表示歉意,并且我意识到还有另一个类似于这个主题的线程但是我发现我需要更详细地解释其中提到的每个组件(线程是:On the Air programming for Contiki)。

谢谢


1
AS3在这方面起了什么作用?我认为如果您重新考虑一下要为帖子使用哪些标签,您可能会增加获得帮助的机会。我有一种感觉,您目前使用的标签都与您正在做的事情没有任何关联。也许应该用contiki标记? - david.emilsson
刚刚进行了你提到的更正。谢谢。 - John Cast
你在这方面取得了进展吗?你能添加一个答案吗? - erbdex
2个回答

5
为了使OTA编程正常工作,您自己的代码库需要在另一层(因此其他用户建议查看shell示例)之上工作。
这类似于Windows内核运行可执行文件并需要更新。
1:内核下载foo并将其保存在其文件系统中。
2:内核终止旧的foo程序并在某些必需的文件验证后启动新的foo程序。
3:如果一切正常,则删除旧的foo程序。
现在,您可以看到在更新时,您的程序需要同时存在于同一设备上两次(旧版本和新版本)。
希望这能更好地解释OTA编程的工作原理。
现在我将逐个回答您的问题:
1)使用deluge来分发文件到所有其他节点。现在使用deluge确实很棘手。 Contiki邮件列表中的以下帖子给出了sky代码示例的基本思路:http://permalink.gmane.org/gmane.os.contiki.devel/4884
2)每个mote都需要运行一个运行deluge应用程序的shell。一个sink节点(传输最新文件的节点)需要调用deluge_dessiminate()函数来分发(dessiminate)新程序。
3)代码将存储在coffee文件系统中。 Deluge会在sky节点的闪存上自动保存新文件(在deluge_dessiminate和sky节点上的deluge应用程序的背后)。完成此操作后,您需要使用ELF加载器运行此程序,因为您需要将程序编译为ELF文件才能由contiki ELF_LOADER运行。
4)我想您是指ROM?但是是的,您需要额外的代码来支持OTA编程,并且需要两倍于应用程序大小的空间。您可能需要在shell侧自己编写所有模块。可以通过CRC检查文件进行文件验证。
这确实需要很多工作,我建议分步骤进行。
1:使用ELF加载器运行保存在coffee文件系统中的程序。
2:从sink节点向其他节点dessiminate(deluge)自己的(随机)文件
3:dessiminate ELF文件。
4:使用ELF加载器运行deluge_dessiminated文件。
5:为其他人创建教程并分享知识!
希望这些能以某种方式帮助到您。

我有两个问题。
  1. 我们能在模拟中做这件事吗?
  2. 所有的节点,即Z1,都支持这个吗?
- Kaleem Ullah

4
我不知道有多少次我在自己尝试在Contiki中实现OTA时回到了这篇文章。我知道这是一个老问题,但对于任何正在寻找工作示例的人,我使用CoAP(最初是HTTP)为CC2650实现了OTA,并且服务器在NodeJS中。
我可以更详细地说明,但您可以直接阅读教程:http://marksolters.com/programming/2016/06/07/contiki-ota.html 它抽象地讨论了图像架构、传输机制和下载验证,因此信息并不真正只适用于CC2650。
我没有使用动态链接。我静态链接了我的二进制文件并开发了一个引导加载程序,将它们写入已知的闪存地址。我从未见过elfloader在Contiki中起作用。
以下是Contiki示例源代码:https://github.com/msolters/contiki/tree/master/examples/cc26xx-ota-bootloader 以下是OTA服务器源代码:https://github.com/msolters/ota-server 希望这可以帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接