好久没有做过技术工作了,前几天因为一些需要,要在ST的OS20平台上进行了LWIP的移植,有一些心得,写出来供大家参考。
LWIP的背景我就不介绍了,相信能看到这篇文章的人都对其背景有过了解了。
LWIP的模块化还是很强的,所以移植起来没有想象的那么多困难,一个协议栈在某个平台上移植,其实主要来说包括两个大的部分接口,注意一下,我使用的是最新的LWIP1.4.0。
1.与系统相关的接口,比如多线程,信号量,互斥锁,系统时间等,当然,LWIP还有一种无操作系统模式,那这些接口就不用实现了。
2.与硬件相关的接口,实际上就是网卡驱动啦,当然,如果你的物理层不是网卡而是别的什么,那就需要的是另外那个硬件设备的驱动啦,比如Docsis设备之类的。
好了,开始移植吧。
首先是操作系统部分:
1.opt.h
首先看这个文件,这个文件里面包含了LWIP的模块选项,可以在这里选择哪些模块需要编译,那些模块不编译,分成几个部分,mem,arp,icmp,igmp,ppp,dhcp等,这里可以根据自己的需要修改编译选项,如果是带操作系统的,还要修改栈空间,优先级之类的选项。
2.cc.h
这个文件是没有的,你需要建立一个目录arch,然后在下面添加cc.h,这里里面主要是一些定义,包括数据类型,大小头端之类的,我的cc.h比较简单
/*数据类型宏定义*/
typedef unsigned char u8_t;
typedef unsigned short u16_t;
typedef unsigned int u32_t;
typedef char s8_t;
typedef short s16_t;
typedef int s32_t;
typedef int mem_ptr_t;
typedef semaphore_t sys_sem_t;
typedef mutex_t sys_mutex_t;
typedef message_queue_t sys_mbox_t;
typedef u8_t sys_thread_t;
#define BYTE_ORDER LITTLE_ENDIAN //大小头端选择
/*调试信息宏定义*/
</