打印

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

[复制链接]
19217|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
redriver|  楼主 | 2008-2-28 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LWIP无OS移植成功,发文庆祝:)
一直想玩玩LWIP,网上的资料一般是加UCOS情形下,移植UCOS需要一些时间,
看了LWIP的文档,发觉也可以没有OS情形下直接跑,就试了下,没有使用内部
封装的套接字API,现在已经可以ping通。

相关帖子

来自 2楼
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,

但肯定不能做成只能建立一个连接的:-)

使用特权

评论回复
5
dld2| | 2008-2-29 08:08 | 只看该作者

支持

楼主高手。

使用特权

评论回复
6
加油站| | 2008-2-29 10:02 | 只看该作者

恭喜!

最好给大家讲讲移植过程

使用特权

评论回复
7
gyt| | 2008-2-29 15:01 | 只看该作者

行啊行啊

使用特权

评论回复
8
zhiwei| | 2008-2-29 20:20 | 只看该作者

移植过程+心得,呵呵。

使用特权

评论回复
9
huangqi412| | 2008-3-1 14:02 | 只看该作者

恭喜,

使用特权

评论回复
10
icer1| | 2010-3-4 15:00 | 只看该作者
不错

使用特权

评论回复
11
avlee| | 2010-3-4 23:21 | 只看该作者
楼主厉害!

使用特权

评论回复
12
redbat_228| | 2010-3-5 09:26 | 只看该作者
恭喜楼主,

使用特权

评论回复
13
古道热肠| | 2010-3-5 12:39 | 只看该作者
简单应用只认一个连接也可以吧。

使用特权

评论回复
14
xiepengchenghn| | 2010-5-19 17:14 | 只看该作者
这个要Mark下,ST官网LwIP例程就是无OS情形下的,但是无OS和有OS情形下,有什么区别呢

使用特权

评论回复
15
ducha| | 2010-5-24 12:27 | 只看该作者
14# xiepengchenghn
  有OS 可以使用LWIP API
  无OS 需要直接使用UDP TCP的接口函数

使用特权

评论回复
16
ducha| | 2010-5-24 12:29 | 只看该作者
8# redriver

好贴 必须顶

使用特权

评论回复
17
xiepeilin| | 2010-5-24 13:01 | 只看该作者
顶一下!

使用特权

评论回复
18
xiepengchenghn| | 2010-5-26 14:59 | 只看该作者
15# ducha
但是LwIP官网手册上不是说两种方式都可以用吗?LwIP API与OS有关?OS中实现的不就是sys_arch.c中的几个函数吗?请指点,谢谢

使用特权

评论回复
19
twd3621576| | 2011-1-12 00:42 | 只看该作者
没源码

使用特权

评论回复
20
tyz114499| | 2011-1-16 22:08 | 只看该作者
不用OS也可以支持多个连接,只是需要直接操作底层函数,我们的一个产品就是裸奔的,能够同时支持8个TCP连接和2个UDP连接

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

31

帖子

0

粉丝