Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63743
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 09:53
文章分类

全部博文(20)

文章存档

2014年(20)

我的朋友

分类: LINUX

2014-07-11 11:33:11


概述

         IEEE 802.15.4是通信标准,提供服务在小型低速率无线个人区域网(WPAN)

         802.15.4 仅仅提供MAC-PHY层标准,几种常见的协议通常在它上层实现,比如ZigBee/MiWi/6LowPan

         这个项目的目标是在linux中创建一个实现802.15.4和运行其上层的几个协议(主要是6 lowpan)

        

         值得注意的是,这个名字linux-zigbee有点用词不当。虽然这个项目最初开始创建Linux ZigBee实现,

         ZigBee联盟许可限制使ZigBee的实现不可能成为Linux内核的一部分。

         一旦发现了这个许可问题,这个项目的主要焦点转移到IEEE 802.15.46LowPan提供服务。

         其他更高层协议标准可能被添加在未来的时间。

 

文档和信息

         为什么使用Linux

         实现细节

         入门指南

                   构建用户空间工具说明

         硬件支持

         常见问题解答

         串行协议v1

         项目下载

 

社区

         邮件列表

         IRC频道

 

项目状态

         状态在2012-03-04IRC会议中概述

 

 

--------------------------------------------------------------------------------------------

为什么使用Linux

         本地Linux实现 IEEE 802.15.4 /6LoWPAN /ZigBee/ WirelessHART 协议栈的一些主要的优势:

         用户应用程序可以使用 简单和通用的socket接口,不依赖于硬件;

         模拟无线驱动程序和支持多种逻辑设备在单一物理广播提供的框架网络部署前仿真和测试;

         现有的网络分析和配置基础设施(Wireshark)

         集成的Linux网络子系统(网关、工具等)SSHtelnetpingnc等。

 

---------------------------------------------------------------------------------------------

实现

         这个项目包括两个部分,内核和用户空间。内核代码包含IEEE 802.15.4实现,而用户空间的部分执行网络配置。

 

内核部分

         内核部分在内核主线中实现。需要打一个新功能补丁David Millernet-tree树,net-next通常会有最新的代码。

 

         核心组件合并到主线之前,源码存放在SourceForge git(GitWeb)

         (git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee/kernel)

         这个实现现在被认为是遗产,只有历史价值。它还包含一些驱动不包含在在主线内核中的一部分。

         如果你有兴趣获得主线的一个或多个这些驱动,请联系邮件列表。

 

linux内核主线地址:

 

用户空间部分

         用户空间工具:git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee/linux-zigbee

 

         用户空间工具包括以下组件:

 

         iz 控制wpannetlink设备参数;并扫描、关联/断联等。

         izattach 使用串口协议关联PHY层设备与串口端口(串行驱动程序不在主线内核)

         izcoordinator IEEE 802.15.4协调器,它分配和管理短地址数据库

        

         另外,以下额外的工具支持:

 

         izchat 允许节点之间传输的短信

         libpcap 数据包捕获库(IEEE 802.15.4版本1.1.2后支持)

         tcpdump 数据包捕获命令行工具(IEEE 802.15.4版本4.2后支持)

         wireshark 一个补丁使用“-nofcsIEEE802.15.4的分析器和额外的ZigBee分析器

 

----------------------------------------------------------------------------------------------

