Contiki OS 开发快速入门

笔者之前研究过一段时间 Contiki OS ,万事开头难,入门时会走不少弯路,现在将此过程分享出来。首先介绍一下 Contiki OS:

Contiki是一个小型、开源、极易移植的多任务电脑操作系统。它专门设计以适用于一系列的内存受限的网络系统,包括从8位电脑到微型控制器的嵌入系统。它的名字来自于托尔·海尔达尔的康提基号。Contiki只需几千字节的代码和几百字节的内存就能提供多任务环境和内建TCP/IP支持。作为基础的内核以及大部分的核心功能是瑞典计算机科学研究所的网络内嵌系统小组的Adam Dunkels开发的。程序代码量只有几K,存储器的使用量也只有几十Kb。因为嵌入式系统资源有限,故而开发出Contiki OS来适应它,由于uIPv6协议栈的原因,所以占用了很小的系统资源,许多资源有限的网络和设备都可以使用它。Contiki OS 运行原理如下:

在这里插入图片描述

1、搭建开发环境

InstantContiki是官方基于Ubuntu配好的开发环境,具体做法是在http://sourceforge.net/projects/contiki/下载InstantContiki,直接在VMware Workstation虚拟机中打开即可。
在这里插入图片描述

安装和使用 VMware Workstation 虚拟机可以参照笔者这篇博客:手把手教你搭建Linux开发环境(VMware+Ubuntu)(一)——安装VMware虚拟机和Ubuntu

安装好虚拟机,打开 Contiki OS 开发环境, 进入开发环境的Password默认是user
在这里插入图片描述
进入开发环境后界面如下:
在这里插入图片描述
因为 Contiki OS 是开源的,你可以安装 git 下载 Contiki OS 源码,源码地址:https://github.com/ljrkernel/contiki

git 的用法,可以参考笔者的另一篇博客: Linux下如何快速使用GitHub

2、简单的编译举例

此过程需要一点Linux操作基础,还不会Linux命令的同学,可以参考笔者这篇博客:Linux初学者接住了—Linux常用命令

打开终端,进入contiki 开发的文件夹,可以看到如下目录:
在这里插入图片描述

core目录下是Contiki的核心源代码,包括网络(net)、文件系统(cfs)、外部设备(dev)、链接库(lib)等等,并且包含了时钟、I/O、ELF装载器、网络驱动等的抽象。
cpu目录下是Contiki目前支持的微处理器,例如arm、avr、msp430等等。如果需要支持新的微处理器,可以在这里添加相应的源代码。
platform目录下是Contiki支持的硬件平台,例如mx231cc、micaz、sky、win32等等。Contiki的平台移植主要在这个目录下完成。这一部分的代码与相应的硬件平台相关。
apps目录下是一些应用程序,例如ftp、shell、webserver等等,在项目程序开发过程中可以直接使用。使用这些应用程序的方式为,在项目的Makefile中,定义APPS = [应用程序名称]。在以后的示例中会具体看到如何使用apps。
examples目录下是针对不同平台的示例程序。Smeshlink的示例程序也在其中。
doc目录是Contiki帮助文档目录,对Contiki应用程序开发很有参考价值。使用前需要先用Doxygen进行编译。
tools目录下是开发过程中常用的一些工具,例如CFS相关的makefsdata、网络相关的tunslip、模拟器cooja和mspsim等等。

其中 examples 文件夹中有许多官方的编程举例,我们来举例说明,找到hello_world这个例子,有如下文件:
在这里插入图片描述
先看看hello-world.c

此过程需要一点 vim 基础,不会的同学,可以参考笔者这篇博客: 手把手教你搭建Linux开发环境(VMware+Ubuntu)(三)——Ubuntu下vim编辑器的安装、配置和使用

