先吹吹TUN/TAP
其实是一个虚拟的网络设备
纯软模拟
玩过Linux的筒子应该知道
Linux有个很好玩的梗
USB设备可以虚拟成一个网络设备
KW41z的Thread中
有
Framework Serial Connectivity Interface (FSCI)和Thread Host Control Interface (THCI)
字面上大概意思就是整一个串行通信接口(USB、UART、SPI),有点牛掰
可以将IP数据包 封装/解包 成串行数据
如果有一个带u口的路由器,加上软件
一块KW41z板,就能完成边界路由器的功能
早在几年前论坛ATMEL R21 ZigBee活动中
就有论坛大神把Contiki移植到R21
借助Contiki中的Slip协议,搭配OPENWRT路由器和tunslip6软件
完成border router
这次恩叉屁的资料再一次给力
源码中就包含了border router的例程
同时,还公布了Linux OS上位机软件的源码
它们就在 ..\SDK_2.2_FRDM-KW41Z\tools\wireless\host_sdk\hsdk\demo
实在是给力了
试着在树莓派上部署了一版
-------------------------------------------------KW41z侧的工作---------------------------------------------------
两块板分别烧固件
一个是thread_host_controlled_device,理论上hybrid下类似的工程也行
另一个是thread_router_eligible_device,理论上其他的也行
尤其需要注意
第一个工程中source\config.h文件中
#define THR_SERIAL_TUN_ROUTER ,必须配置为1
烧好
thread_host_controlled_device的板子撸入树莓派
另外一块待命
-------------------------------------------------树莓派侧的工作----------------------------------------------------
1、拷上源码(略)
2、安装依赖
- apt-get install update
- apt-get install build-essential libudev-dev libpcap-dev
复制代码
3、make几下
在..\host_sdk\hsdk,make一次,接着make install
在..\host_sdk\hsdk\demo,执行make; make spi
这个时候,..\host_sdk\hsdk\demo\bin下会生成
GetKinetisDevices PCAPTest SPITest Thread_KW_Tun
这几个可执行代码流
./GetKinetisDevice可以查看连接上USB口的KW41z板
执行一下就能看到:NXP Kinetis-W device on /dev/ttyACM0.
不同系统,端口号可能不同
./Thread_KW_Tun就是处理IP包的程序
后面再用
接着编辑一个sh文件,添加虚拟网络接口
nano tun.sh
- #!/bin/bash
- # Create a new TUN interface for Thread interaction.
- ip -6 tuntap add mode tun fslthr0
- # Assign it a global IPv6 address.
- ip -6 addr add FD01::2 dev fslthr0
- # Add route to default address of Serial TUN embedded interface.
- ip -6 route add FD01::1 dev fslthr0
- # Add route to Unique Local /64 Prefix via fslthr0.
- ip -6 route add FD01:0000:0000:3EAD::/64 dev fslthr0
- # The interface is ready.
- ip link set fslthr0 up
- # Enable IPv6 routing on host.
- sysctl -w net.ipv6.conf.all.forwarding=1
复制代码
大致意思就是创建一个叫做fslthr0的IPv6虚拟网络接口
./tun.sh
跑起来
ifconfig看一下
会出现这么个东西
- fslthr0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
- inet6 addr: fd01::2/128 Scope:Global
- UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
- RX packets:8 errors:0 dropped:0 overruns:0 frame:0
- TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:500
- RX bytes:832 (832.0 B) TX bytes:832 (832.0 B)
复制代码
到这里
运行 ./hsdk/demo/bin/Thread_KW_Tun /dev/ttyACM0 fslthr0
- [THR] Set 802.15.4 channel OK!
- [THR] Create Network OK!
- [MESHCOP] Start Commissioner OK!
- [MESHCOP] Add Expected Joiner OK!
- [MESHCOP] Sync Steering Data OK!
复制代码
渐入佳境
------------------------------------------------------------------over segment-------------------------------------------------------
另外一块板子在串口join一个thread网络
ok后,ifconfig看一下
会出现
- Interface 0: 6LoWPAN
- Link local address (LL64): fe80::2995:f51:69ce:4087
- Mesh local address (ML64): fd1d:b758:634f:5834:d8ca:d682:6645:c052
- Mesh local address (ML16): fd1d:b758:634f:5834::ff:fe00:1
- Unique local address: fd01::3ead:2187:d4fe:ff70:f7db
- Link local all Thread Nodes(MCast): ff32:40:fd1d:b758:634f:5834::1
- Realm local all Thread Nodes(MCast): ff33:40:fd1d:b758:634f:5834::1
复制代码
看到Unique local address: fd01::3ead:2187:d4fe:ff70:f7db了么
和树莓派上虚拟的地址是一样的
接下来,大家都懂的......
从树莓派ping了一下
能通
看样子,Border Router离我们不远了
这个demo
楼主在Desktop Ubuntu和树莓派上都试过
能行
so,搭载OpenWrt的路由器应该也不在话下
可惜手头上没有,不能进一步玩耍了
这块板的资源,拿来点灯真是浪费了
不过,楼主还是要点
先到这
此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处