入门指南

         IEEE 802.15.4协议栈能支持多个无线设备驱动,而且一个无线设备支持多个逻辑接口。

         协议栈包括假装被叫无线设备驱动,它提供了几个相互关联的虚拟无线设备,因此可以实现多个“虚拟”无线节点在一个主机上。

         我们将使用此功能在没有真正的硬件的时候演示协议栈的功能。

 

         首先,下载或安装 以下组件:

         Wireshark(tcpdump)

                   Wireshark

                   tcpdump

         一个最新的主线内核(net-next),

         6lowpan用户空间工具。根据说明建造。

 

         配置Linux内核 802.15.4-使能 如下选项:

                   CONFIG_IEEE802154=y

                   CONFIG_IEEE802154_6LOWPAN=m

                   CONFIG_MAC802154=m

                   CONFIG_IEEE802154_DRIVERS=y

                   CONFIG_IEEE802154_FAKELB=y

 

         使能你的硬件设备:

                   CONFIG_IEEE802154_MRF24J40=m

                   CONFIG_IEEE802154_AT86RF230=m

 

         如果你正使用旧的内核,或使用串口驱动的端口:

                   CONFIG_IEEE802154_SERIAL=m

 

 

         更新你的bootloader和引导你的新内核。

 

         在我们的模拟网络我们将有3个虚假的无线设备。一个无线接口,我们启动3节点短地址为0x1,0x80010x8002

         节点0x1将作为协调器,在它上面运行izcoordinator,它将处理PAN ID 0x777的网络。

         节点0x80010x8002将关联协调器,关联后收到地址。

         我们在对这些节点启动izchat工具,使用Wireshark监控网络流量。

 

         在你开始之前你应该检查一切正常。如果你试试下面的命令:

         # iz listphy

        

         你应该看见下面的输出:

         wpan-phy0  IEEE 802.15.4 PHY object

             page: 0  channel: n/a

             channels on page 0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

             channels on page 1: 0 1 2 3 4 5 6 7 8 9 10

             channels on page 2: 0 1 2 3 4 5 6 7 8 9 10

             channels on page 3: 0 1 2 3 4 5 6 7 8 9 10 11 12 13

             channels on page 4: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

             channels on page 5: 0 1 2 3 4 5 6 7

             channels on page 6: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

 

         注册默认的虚假驱动到一个模拟无线设备。添加两个虚假无限借口到网络设备:

         echo 1 > /sys/bus/platform/devices/ieee802154fakelb/adddev

         echo 1 > /sys/bus/platform/devices/ieee802154fakelb/adddev

 

         检测这3PHY对象:

         # iz listphy | grep PHY

         wpan-phy0  IEEE 802.15.4 PHY object

         wpan-phy1  IEEE 802.15.4 PHY object

         wpan-phy2  IEEE 802.15.4 PHY object

 

         对每一个phy创建无线接口:

         # iz add wpan-phy0

         Registered new device ('wpan0') on phy wpan-phy0

         # iz add wpan-phy1

         Registered new device ('wpan1') on phy wpan-phy1

         # iz add wpan-phy2

         Registered new device ('wpan2') on phy wpan-phy2

 

         设置独立的硬件地址:

         # ip link set wpan0 address de:ad:be:af:ca:fe:ba:be

         # ip link set wpan1 address ca:fe:ca:fe:ca:fe:ca:fe

         # ip link set wpan2 address be:be:be:be:be:be:be:be

 

         使能逻辑接口(缺省,一个逻辑接口关联一个无线设备):

         # ifconfig wpan0 up

         # ifconfig wpan1 up

         # ifconfig wpan2 up

 

         启动wireshark监控网络流量:

         wireshark -i wpan0 -k

 

         启动coordinator(你需要root权限):

         # touch lease

       izcoordinator -d 1 -l lease -i wpan0 -p 0x777 -s 1 -c 11

 

         如果使用旧内核,启动设备(也需要root权限):

         # iz assoc wpan1 777 1 11 short

         # iz assoc wpan2 777 1 11 short

 

         在两个不同的控制台/终端启动简单的聊天程序(0x80010x8002关联时接受的短地址):

         # izchat 777 8001 8002

         # izchat 777 8002 8001

 

         使能6LoWPAN

         # ip link add link wpan0 name lowpan0 type lowpan

         # ip link set lowpan0 address a0:0:0:0:0:0:0:1

         # ip link set lowpan0 up

         # ip addr add fe80::a000:0:0:8/64 dev lowpan0

 

         # ip link add link wpan1 name lowpan1 type lowpan

         # ip link set lowpan1 address a0:0:0:0:0:0:0:2

         # ip link set lowpan1 up

         # ip addr add fe80::a000:0:0:8/64 dev lowpan1

 

         # ip link add link wpan2 name lowpan2 type lowpan

         # ip link set lowpan2 address a0:0:0:0:0:0:0:3

         # ip link set lowpan2 up

         # ip addr add fe80::a000:0:0:8/64 dev lowpan2

 

         在节点之间使用ping

         ping6 fe80::a000:0:0:3%lowpan1

        

         在节点之间使用ssh

         ssh user@fe80::a000:0:0:3%lowpan1

 

         此时,不要指望无状态地址自动配置(SLAAC)地址。手动设置你自己的地址如上所示。

         现在请实验,记住,我们的工作仍在进行中!

 

