Стек ZigBee для Linux

Проект linux-zigbee реализует стек протоколов ieee802.15.4 в виде набора драйверов ядра linux, драйвер трансивера zigbee, firmware для трансивера и набор утилит. Взаимодействие с транисивером идет через последовательный порт. Отладка выполняется в UserModeLinux.

Внешние ссылки

страничка в группе google: http://groups.google.ru/group/osll/web/linux-zigbee

исходники драйвера на sourceforge: https://sourceforge.net/projects/zigbee-stack-t/

сайт проекта UserModeLinux: http://user-mode-linux.sourceforge.net/

файловые системы для UML: http://uml.nagafix.co.uk/

исходники wireshark: http://www.wireshark.org/download.html

страничка на wiki wireshark по ieee802.15.4: http://wiki.wireshark.org/IEEE_802.15.4

мануал на процессор отладочной платы: http://www.freescale.com/...

Установка и настройка

Первый шаг – получить исходники драйвера (svn co https://zigbee-stack-t.svn.sourceforge.net/svnroot/zigbee-stack-t zigbee-stack-t). Дальше – zigbee-stack-t/trunk/README.txt с небольшими исправлениями:

перед компиляцией ядра пропатчить файлы include/linux/net.h и include/linux/socket.h: (для запуска sock-coord и sock-router требуется поддержка PF_ZIGBEE. Для этого следует modprobe af_zigbee, который регистрирует новый протокол. Для него-то и нужен новый индекс)

diff -bur linux-2.6.25-org/include/linux/net.h linux-2.6.25/include/linux/net.h
--- linux-2.6.25-org/include/linux/net.h 2008-04-17 06:49:44.000000000 +0400
+++ linux-2.6.25/include/linux/net.h 2008-08-10 00:58:00.000000000 +0400
@@ -26,7 +26,7 @@
struct inode;
struct net;
-#define NPROTO 34 /* should be enough for now.. */
+#define NPROTO 35 /* should be enough for now.. */
#define SYS_SOCKET 1 /* sys_socket(2) */
#define SYS_BIND 2 /* sys_bind(2) */
diff -bur linux-2.6.25-org/include/linux/socket.h linux-2.6.25/include/linux/socket.h
--- linux-2.6.25-org/include/linux/socket.h 2008-04-17 06:49:44.000000000 +0400
+++ linux-2.6.25/include/linux/socket.h 2008-08-10 00:57:47.000000000 +0400
@@ -189,7 +189,7 @@
#define AF_BLUETOOTH 31 /* Bluetooth sockets */
#define AF_IUCV 32 /* IUCV sockets */
#define AF_RXRPC 33 /* RxRPC sockets */
-#define AF_MAX 34 /* For now.. */
+#define AF_MAX 35 /* For now.. */
/* Protocol families, same as address families. */
#define PF_UNSPEC AF_UNSPEC

на этапе сборки ядра, после make defconfig ARCH=um выполнить make menuconfig ARCH=um и поставить M в Library routines/CRC* functions;

вместо http://uml.nagafix.co.uk/FedoraCore5/FedoraCore5-x86-root_fs.bz2 удобнее использовать http://uml.nagafix.co.uk/Fedora8/Fedora8-x86-root_fs.bz2, особенно, если host-система – такая же. Иначе все может закончиться Floating Point Exception при запуске утилит (если версия glibc host-системы сильно отличается от той что в FedoraCore5), добавлением LDFLAGS+=-static и перекомпиляцией утилит;

после загрузки в uml отредактировать /etc/inittab, убрав последнюю строку (что-то заканчивающееся на ttyS0, через который мы работаем с устройством);

список загружаемых модулей должен быть длиннее чем указано в README.txt:

depmod
dmesg -n8
modprobe ieee80215_lib
modprobe zb
modprobe dbg_print
modprobe ieee80215 debug_opts=20 ts=1
modprobe zb_ldisc dev_name="my_dev1"
modprobe af_zigbee

Как это выглядит у меня

Цели объявленные в группе

реализовать диссектор для Wireshark – решение

сделать чтобы все уровни (LDISC, IEEE 802.15.4, ZigBee NWK) были независимы друг от друга

определить и реализовать интерфейс сокетов на уровне IEEE 802.15.4 и ZigBee NWK

реализовать ZigBee APL в пользовательском коде

Текущие результаты

Тестовый набор патчей для достижения первой цели:

патч для драйвера (http://groups.google.ru/group/osll/web/zigbee-stack-t_for-wshark_mac.patch) добавляющий утилиту tools/zbcap захватывающую пакеты ieee802.15.4 уровня MAC с указанного сетевого интерфейса в файл и функции перенаправления входящих и исходящих пакетов стека с уровня MAC в пакетный сокет;

патч для драйвера (http://groups.google.ru/group/osll/web/zigbee-stack-t_for-wshark_phy.patch) добавляющий утилиту tools/zbcap захватывающую пакеты ieee802.15.4 уровня PHY с указанного сетевого интерфейса в файл и функции перенаправления входящих и исходящих пакетов стека с уровня PHY в пакетный сокет;

патч для wireshark-1.0.2 (http://osll.googlegroups.com/web/wireshark-1.0.2-zigbee-phy.patch) добавляющий чтение и разбор пакетов ieee802.15.4 уровня PHY (работает и для 1.0.3).