CC2538开发板ipv6准备工作,编译lib6lowpan,libcoap

来源:互联网 发布:网络打字兼职可信吗 编辑:程序博客网 时间:2024/06/05 15:03

前面已经介绍过,笔者比较熟悉TinyOS,再此主要讨论的是TinyOS的准备部分,Contiki和RIOT以后有时间会补充;

首先看看LocalIeeeEui64C.nc文件

module LocalIeeeEui64C {
  provides interface LocalIeeeEui64;
} implementation {
  command ieee_eui64_t LocalIeeeEui64.getId() {
   ieee_eui64_t id;
    /* this is UCB's OUI */
    id.data[0] = 0x00;
    id.data[1] = 0x12;
    id.data[2] = 0x6d;
    /* UCB will let anyone use this OUI so long as these two octets
       are 'LO' -- "local".  All other octets are reserved.  */
    /* SDH -- 9/10/2010 */
    id.data[3] = 'L';
    id.data[4] = 'O';
    id.data[5] = 0;
    id.data[6] = TOS_NODE_ID >> 8;
    id.data[7] = TOS_NODE_ID & 0xff;
    return id;
  
    /****
    ieee_eui64_t id;
    id.data[0] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[3]; //F_EXADDR7
    id.data[1] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[2]; //F_EXADDR6
    id.data[2] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[1]; //F_EXADDR5
    id.data[3] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[0]; //F_EXADDR4
    id.data[4] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[7]; //F_EXADDR3
    id.data[5] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[6]; //F_EXADDR2
    id.data[6] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[5]; //F_EXADDR1
    id.data[7] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[4]; //F_EXADDR0
    return id;
    */
  }
}

id.data[0]~id.data[7]对应就是2538的IEEE地址,不过上面未注释部分是TinyOS默认的自定义的IEEE地址,TOS_NODE_ID 为短地址,也就是make cc2538cb id.xx中的xx

下面注释掉的部分是物理IEEE地址。

按照IETF的文档,应该对IEEE地址进行U/L bits操作,也就是 id.data[0] (byte)从右到左第7bit取反(也就是编程咱们常常默认的bit1)

知道了这个你反过去阅读PPprouter中德文章,就知道UDPECHO 中德id.2的route命令的地址为什么是那个值了。


1,编译lib6lowpan

言归正传:用到6llowpan,那么你肯定需要遵从他的规范,也就是使用Lib6lowpan

进入support/sdk/c/blip下

./bootstrap

./configure

make

当然这个目录是tinyos2.2.12release默认的路径,如果是github最新的做法是在tools/tinyos/c/blip中

2,编译libcoap

添加Coap的库,也就是编译libcoap,可能coap的版本会有区别,注意看文档是否对coap的版本有限制;

进入目录support/sdk/c/coap

autoconf

./configure --with-tinyos


即可;

0 0