LwIP(Light Weight Internet Protoco1)是瑞士计算机科学院(Swedish Institute of Computer Science)AdamDunkels等人开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LWIP的含义是Light Weight(轻型)IP协议。LWIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LWIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用。一般它只需要几十KB的RAM和40 KB左右的ROM就可以运行,这使LWIP协议栈适合在小型嵌入式系统中使用。 官网:https://savannah.nongnu.org/projects/lwip/ 将LwIP协议栈分成四层: 1.应用层 2.传输层 3.网络层 4.网卡层 本文将2,3,4统称为协议层 应用层支持: arp, dhcpd, dns, httpd, ifconfig, iperf, lsfd, mdns, netbiosns, ping, sendfile, snmp, sntp, telnetd, tftp
协议层支持: IP (Internet Protocol, IPv4 and IPv6) including packet forwarding over multiple network interfaces ICMP (Internet Control Message Protocol) for network maintenance and debugging IGMP (Internet Group Management Protocol) for multicast traffic management MLD (Multicast listener discovery for IPv6). Aims to be compliant with RFC 2710. No support for MLDv2 ND (Neighbor discovery and stateless address autoconfiguration for IPv6). Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 (Address autoconfiguration) UDP (User Datagram Protocol) including experimental UDP-lite extensions TCP (Transmission Control Protocol) with congestion control, RTT estimation and fast recovery/fast retransmit raw/native API for enhanced performance Optional Berkeley-like socket API DNS (Domain names resolver)
Apache license v2.0
系统中相关配置已有默认值,如需修改配置,统一在yaml中**def_config**节点修改,具体如下:
使能TCPIP是1,不使能TCPIP是0,默认是1,可修改yaml配置如
使用AOS的LwIP是1, 不实用AOS的LwIP是0,默认是1,可修改yaml配置如:
使能LwIP数据包打印功能是1, 不使能是0,默认1,可修改yaml配置如:
args | description |
---|---|
domain | 协议域 |
type | 类型 |
protocol | 传输协议 |
args | description |
---|---|
s | 要绑定的 socket描述符 |
addr | 一个指向含有本机 IP 地址和端口号等信息的 sockaddr 结构的指针 |
namelen | sockaddr 结构的长度 |
args | description |
---|---|
s | 要绑定的 socket描述符 |
backlog | 连接请求队列可以容纳的最大数目 |
args | description |
---|---|
s | socket描述符 |
backlog | 连接请求队列可以容纳的最大数目 |
args | description |
---|---|
s | socket描述符 |
name | 指向 sockaddr 结构的指针,存放要连接的服务器的 IP 地址和端口号等信息 |
namelen | sockaddr 结构体的长度 |
args | description |
---|---|
s | socket描述符 |
dataptr | 指向所要发送的数据区的指针 |
size | 要发送的字节数 |
flags | 控制选项,通常为 0 |
args | description |
---|---|
s | socket描述符 |
mem | 指向存储数据的内存缓存区的指针 |
len | 缓冲区的长度 |
flags | 控制选项,通常为 0 |
args | description |
---|---|
s | socket描述符 |
size | 要发送的字节数 |
flags | 控制选项,通常为 0 |
to | 指向 sockaddr 结构体的指针,存放目的主机的 IP 和端口号 |
tolen | sockaddr 结构体的长度 |
args | description |
---|---|
s | socket描述符 |
mem | 指向存储数据的内存缓存区的指针 |
size | 缓冲区的长度 |
flags | 控制选项,通常为 0 |
from | 指向 sockaddr 结构体的指针,存放源主机的 IP 和端口号 |
fromlen | 指向 sockaddr 结构体的长度的指针 |
args | description |
---|---|
maxfdp1 | 最大的文件描述符 |
readset | 读文件描述符 |
writeset | 写文件描述符 |
exceptset | 异常的文件描述符 |
timeout | 超时时间 |
args | description |
---|---|
s | socket 描述符 |
args | description |
---|---|
s | socket 描述符 |
how | 控制选项 |
args | description |
---|---|
name | 主机域名 |
args | description |
---|---|
s | socket 描述符 |
name | sockaddr 结构体指针,用来存储得到的主机信息 |
namelen | 指向 sockaddr 结构体的长度的指针 |
args | description |
---|---|
s | socket 描述符 |
name | sockaddr 结构体指针,用来存储得到的主机信息 |
namelen | 指向 sockaddr 结构体的长度的指针 |
args | description |
---|---|
s | socket 描述符 |
cmd | 套接字操作命令 |
argp | 操作命令所带参数 |
args | description |
---|---|
s | socket 描述符 |
level | 选项定义的层次;目前支持SOL_SOCKET, SOL_PACKET, IPPROTO_IP和IPPROTO_TCP |
optname | 需设置的选项 |
optval | 指向option属性的指针 |
optlen | 指向option属性长度的指针 |
args | description |
---|---|
s | socket 描述符 |
level | 选项定义的层次;目前支持SOL_SOCKET, SOL_PACKET, IPPROTO_IP和IPPROTO_TCP |
optname | 需设置的选项 |
optval | 指向option属性的指针 |
optlen | option属性的长度 |
组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考《AliOS Things集成开发环境使用说明之搭建开发环境》,下载安装。 待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
打开已有工程
如果用于测试的案例工程已存在,可参考《AliOS Things集成开发环境使用说明之打开工程》打开已有工程。
创建新的工程
组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考《AliOS Things集成开发环境使用说明之创建工程》。
案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:
在已安装了 的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
上述命令执行成功后,组件源码则被下载到了./components/lwip路径中。
在lwip组件的package.yaml中添加example示例代码:
在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考《AliOS Things集成开发环境使用说明之编译固件》。
helloworld_demo案例的固件生成后,可参考《AliOS Things集成开发环境使用说明之烧录固件》来烧录固件。
固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考《AliOS Things集成开发环境使用说明之查看日志》。
当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
CLI命令行输入netmgr相关命令进行联网操作:
CLI命令行输入udp 测试命令:
关键日志
输入联网命令后的WIFI联网成功日志:
启动test_udp之后的数据接收打印:
CLI命令行输入ping测试命令
CLI命令行输入查看设备网络接口的配置信息命令
CLI命令行输入tftp向服务器获取文件命令
CLI命令行输入iperf测试网络性能
关键日志
ping成功收到数据包日志
ifconfig成功查看设备网络接口的配置信息日志
tftp成功获取文件日志
iperf测试日志
NA