----------------------------------------------------------------------        

构建linux-zigbee用户空间工具

         linux-zigbee用户空间工具进行配置,安装和测试的内核IEEE 802.15.4子系统提供服务。他们使用内核的Netlink与内核部分进行通信。

 

PC机上构建

         构建工具在一个正常的电脑,libnl-3(Netlink)是必需的。

         目前您的系统上可能已经有了。如果没有,Netlink网站上下载它。linux-zigbee用户空间工具被测试过(至少)3.2.7 libnl-3版本。

         Netlink

 

         构建libnl-3:

         ./configure --prefix=/usr    # <----- or wherever you want it to be installed

         make

         make install  # <----- as root

 

         使用git获取Linux-zigbee用户空间工具。强烈建议使用最新Git版本。

         git clone git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee/linux-zigbee

 

         构建linux-zigbee用户空间工具:

         ./autogen.sh

         ./configure --prefix=/usr    # <----- or wherever you want it to be installed

         make

         make install  # <----- as root

 

在嵌入式系统上交叉构建:

         交叉编译是一个更为棘手的操作。本指南将假设您有一个交叉编译器正常工作,而且它是arm-linux前缀。

         如果你的编译器不同,根据下面的说明调整。它还假设您正在使用3.2.7 libnl-3版本。如果不是,相应地调整路径。

 

         1.首先下载libnl-3源码和下载的git版本linux-zigbee用户空间工具(如上所述),并将它们放到一起。

        

         2.根据下面运行:

         # Export some environment variables

         export STAGING=$PWD/../out

         export HOST=arm-linux

 

         # Build libnl-3

         cd libnl-3.2.7

         ./configure --prefix=$STAGING --host=$HOST

         make install

 

         # Build linux-zigbee userspace tools

         cd ../linux-zigbee

         ./autogen.sh --help    # --help prevents it from running ./configure .

         PKG_CONFIG_DIR=  \   

         PKG_CONFIG_LIBDIR=\

         $STAGING/lib/pkgconfig:$STAGING/share/pkgconfig \

         PKG_CONFIG_SYSROOT_DIR=$STAGING \

         DESTDIR=$STAGING ./configure --prefix=/ --host=$HOST

         make

         make DESTDIR=$STAGING install

 

         你的输出文件将在$STAGING,可以复制到你的目标系统。

 

----------------------------------------------------------------------------

硬件支持

         以下是协议栈支持无线设备硬件:

 

主线内核

         设备                   状态         驱动                   描述

         Fakehard 支持         fakehard  无线设备硬件驱动例子,实现所有l 802.15.4 MAC层硬件 

         Fakelb                支持         fakelb                 虚假无线设备驱动, 提供没有物理无线设备下的模仿环境  

         AT86RF231       支持         at86rf230         Atmel AT86RF231 device connected directly to CPU/SoC via SPI bus. 

         MRF24J40        支持         mrf24j40  Microchip MRF24J40 device connected directly to the CPU/SoC via SPI bus.

 

