LWIP應用開發 LWIP移植和裁剪

2021-10-25 22:36:55 字數 3617 閱讀 1124

1. lwip原始碼目錄結構

lwip原始碼目錄中包括doc、src、test資料夾和其他檔案,其中src資料夾是lwip的重點,裡面包含了lwip的原始碼

src原始碼資料夾如下示,由api、core、include、netif這4個資料夾組成

+

---src|+

---api //協議棧sequentialapi和socket api兩種介面函式的原始碼|+

---core //lwip核心原始碼|+

---include //lwip使用到的標頭檔案||

+---lwip||

+---netif

|| \--

-posix

| \--

-netif //與網路底層介面有關的檔案

2. lwip移植

將lwip原始碼新增到工程中,並新增或修改部分檔案

2.1 網絡卡驅動相關移植

此檔案是將lwip原始碼和乙太網驅動庫結合起來的橋梁

/********** lwip.h ***********/

extern eth_handletypedef heth;

/* lwip init function */

void

mx_lwip_init

(void);

#if !with_rtos

//如果不帶作業系統,則需要在lwip.c中實現以下函式

/* 來從乙太網緩衝區讀取接收到的資料報;傳送資料報到lwip堆疊進行處理 */

void

mx_lwip_process

(void);

#endif

/* with_rtos */

mx_lwip_init()函式實現原始碼在lwip網絡卡實現原理一文有詳細介紹

此檔案完成外設eth初始化

/********** ethernetif.h ***********/

//完成硬體(stm32->eth)相關的外設初始化

err_t ethernetif_init

(struct netif *netif)

;//完成乙太網底層資料接收任務

void

ethernetif_input

(void

const

* argument)

;//用於檢測網線狀態(link狀態)

void

ethernetif_set_link

(void

const

*argument)

;//當link狀態發生改變時,會呼叫下面的函式

void

ethernetif_update_config

(struct netif *netif)

;//當使用者需要監聽link狀態時,需要自己實現以下函式介面

void

ethernetif_notify_conn_changed

(struct netif *netif)

;//lwip核心的時間基準,以hal庫的systick的時基為準

u32_t sys_jiffies

(void);

u32_t sys_now

(void

);

以上部分函式實現原始碼在lwip網絡卡實現原理一文有詳細介紹

2.2 作業系統相關移植

如果需要使用作業系統,則要新增sys_arch.h和sys_arch.c檔案

該檔案定義了4中資料型別:訊號量、互斥訊號、訊息郵箱和執行緒id

//由於cmsis的不斷發展,已經出現多個版本,因此在移植的時候,就需要關注cmsis版本

//要確保在lwip中使用的作業系統的資料型別定義和cmsis保持一致

#if (oscmsis < 0x20000u)

#define sys_mbox_null (osmessageqid)0

#define sys_sem_null (ossemaphoreid)0

typedef ossemaphoreid sys_sem_t;

typedef ossemaphoreid sys_mutex_t;

typedef osmessageqid sys_mbox_t;

typedef osthreadid sys_thread_t;

#else

#define sys_mbox_null (osmessagequeueid_t)0

#define sys_sem_null (ossemaphoreid_t)0

typedef ossemaphoreid_t sys_sem_t;

typedef ossemaphoreid_t sys_mutex_t;

typedef osmessagequeueid_t sys_mbox_t;

typedef osthreadid_t sys_thread_t;

#endif

#ifdef __cplusplus

}#endif

該檔案定義了sys.h標頭檔案中宣告的關於訊號量、訊息郵箱和建立執行緒相關的操作函式

2.3 配置選項相關設定

由於使用了作業系統,因此需要在以下檔案中更改作業系統相關巨集定義

/* stm32cubemx specific parameters (not defined in opt.h) */

/* parameters set in stm32cubemx lwip configuration gui */

/* ----- with_rtos enabled (since freertos is set) ----- */

#define with_rtos 1

#if !defined no_sys || defined __doxygen__

#define no_sys 0

#endif

3. lwip裁剪

使用stm32cuebmx可以非常方便的對lwip進行裁剪和配置,根據需要使用的功能使能或者關閉相應的功能

如果不使用stm32cuebmx進行裁剪和配置,也可以在opt.h和lwipopts.h兩個標頭檔案中根據需要對相應功能的巨集定義進行使能或者失能

LWIP 移植檔案

要將乙太網驅動和lwip鏈結在一起還需要一些中間檔案,這些檔案很重要。這些中間檔案包括 cc.h cpu.h perf.h sys arch.c 和sys arch.h。stm32f4x7 eth bsp.c netconf.c 為硬體驅動配置檔案。stm32f4x7 eth.c 驅動庫傳輸層硬體配...

lwip雙網絡卡移植

我公司產品是雙網口,原來的程式是自己寫的tcp ip協議棧,因為只是簡單實現了arp和tcp udp的最簡單情況,所以有時候在公網上會遇到問題。後來在單網口的產品中移植了lwip,輕量級tcp ip協議棧,覺得一定程度上解決了問題,所以雙網絡卡的產品也要用lwip這個協議棧來實現。這個工作就落到了我...

lwip之ucosii移植報錯集錦

ucosii版本 2.91 lwip版本 1.3.2 keil版本 4.21.00 移植後發現如下報錯資訊 1.user lwip 1.3.2 lwip 1.3.2 src include lwip arch.h 85 warning 47 d incompatible redefinition o...