没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
88页
onps栈设计实现了一套完整的tcp/ip协议模型。从数据链路层到ip层,再到tcp/udp层以及之上的伯克利socket层,最后是用户自己的通讯应用层,onps栈实现了全栈覆盖,能够满足绝大部分的网络编程需求。 本文提供了移植说明: 整个移植说明按照两个主要应用场景展开: 一,使用有线以太网络联网的场景; 二,使用 4g/5g 模 块拨号联网的场景。 前者需要在实际的以太网卡上实现 tcp/ip 通讯;后者则需要利用 ppp 栈构建一个虚 拟的点对点网卡来实现 tcp/ip 通讯。 其实这两个应用场景本质上并没什么区别, ip 层以上的处理逻辑完 全一致。之所以分开进行讲解,主要是因为拨号联网的场景需要实现 ppp 栈, 而以太网络则是实现 ethernet 协议。 两者在底层实现上有着很大的区别。 因此它们与目标系统进行适配的移植工作也不一致, 所以需要单独拿出来分别进行讲解。
资源推荐
资源详情
资源评论
onps 网络协议栈移植及使用说明 v1.0 1 / 88
作者:
Neo-T
邮箱:
marsstory99@hotmail.com
1 背景 ....................................................................................................................................................................................... 4
2 简介 ....................................................................................................................................................................................... 4
3 移植 ....................................................................................................................................................................................... 5
3.1 以太网应用场景下的移植 ....................................................................................................................................... 5
3.1.1 将 onps 栈代码添加到工程 ................................................................................................................................. 5
3.1.2 sys_config.h——配置协议栈 ............................................................................................................................. 8
3.1.3 datatype.h——基础数据类型定义 .................................................................................................................... 8
3.1.4 编写 OS 适配层相关代码 ..................................................................................................................................... 9
3.1.5 编写网卡驱动并注册网卡 .................................................................................................................................. 17
3.1.6 dhcp 动态地址申请测试 .................................................................................................................................... 26
3.1.7 ping 测试 ............................................................................................................................................................. 29
3.1.8 dns 测试 ............................................................................................................................................................... 33
3.1.9 sntp 网络校时测试 .............................................................................................................................................. 35
3.1.10 tcp 客户端测试 .................................................................................................................................................. 37
3.1.11 tcp 服务器测试 .................................................................................................................................................. 43
3.1.12 udp 通讯测试 .................................................................................................................................................... 48
3.2 ppp 拨号场景下的移植 ......................................................................................................................................... 52
3.2.1 准备工作 .............................................................................................................................................................. 52
3.2.2 配置协议栈 .......................................................................................................................................................... 54
3.2.3 os 适配层——编写 tty 驱动 .............................................................................................................................. 55
3.2.4 调整相关系统设置 .............................................................................................................................................. 57
3.2.5 ping 等网络工具测试 ......................................................................................................................................... 61
3.2.6 tcp 及 udp 客户端测试 ...................................................................................................................................... 62
onps 网络协议栈移植及使用说明 v1.0 2 / 88
作者:
Neo-T
邮箱:
marsstory99@hotmail.com
4 socket 函数使用说明 ........................................................................................................................................................ 64
socket ............................................................................................................................................................................. 65
close ............................................................................................................................................................................... 65
connect .......................................................................................................................................................................... 66
connect_nb ................................................................................................................................................................... 67
is_tcp_connected ......................................................................................................................................................... 68
send ................................................................................................................................................................................ 69
send_nb ......................................................................................................................................................................... 70
is_tcp_send_ok ............................................................................................................................................................. 71
sendto ............................................................................................................................................................................ 73
recv ................................................................................................................................................................................. 73
socket_set_rcv_timeout ............................................................................................................................................. 74
recvfrom ........................................................................................................................................................................ 75
bind ................................................................................................................................................................................ 76
listen ............................................................................................................................................................................... 77
accept ............................................................................................................................................................................ 78
tcpsrv_recv_poll ........................................................................................................................................................... 79
socket_get_last_error/onps_get_last_error ........................................................................................................... 79
socket_get_last_error_code ...................................................................................................................................... 80
5 常用工具函数 ..................................................................................................................................................................... 80
htonll .............................................................................................................................................................................. 81
htonl ............................................................................................................................................................................... 81
htons .............................................................................................................................................................................. 81
onps 网络协议栈移植及使用说明 v1.0 3 / 88
作者:
Neo-T
邮箱:
marsstory99@hotmail.com
inet_addr ....................................................................................................................................................................... 82
inet_addr_small ........................................................................................................................................................... 82
inet_ntoa ....................................................................................................................................................................... 83
inet_ntoa_ext ................................................................................................................................................................ 83
inet_ntoa_safe .............................................................................................................................................................. 83
inet_ntoa_safe_ext ...................................................................................................................................................... 84
ip_addressing ............................................................................................................................................................... 84
strtok_safe .................................................................................................................................................................... 85
snprintf_hex .................................................................................................................................................................. 86
printf_hex ...................................................................................................................................................................... 86
onps_error..................................................................................................................................................................... 87
6 获取源码 ............................................................................................................................................................................. 87
7 后续工作计划 ..................................................................................................................................................................... 88
onps 网络协议栈移植及使用说明 v1.0 4 / 88
作者:
Neo-T
邮箱:
marsstory99@hotmail.com
1 背景
大约是 06 年,因项目之需我开始接触应用于单片机系统的国外开源 tcp/ip 协议栈——LwIP,并 借此
顺势创作了我的第一本印成铅字的书——《嵌入式网络系统设计——基于 Atmel ARM7 系列》。这本书的
反响还不错,好多人给我发 msn(可惜这么好的一个即时通讯工具就这么被微软放弃了,好多联系人就此
失联,)或邮件咨询相关问题。在我原来的写作计划中,这本书的出版只是一个开始,接下来还要写第
二本——系统介绍 LwIP 包含的 ppp 协议栈的移植、应用及设计实现等相关内容。但,事与愿违,这本书
跳票了,且这一跳就是十二年……
细细想来,当初跳票的主因有二:其一,因家庭、工作等致可支配时间太少;其二,缺乏足够的 ppp
协议相关知识及技术储备致信心不足,畏首畏尾,裹足不前。但,这件事始终是我的一个遗憾。十二年
的时间,不长亦不短,但足够让心底的遗憾变成一粒小小的种子并茁壮成长为一棵梦想的参天大树。
如今,世界来到了疫情肆虐的二零年代。我的可支配时间多了起来,技术能力亦远非当年可比。梦想
之树到了开花结果的时候了。遥想当初,入行还没几年,技术能力有限,我只能站在大神的肩膀上研究
如何移植、使用 LwIP,ppp 栈碰都没敢碰。现在,如果还只是延续十几年前的工作,那这件事做起来就
无甚意义。基于对自身技术实力的准确认识,我决定自己从零开始搭建一个完整的网络协议栈。终,历 6
个月余,onps 协议栈(onps,open net protocol stack)完成初版开发,并内部测试通过。十余年的遗
憾今日得偿。另,从业 20 余年,内心终有一个做核心基础软件的梦。今,这二之梦想亦借此得偿。
新莺初啼,总免不了会有诸多不尽如人意的地方。开源,则可与志趣相投者共享、共用、共研,历诸
位严苛手段使之快速迭代,快速成熟,比肩 LwIP 可期。
2 简介
onps 是一个开源且完全自主开发的国产网络协议栈,适用于资源受限的单片机系统,提供完整地
ethernet/ppp/tcp/ip 协议族实现,同时提供 sntp、dns、ping 等网络工具,支持以太网环境下 dhcp 动
态 ip 地址申请,也支持动态及静态路由表。协议栈还封装实现了一个伯克利套接字(Berkeley sockets)
层。该层并没有完全按照 Berkeley sockets 标准设计实现,而是我根据以往 socket 编程经验,以方便
用户使用、简化用户编码为设计目标,重新声明并定义了一组常见 socket 接口函数。协议栈简化了传统
BSD socket 编程需要的一些繁琐操作,将一些不必要的操作细节改为底层实现,比如 select/poll 模型、
阻塞及非阻塞读写操作等。
为了适应单片机系统对内存使用极度变态的苛刻要求,onps 协议栈在设计之初即考虑采用写时零复
制(zero copy)技术。用户层数据在向下层协议传递过程中,协议栈采用 buf list 链表技术将它们链
接到一起,直至将其发送出去,均无须任何内存复制操作。另外,协议栈采用 buddy 算法提供安全、可
靠的动态内存管理功能,以期最大限度地提高协议栈运行过程中的内存利用率并尽可能地减少内存碎片。
不同于本世纪 00 到 10 年代初,单片机的应用场景中 ucosii 等 rtos 尚未大规模普及,前后台系统
还大行其道的时代,现如今大部分的应用场景下开发人员选择使用 rtos 已成为主流。因此,协议栈在设
计之初即不支持前后台模式,其架构设计建立在时下流行的 rtos(RT-Thread、ucosii/iii 等)之上。
协议栈移植的主要工作也就自然是针对不同 rtos 编写相关 os 适配层功能函数了。当然,如果你有着极
其特定的应用场景,需要将 onps 栈移植到采用前后台模式的单片机上,我的建议是保留 tcp/udp 之下协
议层的通讯处理逻辑,调整上层的系统架构使其适应目标系统运行模式。
onps 网络协议栈移植及使用说明 v1.0 5 / 88
作者:
Neo-T
邮箱:
marsstory99@hotmail.com
3 移植
整个移植说明按照两个主要应用场景展开:一,使用有线以太网络联网的场景;二,使用 4g/5g 模
块拨号联网的场景。前者需要在实际的以太网卡上实现 tcp/ip 通讯;后者则需要利用 ppp 栈构建一个虚
拟的点对点网卡来实现 tcp/ip 通讯。其实这两个应用场景本质上并没什么区别,ip 层以上的处理逻辑完
全一致。之所以分开进行讲解,主要是因为拨号联网的场景需要实现 ppp 栈,而以太网络则是实现
ethernet 协议。两者在底层实现上有着很大的区别。因此它们与目标系统进行适配的移植工作也不一致,
所以需要单独拿出来分别进行讲解。
我熟悉并使用过的 rtos 除了 ucosii 就是 rt-thread,所以本移植说明的目标 os 为 ucosii 及
rt-thread。如果你的目标系统是其它 rtos,比如 FreeRTOS,只要这个 rtos 提供信号量、互斥锁操作机
制那就没什么问题,参照这个说明你照样可以轻松完成移植的相关工作。接下来的移植说明将针对这两
个实时操作系统展开。另外,移植说明使用的 IDE 为 Keil V5 MDK。
3.1 以太网应用场景下的移植
动手之前,你应该准备一个能够在你的目标板上正常进行任务调度的 rtos 基础工程(本说明以
rt-thread、ucosii 两个目标系统作为演示工程)。同时你的目标板最好能够提供 printf 输出调试信息的
功能。这项功能非常重要,对于排查移植过程中出现的各种问题很有帮助。目前市面上常见的单片机开
发板,比如正点原子的 stm32 系列都提供了该功能,所以接下来的移植工作假设你的板子支持 printf 函
数。当然,实在不提供也不会影响移植工作,只是会影响排查问题的效率。
3.1.1 将 onps 栈代码添加到工程
首先在你的 IDE 工程所在的目录下新建一个 onpstack 目录,然后在该目录下再建立一个 port 目录,
与协议栈移植相关的文件均放在该目录下。建立完毕后 IDE 工程目录的组织情况如下:
从 gitee 或 github 下载 onps 协议栈代码到本地,下载地址参见第 6 节。源码下载到本地后将 port
剩余87页未读,继续阅读
资源评论
积跬步、至千里
- 粉丝: 1w+
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功