面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。
在本系统中,我们使该虚拟机具备虚拟网卡,可与多台 android 虚拟机及 Linux 虚拟机
通过虚拟网关,通过网络拓扑连接进行网络通信,以便完成整个系统实验。
2) 编译环境搭建及编译
Linux 虚拟机之间的系统迁移,我们只需编写源码 Makefile 文件,使用系统自带的 GCC
编译器实现 Contiki 的编译。但是为了实现跨平台系统迁移,我们还需要实现 Contiki 在
Android 环境下的编译,并编写源码 Makefile 文件,交叉编译 Contiki 源码,生成 Android
目标机的编译文件。最初考虑一下两种方案:
方案一是做安卓下的 NDK 编译,方案二是建立 LINUX-ARM 交叉编译链,在底层实
现跨界编译。下面就这两种方案进行讨论。
方案一:
NDK 是安卓开发的一个工具集[3],集成了 Android 的交叉编译环境,并提供了一套比
较方便的 Makefile ,可以帮助开发者快速开发 C 或是 C++ 的动态库,并自动的将 so 和
java 程序打包成 apk ,在 Android 上运行。但是由于 Contiki 本身没有安卓版本,编译不
通过,故该方案失败。
方案二:
建立 LINUX-ARM 交叉编译链,将目标程序编译成 Android for x86 能运行的可执行代
码,从而实现 Contiki 在 Android 环境下的编译,此过程即是 Android/VirtualBox 跨界编译。
3) 文件迁移及自动加载
Linux 集成了 uIP 协议栈,包含 IPv4 和 IPv6 两种协议栈版本,支持 TCP、UDP、ICMP
等协议,并有一套完整的 uIP API。
本程序采用 TCP 通信模式,编写核心 C 程序,通过 TCP/IP 用 RSA+AES 加密传输
Contiki 编译文件到另一台 Linux 虚拟机,虚拟机间通过虚拟网关进行数据传输。由于
Android 底层仍为 Linux 内核,故该传输方法在 Android 上同样可用。
相应虚拟机接收程序接收到 Contiki 编译文件后,我们将自动加载 Contiki 虚拟机进程,
执行相应应用程序。