LWIP是优秀的嵌入式TCP/IP协议栈,我们之前介绍了其在嵌入式环境裸机和RTOS环境的移植,有时候我们仅仅是需要调试协议栈本身,在嵌入式环境中可能调试不便,此时我们可以直接在PC环境下进行协议栈调试。以下以WSL+Ubuntu环境介绍LWIP的开发环境的搭建。
安装 UML
sudo apt install uml-utilities
创建 tap0
sudo tunctl -u someuser
如下
lhj@DESKTOP-BINN7F8:~/lwip$ sudo tunctl -u lhj
Set 'tap1' persistent and owned by uid 1000
查看网卡
ifconfig
如下
tap0: flags=4099
mtu 1500
ether a6:13:e7:75:80:09 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions
设置网卡IP并启用
sudo ifconfig tap0 192.168.1.10 up
如果需要删除网卡可以使用sudo tunctl -d tap0
安装必要的工具
sudo apt install bridge-utils
sudo apt install cmake
lgit clone https://github.com/lwip-tcpip/lwip.git
lcd lwip
lsudo ./contrib/ports/unix/setup-tapif #默认使用tap0
lcp ./contrib/examples/example_app/lwipcfg.h.example ./contrib/examples/example_app/lwipcfg.h
lvim ./contrib/examples/example_app/lwipcfg.h
去掉`#define USE_DHCP 0` 和`#define USE_AUTOIP 0`的注释,并将`LWIP_LWIPERF_APP`的宏定义为 1
lcd ./contrib/ports/unix/example_app/
lmkdir build && cd build
lcmake -DLWIP_DIR=/home/lhj/lwip ..
lmake
lsudo ./example_app
另开一个shell,安装工具iperf
sudo apt install iperf
运行连接服务端进行测试
iperf -c 192.168.1.200
新开的shell作为客户端IP为192.168.1.1,lwipbridge可以看到
lwipbridge: flags=4163
mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::a413:e7ff:fe75:8009 prefixlen 64 scopeid 0x20<link>
ether a6:13:e7:75:80:09 txqueuelen 1000 (Ethernet)
RX packets 26125 bytes 1045056 (1.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14543 bytes 47501586 (47.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
原来运行example_app的shell为服务端IP为192.168.1.200监听端口5001。
测试结果如下
lwip/contrib/ports/unix/example_app/Makefile
添加一行
CFLAGS+=-g3
重新make
使用gdb调试代码
sudo gdb ./example_app
b main #断点到main函数处
r #运行,到main断点处停止
layout src #查看源码
n #运行到下一行
s #单步运行到下一语句
使用vscode浏览代码
code .
LWIP可以方便的在PC上搭建开发环境进行协议栈的开发调试。