传统内核

         下面许多驱动不在主线内核。如果你拥有这个硬件,对这些主线的驱动感兴趣,请联系邮件列表

         设备                   状态         驱动                   描述

         Fakehard 支持         fakehard         无线设备硬件驱动例子,实现所有l 802.15.4 MAC层硬件 

         Fakelb                支持         fakelb     虚假无线设备驱动, 提供没有物理无线设备下的模仿环境

         AT86RF230       在制品     at86rf230         Atmel AT86RF230 device connected directly to CPU/SoC via SPI bus. 

         AT86RF231       支持       at86rf230         Atmel AT86RF231 device connected directly to CPU/SoC via SPI bus. 

         AT86RF212       不支持     at86rf230         Atmel AT86RF212 device connected directly to CPU/SoC via SPI bus. Will be supported by unified at86rf230 driver. 

         RZ USBstick      不支持  serial or

                                     special               Support for such configurations is planned, no concrete dates yet 

         MC13192 eval.

         boards               支持         serial                  MC13192SARD, MC13192EVK that contain HCS08 MCU and MC13192 RF transceiver are supported by generic "serial" driver for communication over RS-232. Devices require custom firmware available only on-demand in binary form due to Freescale licensing. 

         MC1320X +

         HCS08 kits     不支持     serial                  These kind of devices should be very easy to support using our current firmware. Please contact us via ML or directly if you need this firmware. 

         MC1321X dev

         kits            不支持     serial                  These kind of devices should be very easy to support using our current firmware. Please contact us via ML or directly if you need this firmware. 

         Redwire Econotag  支持  serial         USB-connected 802.15.4 development board capable of running firmware implementing the Serial Protocol. Thanks to Mariano Alvira's efforts (http://mc1322x.devl.org/). 

         Analog Device

         ADF7242           支持         adf7242  

         TI Chipcon CC2420  支持  cc2420     SPI for communications + GPIO for extra chip signals 

         Philips SRM7500  不支持  srm7500          802.15.4 TV Remote 802.15.4 over USB 

 

 

------------------------------------------------------------------------------------

常见问题解答

        

         1.我想使用linux-zigbee驱动我的ZigBee硬件…

         a.不行。尽管它的名字linux-zigbee项目也实现了ZigBeeZigBee RF4CE规范的任何部分。

         这个项目的目标是使Linux支持ZigBee下层-IEEE 802.15.4网络提供服务(LR-WPAN)

         驱动你的ZigBee硬件应该使用供应商提供的专有软件。

         b.如果你的硬件可以驱动IEEE 802.15.4 MAC,您可以在Linux内核和802.15.4子系统下对这个硬件接口编写驱动程序。

        

         2.你有什么计划在未来实现支持ZigBee?

         a.没有。

         b.不幸的是许可证在ZigBee规格与GPL不是真正兼容,因此直到ZigBee联盟更改他们的许可条件,我们不会看到一个内核实现的ZigBee协议。

         c.可以在用户空间中实现无线个域网栈。Linux IEEE 802.15.4子系统应该已经提供最必要的钩子。补丁的内核组件以及用户空间欢迎协议实现。

 

         3.我想用我的u/串行软件狗连接Linux IEEE 802.15.4协议栈。

         a.你需要为你的硬件实现一个能与Linux内核通信的固件。例如串行(Serial-over-USB)可以使用SerialV1协议连接(尽管它应该考虑弃用)

         b.你需要实现一个可以通过协议与硬件对话的Linux驱动程序。所有必要的文档是在Linux内核中。

 

         4.什么协议在linux-zigbee项目下实现?

         a.可以使用直接IEEE 802.15.4数据套接字交换数据,或者可以创建6lowpan(IPv6 LR-WPAN)接口绑定到你的无线设备来使用IPv6协议簇。

 

         5.linux-zigbee是和IEEE 802.15.4协议栈标准一致吗?

         a.对于HardMAC硬件标准一致性取决于设备本身,linux-zigbee栈服务器是Linux网络子系统和硬件之间一个很薄的层。

         b.对于SoftMAC硬件linux-zigbee栈与标准不一致!首先,它缺少一些必需的特性。其次,它使用非标准流程关联网络。这可能在将来改善。欢迎补丁:)

 

         6.HardMACSoftMAC术语是什么意思?

         IEEE 802.11 FullMAC/SoftMAC条款比较。

         HardMAC是一个种在它自己实现MLME(MAC子层管理实体)的设备。你跟这样的设备使用IEEE 802.15.4 MAC命令。没有mac802154(软件实现IEEE 802.15.4)是必需的。

         SoftMAC设备只包含PHY层实现,可能一些钩子来帮助实现主机CPUMLMEmac802154子系统是这种MLME的一个例子。

         其他MLME实现可以支持飞思卡尔SMAC,MicroChip?MiWi?或其他专有协议在IEEE 802.15.4 PHY层。

 

 

