LWIP 移植檔案

2021-07-24 23:28:04 字數 3664 閱讀 6629

要將乙太網驅動和lwip鏈結在一起還需要一些中間檔案,這些檔案很重要。這些中間檔案包括:

cc.h

、cpu.h

、perf.h

、sys_arch.c

和sys_arch.h。

stm32f4x7_eth_bsp.c   netconf.c   為硬體驅動配置檔案。

stm32f4x7_eth.c  驅動庫傳輸層硬體配置檔案。

st官網資料是相當可以利用的,

按照所示步驟,一步一步便找找到了自己所要的開發包了。

lwip移植工作(一

)cc.h

與cpu

和編譯器的相關介面

lwip的移植主要是三個介面部分:

1、與cpu或編譯器相關介面(

include

中cc.h

檔案)

2、與作業系統

的介面;

3、與底層網絡卡驅動的介面。

一、與cpu或編譯器相關介面

與cpu或編譯器相關介面(

include

中cc.h

檔案),

主要包括資料長度,字的高低位順序,編譯器對

c語言

中struct結構位元組對齊問題(

c語言中

struct

結構是四位元組對對齊的,但

lwip

中是根據

struct

結構中不同資料的長度來讀取資料的)

lwip移植工作 

sys_arch.h sys_arch.c

與作業系統的介面

與作業系統的介面,主要分為四個部分 1、

sys_sem_t

訊號量: 在

sys_arch

中應實現如下

sys_sem_t

結構體和處理函式

struct sys_sem_t

sys_sem_new()            //建立乙個訊號量結構

sys_sem_free()            //釋放乙個訊號量結構

sys_sem_signal()           //傳送訊號量

sys_arch_sem_wait()     //請求訊號量 2、

sys_mbox_t

訊息:lwip

使用訊息佇列來緩衝、傳遞資料報文,在

sys_arch

中應實現如下

sys_sem_t

結構體和處理函式

struct sys_mbox_t

sys_mbox_new()   //建立乙個訊息佇列

sys_mbox_free()    //釋放乙個訊息佇列

sys_mbox_post()   //向訊息佇列傳送訊息

sys_arch_fetch()    //從訊息佇列中獲取訊息

3、 sys_arch_timeout()

函式:lwip

中每個與外界網路連線的執行緒都有自己的

timeout

屬性,即等待超時時間。這個屬性表現為:每個執行緒都對應乙個

sys_timeout

結 構體佇列,包括這個執行緒的

timeout

時間長度,以及超時後應呼叫的

timeout

函式,該函式會釋放連線和**資源的工作。如果乙個執行緒對應的

sys_timeout

為空(null

),說明該執行緒對連線做永久的等待。

timeout結構體已經由

lwip

在sys.h

中定義好了,而 且對結構體佇列的資料操作也由

lwip

負責,我們所要實現的是如下函式:

struct sys_timeouts* sys_arch_timouts(void)

,這個函式的功能是返回目前正處於執行態的執行緒所對應的

timeout

佇列指標。

timeout

佇列屬於線 程的屬性,因此是與

os相關的函式,只用由使用者實現。

sys_thread_new建立新執行緒函式:

lwip

可以是單執行緒執行,即只有乙個

tcpip

執行緒(tcpip_thread)

,負責處理所有的

tcp/udp

連線,各種網路程式都通過

tcpip

執行緒與網路互動。但

lwip

也可以多執行緒執行,以提高效率,降低程式設計複雜度。這時需要使用者實現建立新執行緒的函式:

void sys_thread_new(void(*thread)(void* arg),void* arg);

lwip移植工作 

ethernet.c

網絡卡驅動程式

網絡卡驅動程式

lwip的網路驅動有一定的模型,

/src/netif/ethernetif.c

檔案即為驅動的模版,使用者為自己的網路裝置實現驅動時應參照此模組。在

lwip

中可以有多個網路介面,每個網路介面都對應了乙個

struct netif

。這個netif

包含了相應網路介面的屬性、收發函式。

lwip

通過呼叫

netif

的方法netif->input()

及 netif->output()

進行乙太網

packet

的收發等操作。在驅動中主要做的就是,實現網路介面的收發、初始化以及中斷處理函式。驅動程式工作在

ip協議模型的網路介面層,它提供給上層(

ip層)的介面函式如下:

void ethernetif_init(struct netif* netif)   //網絡卡初始化函式

void ethernetif_input(struct netif*netif)       //網絡卡接收函式,從網路介面接收乙太網資料報,並把其中的

ip報文向

ip層傳送,在中斷

//方式下向網絡卡

isr呼叫

ett_t ethernetif_output(struct netif* netif,struct pbuf*p,struct ip_addr* ipaddr)       //網絡卡傳送函式,給

ip層傳過來的

ip報文加上乙太網

//包頭,並通過網路介面傳送

void ethernetif_isr(void) //網絡卡中斷處理函式

isr

LWIP應用開發 LWIP移植和裁剪

1.lwip原始碼目錄結構 lwip原始碼目錄中包括doc src test資料夾和其他檔案,其中src資料夾是lwip的重點,裡面包含了lwip的原始碼 src原始碼資料夾如下示,由api core include netif這4個資料夾組成 src api 協議棧sequentialapi和so...

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...