LWIP无OS移植成功,发文庆祝:)

[复制链接]
20584|30
 楼主| redriver 发表于 2008-2-28 21:08 | 显示全部楼层 |阅读模式
LWIP无OS移植成功,发文庆祝:)
一直想玩玩LWIP,网上的资料一般是加UCOS情形下,移植UCOS需要一些时间,
看了LWIP的文档,发觉也可以没有OS情形下直接跑,就试了下,没有使用内部
封装的套接字API,现在已经可以ping通。
 楼主| redriver 发表于 2008-2-29 21:39 | 显示全部楼层

先发一点移植的笔记

先发一点移植的笔记:

无OS情形下驱动层需要提供的函数如下:

(1)收到数据包的处理函数ethernetif_input(ethif层的输入函数),这个函数调用low_level_output函数,从网卡那里接收数据包,然后根据收到的数据包类型,分别调用ip_input函数和etharp_arp_input函数。这个函数跟ne2k_input函数类型,只是其中的netif->input调用被改ip_input函数。这个函数被作为函数netif_add的参数,或者独立,无论哪种情形,该函数都要被不停地调用;

(2)网卡发送数据函数low_level_output,这个函数在ethif层的初始化函数中被初始化到netif的link_output指针上。
(3)网卡接口数据函数low_level_input,这个函数被ethif层ethernetif_input函数调用,用于从网卡那里接收数据包。在实现这个函数时,需要查询网卡硬件,如果硬件收到数据包,那么从硬件那里将数据包拷贝进pbuf里,然后将该pbuf指针返回,将收到的数据包交给ethernetif_input处理;如果没有收到数据包,那么简单地返回NULL。
(4)ethif层的初始化函数ethernetif_init,这个作为netif_add函数的参数。同时这个函数调用网卡底层初始化函数low_level_init。
(5)ethif层的发送函数ethernetif_output,这个函数跟low_level_output的区别是,ethernetif_output带了一个额外的参数ip地址,一般这个函数都是调用etharp:etharp_output来实现。etharp_output根据ip地址从arp表中查询arp表,得到目标IP地址的MAC地址,然后填入到数据包中,然后调用netif->link_output函数将数据包最终发送出去。
(6)arp_timer函数,这个函数需要被定时地调用。这个函数调用etharp_tmr函数来更新arp表中的表项。
(7)网卡硬件初始化函数low_level_output,这个函数被ethernetif_init调用。
   在协议栈的主循环NetMainLoop中,不断调用ethernetif_input函数,来驱动协议栈。
hotpower 发表于 2008-2-28 23:26 | 显示全部楼层

沙发~~~

xwj 发表于 2008-2-29 00:03 | 显示全部楼层

TCPIP的话肯定是要跑多线程的,还是用OS方便些

当然,你可以用商业OS或自己DIY个OS,

但肯定不能做成只能建立一个连接的:-)
dld2 发表于 2008-2-29 08:08 | 显示全部楼层

支持

楼主高手。
加油站 发表于 2008-2-29 10:02 | 显示全部楼层

恭喜!

最好给大家讲讲移植过程
gyt 发表于 2008-2-29 15:01 | 显示全部楼层

行啊行啊

zhiwei 发表于 2008-2-29 20:20 | 显示全部楼层

移植过程+心得,呵呵。

huangqi412 发表于 2008-3-1 14:02 | 显示全部楼层

恭喜,

icer1 发表于 2010-3-4 15:00 | 显示全部楼层
avlee 发表于 2010-3-4 23:21 | 显示全部楼层
楼主厉害!
redbat_228 发表于 2010-3-5 09:26 | 显示全部楼层
恭喜楼主,
古道热肠 发表于 2010-3-5 12:39 | 显示全部楼层
简单应用只认一个连接也可以吧。
xiepengchenghn 发表于 2010-5-19 17:14 | 显示全部楼层
这个要Mark下,ST官网LwIP例程就是无OS情形下的,但是无OS和有OS情形下,有什么区别呢
ducha 发表于 2010-5-24 12:27 | 显示全部楼层
14# xiepengchenghn
  有OS 可以使用LWIP API
  无OS 需要直接使用UDP TCP的接口函数
ducha 发表于 2010-5-24 12:29 | 显示全部楼层
8# redriver

好贴 必须顶
xiepeilin 发表于 2010-5-24 13:01 | 显示全部楼层
顶一下!
xiepengchenghn 发表于 2010-5-26 14:59 | 显示全部楼层
15# ducha
但是LwIP官网手册上不是说两种方式都可以用吗?LwIP API与OS有关?OS中实现的不就是sys_arch.c中的几个函数吗?请指点,谢谢
twd3621576 发表于 2011-1-12 00:42 | 显示全部楼层
没源码
tyz114499 发表于 2011-1-16 22:08 | 显示全部楼层
不用OS也可以支持多个连接,只是需要直接操作底层函数,我们的一个产品就是裸奔的,能够同时支持8个TCP连接和2个UDP连接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

31

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部