首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

lwIP+ucos2移植于S3C2440过程(2)

lwIP+ucos2移植于S3C2440过程(2)

**************************************   
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) ;     
#if LWIP_DHCP   
struct dhcp *dhcp;   
#endif     
/** number of bytes used in hwaddr */   
  unsigned char hwaddr_len;   
  /** link level hardware address of this interface */   
  unsigned char hwaddr[NETIF_MAX_HWADDR_LEN];   
  /** maximum transfer unit (in bytes) */   
  U16 mtu;   
  /** flags (see NETIF_FLAG_ above) */   
  U8 flags;   
  /** link type */   
  U8 link_type;   
  /** descriptive abbreviation */   
  char name[2];   
  /** number of this interface */   
  U8 num;   
};   
//alt_lwip_dev结构体描述了符合LWIP规范的网络端口设备   
struct alt_lwip_dev   
{   
  /* The netif pointer MUST be the first element in the structure */   
  struct netif*     netif;     
  const char*      name;   
  err_t (*init_routine)(struct netif*);      //初始化函数   
  void (*rx_routine)();                              //数据接收函数   
};   
//alt_lwip_dev_list:设备链表   
typedef struct     
{   
  alt_llist     llist;     /* for internal use */   
  alt_lwip_dev  dev;   
}alt_lwip_dev_list;   
typedef struct alt_llist_s alt_llist;   
struct alt_llist_s {   
  alt_llist* next;     /* Pointer to the next element in the list. */   
  alt_llist* previous; /* Pointer to the previous element in the list. */   
};     
//在LWIP定义的这些结构体类型的基础上,DE2_WEB_SERVER定义了针对DM9000网络接口的一个结构体   
typedef struct   
{   
alt_lwip_dev_list   lwip_dev_list;   //与之关联的设备链表   
int base_addr;                                   //寄存器的基地址   
int irq;                                                  //中断编号   
u_char hwaddr[6];                            //MAC地址   
int index_offset;                 
int data_offset;   
int dm9k_tx_space;   
int dm9k_linked;   
sys_sem_t arp_semaphore;   
sys_sem_t tx_semaphore;   
} alt_avalon_dm9k_if;   
先让驱动起来,移植s3c2440加到其它程序一起.   
焦海波那个有可能考虑.因为那一些写的比较完整,但总是低估了它的难度.   
果然,焦已经形成文档了   
下载下来看看,或许有解的机会.   
移植被LwIP到一个新的目标系统时,只需要修改这个接口艰险可,那个接口? sys_arch   
操作系统模拟层(sys_arch) 它在底层操作系统和LwIP之间提供了一个接口?   
sys_arch需要为LwIP提供信号量(sem)和邮箱(mailboxes)   
信号量是可以计数信号量,也可以二值信号量,---LwIP都可以正常工作,   
邮箱用于消息传递.   
int sys_init()   
sys_sem_t sys_sem_new() ;     
sys_sem_freem() ;     
sys_sem_signal()     
sys_arch_sem_wait() ;     
sys_mbox_t sys_mbox_new() ;     
sys_mbox_free(sys_mbox_t mbox) ;     
void sys_mbox_post(sys_mbox_t mbox,void *msg)     
u32_t sys_arch_mbox_fetch(sys_mbox_t mbox,void **msg,u32_t timeout)     
struct sys_timeouts *sys_arch_timeouts(void)     
如果底层操作系统支持多线程并且LwIP中需要这样的功能,则一定要实现这个函数.   
sys_thread_t sys_thread_new(void(*thread)(void*arg),void *arg,int prio) ;     
sys_prot_t sys_arch_protect(void)     
void sys_arch_unprotect(sys_prot_t pval) ;     
以上是Lwip与操作系统关系.   
----------------------------------------------------------------------------   
OS支持的模拟层需要添加的头文件:   
cc.h   与硬件平台以及编译器相关的环境变量及数据类型声明文件.或者一些移到sys_arch.h中.   
    与编译器相关的LwIP结构体   
    PACK_STRUCT_FILED(x)   
    PACK_STRUCT_STRUCT   
    PACK_STRUCT_BEGIN   
    PACK_STRUCT_END   
与平台相关   
    LWIP_PLATFORM_DIAG(X)   
memset()  如果编译器不提供,这个文件一定要包含它的定义,即memset()   
<errno.h>   
perf.h   
sys_arch.h sys_arch.c的头文件   
    整个移植所依赖的操作系统平台.   
OK 文件夹和文件指定的路建立后,   
先去定数据类型定义.   
cc.h:   
typedef unsigned char u8_t     
typedef signed char s8_t     
typedef unsigned short u16_t ;     
.......
继承事业,薪火相传
返回列表