LwIP移植心得
,总结下:
平台是LPC2136+ENC28J60,32K的RAM,软件是uCOS-II +LwIP 。
感觉主要解决两个问题:
操作系统仿真层的移植。这个基于uCOS-II的代码太多了。COPY下就行!
1,设备驱动的移植.
。作者已经给好了驱动的接口。
struct netif {
struct netif *next;
struct ip_addr ip_addr;
struct ip_addr netmask;
struct ip_addr gw;
err_t (* input)(struct pbuf *p, struct netif *inp);
err_t (* output)(struct netif *netif, struct pbuf *p,
struct ip_addr *ipaddr);
err_t (* linkoutput)(struct netif *netif, struct pbuf *p);
void *state;
#if LWIP_DHCP
struct dhcp *dhcp;
#endif
unsigned char hwaddr_len;
unsigned char hwaddr[NETIF_MAX_HWADDR_LEN];
u16_t mtu;
char name[2];
u8_t num;
u8_t flags;
};
主要就是:
err_t (* input)(struct pbuf *p, struct netif *inp);
这个是被驱动调用的,传递一个数据包给TCP/IP栈。
err_t (* output)(struct netif *netif, struct pbuf *p,struct ip_addr *ipaddr);
这个是被IP模块调用的,向以太网上发送一个数据包,函数要先通过IP地址获得解决硬件地址,然后发包。
err_t (* linkoutput)(struct netif *netif, struct pbuf *p);
这个是直接发送数据包的接口。
,这个文件相当于一个硬件抽象层。
static void low_level_init(struct netif *netif)
网卡初始化函数
static err_t low_level_output(struct netif *netif, struct pbuf *p)
链路层发送函数,实现err_t (* linkoutput)接口。
static struct pbuf *low_level_input(struct netif *netif)
得到一整帧数据
stat
LwIP移植心得 来自淘豆网www.taodocs.com转载请标明出处.