- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在通过一个项目开始使用 contiki on the sky mote。我正在尝试让无线编程立即开始工作。
我一直在查看 examples/sky-shell-exec 和 apps/shell/。我觉得我需要通过 sky-shell-exec 和可能的 test-deluge 或 codeprop 提供的功能的某种组合。然而,通读代码给我带来了一些概念上的障碍,这些障碍涉及需要实现哪些代码以及已经提供了哪些代码以获得一些无线编程功能(我对此很陌生并且没有太多嵌入式系统曝光)。对于我的问题有时含糊不清,我深表歉意,但这是由于我的一般困惑,并且真的不知道如何更好地进行。我现在主要是想让一些小东西(示例程序)现在可以工作,它可以简单地将代码发送到一个微尘,然后使用发送的代码对该微尘进行重新编程(例如,发送的代码可能只是 hello-world)。
1) 我如何通过无线方式简单地将代码发送到微尘?我感觉 test-deluge 是无线编程问题的“无线”传输部分,但从代码中没有完全理解它。
2) 为了接收空中代码,应该在微尘上运行什么代码?
3) 我怎么知道这段代码存储在哪里,然后知道如何加载它?我觉得这一步或多或少是 sky-shell-exec 但还是不能从代码中完全理解它。
4) 我在网上读了很多东西,说如果代码库很大,无线编程很困难,因为 ram 是有限的。当代码以无线方式传输时,我通常将其存储在哪里?我如何知道/验证它是否存在?另外,我怎样才能简单地知道我是否会因为代码大小而出现内存存储问题(最终对于项目来说,需要传输一个大的代码库,而不仅仅是单个模块)?
我再次为任何无根据的无知道歉,我意识到还有另一个线程与此类似,但我发现我需要对那里提到的每个组件进行更详细的解释(线程是:On the Air programming for Contiki)。
谢谢
最佳答案
要使空中 (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 都需要一个 shell 来运行 deluge 应用程序。而一个sink节点(传输最新文件的节点)需要调用deluge_dessiminate()函数分发(dessiminate)新节目。
3) 代码将存储在咖啡文件系统中。 Deluge 将自动(在 deluge_dessiminate 和天空节点上的 deluge 应用程序的幕后)将新文件保存在天空节点的闪存中。完成后,您需要使用 ELF 加载程序运行此程序。由于您需要您的程序是一个 ELF 编译文件,以便由 contiki ELF_LOADER 运行。
4) 我想你是说 ROM?但是,是的,您需要额外的代码来支持 OTA 编程,并且您需要两倍于应用程序大小的空间。你说你需要的所有模块你可能需要在 shell 端自己编程。文件验证可以通过 CRC 检查您的文件来完成。
这确实是很多工作,我建议这样做是小步骤。
1:使用保存在coffee文件系统上的ELF加载器运行一个程序。
2:将你自己的(随机)文件从一个汇节点转移到其他节点
3:删除一个ELF文件。
4:使用 ELF 加载程序运行 deluge_dessiminated 文件。
和 5:为其他人创建教程并分享知识!
希望这对您有所帮助。
关于contiki空中编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472638/
我正在研究 Java Card (SIM),并且正在使用 OTA 技术。有些表达方式我还没有一个很好的定义。 例如,当我在 SIM(用户身份模块)上加载小程序时,我使用 BIP 或 SMS。我知道短信
我是一名优秀的程序员,十分优秀!