1. 写在前面
平台:CC2530
在Ubuntu 16.04上搭建Contiki的开发环境的过程中,遇到一系列问题,总体来说,开发环境搭建工作是失败的。
只能下载官方已经搭建好开发环境的系统虚拟磁盘文件InstantContiki2.7.zip,该镜像基于Ubuntu 12.04 32bit。
然后在 VirtualBox 上创建 32 位的 Ubuntu 系统,选择下载好的虚拟磁盘文件,创建虚拟系统,登录密码为 user。 系统自带了 contiki2.6 和 contiki2.7 的源码,需要注意的是,不管是 2.6、2.7 还是从 Github 上重新下载的 3.0,CC2530 运行platform/cc2530dk/udp-ipv6 下的 server 程序时,接收到 client 的消息时会存在重启问题,托管在 Github 上的 contiki-sensinode 项目针对这一问题对官方的contiki os进行了优化。
1
$ git clone https://github.com/g-oikonomou/contiki-sensinode.git
2. 可能出现的问题
(1) 为CC2530编译udp-ipv6下的client时会有错误信息,编译无法通过,需要从源码编译安装SDCC。
需要删除原有的SDCC:
1
$ sudo rm -rf /usr/local/sdcc
然后重新编译安装,安装指南见笔记《SDCC for Contiki》,或者:
https://github.com/contiki-os/contiki/wiki/8051-Requirements#build-your-toolchain-sd
(2) SDCC 在 3.6.0 之后的版本,将 putchar()的原型从 void putchar(char)
改为 int putchar(int)
[1],而 contiki 中仍然为 void 类型,因此,使用 3.6.0 版本之后的 SDCC 编译 contiki 工程时会报错。即使将工程文件中的 putchar
函数原型修改为与 SDCC 的 putchar
函数原型一致,编译也无法通过(还有其他问题)。
3. 开发板适配(移植)
Contiki默认配置:
LEDS_GREEN | P1_0 |
---|---|
LEDS_RED | P1_1 |
BUTTON1 | P0_5 |
手中有两种板子: 老版的(直针简易牛角座),对应关系为:
LED1 (RED) | P1_0 |
---|---|
LED2(GREEN) | P1_1 |
S1 | P0_4 |
S2 | P0_5 |
新版的(弯针简易牛角座),对应关系为:
LED1 (RED) | |
---|---|
LED2(GREEN) | |
S1 | P0_0 |
S2 | P0_1 |
将LED和按键改一致(老版): 将 platform/cc2530dk/dev/button-sensor.h 的第 64 行改为:
1
#define BUTTON1_PIN 4
将 platform/cc2530dk/models.h 的第 98、99 行改为:
1
2
#define LEDS_GREEN 2
#define LEDS_RED 1
4. 总结
试图在Ubuntu 16.04 LTS上搭建开发环境,但在编译安装SDCC和编译Contiki项目的过程中遇到很多困难。
系统信息如下:
Ubuntu 16.04 LTS,Linux version 4.4.0-57-generic (buildd@lgw01-54) ,gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
更换过GCC版本,试过多个版本的SDCC,都没有解决问题。遇到的问题可以分为以下三类:
SDCC(v9092)无法编译通过
SDCC(v9822)可以编译安装,但是Contiki项目无法编译通过(原因如前文所述)
SDCC可以编译安装,Contiki项目可以编译通过,但是示例代码在开发板上运行时无法得到期望的结果。
直接使用官方提供的 InstantContiki2.7,使用针对 cc2530 做过优化的 contiki-sensinode 源码,如果自带的 SDCC 无法顺利完成编译任务,则将其删除,然后下载 v9092 源码,对其做些许修改后编译安装。
参考
[1] http://sdcc.sourceforge.net/doc/sdccman.pdf
[2] http://www.swannonline.co.uk/node/60
[3] http://blog.csdn.net/xukai871105/article/details/23626437