//引用contiki的api
#include "contiki.h"
//标准设备输入输出库
#include <stdio.h> /* For printf() */
/*---------------------------------------------------------------------------*/
//声明进程
PROCESS(hello_world_process, "Hello world process");
//系统初始化的时候自动启动这个进程
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------------------------------*/
//hello_world进程实现
PROCESS_THREAD(hello_world_process, ev, data)
{
  //进程开始
  PROCESS_BEGIN();
  //通过串口输出Hello,world
  printf("Hello, world\n");
  //进程结束
  PROCESS_END();
}

Makefile 如下:

#添加定义的头文件
DEFINES+=PROJECT_CONF_H=\"project-conf.h\"
#项目的名称
CONTIKI_PROJECT = hello-world
#编译所有相关的项目
all: $(CONTIKI_PROJECT)
#定义目录变量
CONTIKI = ../../..
#引用编译规则
include $(CONTIKI)/Makefile.include

使用make命令进行编译,并生成了如下文件:
在这里插入图片描述

3、下载程序到开发板(以CC2538开发板为例)

上面生成的hello-world.bin文件可以下载到开发板上,下载方法有三种,分别是在Ubuntu下使用J-Link下载、在Ubuntu下使用串口下载和在Windows下使用J-Link下载:

方法一:Ubuntu下使用J-Link下载

(1)下载官方JLink-V8驱动,下载地址为:http://www.segger.com/j-link-older-versions.html,我下载的是“Software and documentation pack for Linux V4.84d, TGZ archive 32-bit version”,即JLink_Linux_v484e_i386.tgz
(2)在Ubuntu下解压,可以阅读README,按照步骤进行相关配置,执行命令如下:

sudo tar -zxvf JLink_Linux_v484e_i386.tgz

(3)复制解压后JLink_Linux_v484e_i386文件夹内的JLink.rulesetc目录下,执行命令如下:

cp 99-jlink.rules /etc/udev/rules.d/

(4)将库文件复制到/usr/lib目录下,执行命令如下:

cp libjlinkarm.so.* /usr/lib

(5)J-Link连接好cc2538模块后,运行可执行文件JLinkExe,然后进行相关配置,执行命令如下:

./JLinkExe
exec device=CC2538SF53 #不同开发板device不同
erase

(6)下载程序执行命令如下:

loadbin hello-world.bin,0x00200000

(7)退出下载时执行命令q退出即可。

此时重启或复位cc2538模块即可完成下载。

方法二:Ubuntu下使用串口下载

Ubuntu下使用串口下载时需要用到USB转串口模块,以下载bin文件到cc2538模块为例,PC和cc2538模块通过USB转串口模块连接好以后,Ubuntu下配置执行命令如下:

ls /dev/ttyUSB*
sudo chmod 777 /dev/ttyUSB0

打开开发板开关,进入bootloader模式,以下载hello-world.bin文件为例,执行以下命令:

make hello-world.upload

重启或复位cc2538模块即可完成下载。

方法三:Windows下使用J-Link下载

因为程序生成的bin文件在Ubuntu中,所以使用此方式下载需先将Ubuntu中的bin文件拷贝到共享文件夹中。

Ubuntu和windows共享文件的方法请参照笔者这篇博客:手把手教你搭建Linux开发环境(VMware+Ubuntu)(二)——安装VMwareTools并设置共享文件夹

Windows下使用J-Link下载的环境界面如下图:
在这里插入图片描述
J-Link环境配置方法如下:
(1)下载Windows版的J-Link驱动程序安装包,运行J-Link驱动程序安装包,一路NEXT;
(2)在Options菜单中选择Project Settings,General设置选择Connetion to J-Link 用USB连接模式;
(3)配置Target interface相关选项设置;
(4)CPU选项卡设置目标CPU的类型;
(5)设置完毕后在File菜单中选择Open data file,打开需要烧录的bin文件;
(6)PC和cc2538模块通过J-Link连接成功后,先擦除,后下载。

4、查看结果

将开发板与电脑连接,使用串口调试工具,即可看到实验现象。

猜你喜欢

转载自blog.csdn.net/qq_34258344/article/details/104919709
os