-----------------------------------------------------------------------------------------------

串行设备和协议

         这种串行协议被设计成一个任何使用串行接口的802.15.4设备的通用协议内部。

         通常这些设备使用可编程的用户固件,在固件中实现这个协议。

         设备使用串行接口,通过名字叫“serial”的驱动,使用izattach附加到wpan设备。

         串行驱动程序不是在主线内核,但很容易移植。如果你有兴趣在主线内核使用串行驱动程序,请联系邮件列表。

        

         唯一已知使用这个协议的设备是Redwire Econotag

 

串行协议版本1

         主机和串行软件狗交换消息。每个消息开始的两个字节序列(z = 0x7a,b= 0x62)

         然后是命令/响应ID。消息来自主机在cmdID高位复位,消息来自电子狗在高位置位。

 

命令序列

         ?Open: 上电收发器, etc.

                   ?host: 'z' 'b' 0x01

                   ?response: 'z' 'b' 0x81

 

         ?Close: 断电收发器, 关闭当前业务, etc.

                   ?host: 'z' 'b' 0x02

                   ?response: 'z' 'b' 0x82

 

         ?Set Channel: 改变频道使用。范围从116,对应IEEE 802.15.4页面0 频道1126

                   ?host: 'z' 'b' 0x04

                   ?response: 'z' 'b' 0x84

 

         ?ED: 开始ED测量.

                   ?host: 'z' 'b' 0x05

                   ?response: 'z' 'b' 0x85

 

         ?CCA: 执行CCA的通道。结果是返回的状态

                   ?host: 'z' 'b' 0x06

                   ?response: 'z' 'b' 0x86

 

         ?Set State: 将收发器设置为指定的 .

                   ?host: 'z' 'b' 0x07

                   ?response: 'z' 'b' 0x87

 

         ?Transmit Block: 传输的数据块。< len >是数据块的长度。<数据>MAC w/o FCS(它应该是软件狗自动计算)             

                   ?host: 'z' 'b' 0x09

                   ?response: 'z' 'b' 0x89

 

         ?Receive block: :唯一由软件狗发起的消息。表示收到块.

                            lqi测量期间接收,是数据块的长度。MAC w/o FCS

                   ?dongle: 'z' 'b' 0x8b

                   ?response: 'z' 'b' 0x0b

 

         ?Get 64-bit address:请求软件狗的64位地址。

                   ?host: 'z' 'b' 0x0d

                   ?response: 'z' 'b' 0x8d <8 bytes of hw address>

 

         (as per 802.15.4)

         ?SUCCESS = 0x00

         ?RX_ON = 0x01

         ?TX_ON = 0x02

         ?TRX_OFF = 0x03

         ?IDLE = 0x04

         ?BUSY = 0x05

         ?BUSY_RX = 0x06

         ?BUSY_TX = 0x07

         ?ERR = 0x08

 

        

         ?RX_MODE = 0x02

         ?TX_MODE = 0x03

         ?FORCE_TRX_OFF = 0xF0

 

 

----------------------------------------------------------------------------------------------------

项目下载

 

 

-----------------------------------------------------------------------------------------------------

社区

         邮件列表

         IRC频道

 

项目状态

         状态在2012-03-04IRC会议中概述

        

阅读(4856) | 评论(0) | 转发(6) |
给主人留下些什么吧!~~