lwip 1.4.1到lwip2.1.2升級(jí)之路

V1.4.1與V2.1.2的文件對(duì)比

根目錄

從解壓后的文件結(jié)構(gòu)可以看出,結(jié)構(gòu)上沒有改動(dòng),因?yàn)橛昧薵it,所以增加了兩個(gè)相關(guān)的文件,并添加了另外兩個(gè)文件。

doc文件夾

主要增加的doxygen這個(gè)文件夾,對(duì)查看文檔非常有幫助。其它的看看就行了。

src文件夾

V2.1.2相對(duì)V1.4.1增加了很多的上層應(yīng)用,這些應(yīng)用都放在apps這個(gè)文件夾里了。

api文件夾

這里只多了一個(gè)''if_api.c''的一個(gè)文件,跟socket有關(guān);

core文件夾

snmp文件夾移到apps里邊去了,timers.c改成了timeouts.c,增加了其它的幾個(gè)文件。

include文件夾

posix文件夾移到compat去了,ipv4和ipv6里的文件移到lwip了

netif文件夾

只是新增了文件。

test文件夾

增加了很多測(cè)試?yán)?,根?jù)需要看看就好,不影響升級(jí)。

升級(jí)步驟

升級(jí)有一個(gè)前提,必須保證除移植以外的文件都是官方的,沒有被修改過。因?yàn)?,升?jí)需要替換掉這些文件,如果修改過,那就有得扯了。這里用NUC472_NUC442_BSP_CMSIS_V3.03.000中的FreeRTOS_lwIP_TCP_EchoServer為例進(jìn)行說明,開發(fā)工具為Keil MDK。

  • 1、打開 MDK 工程, 刪除工程中的lwip V1.4.1 的源文件(除了移植相關(guān)的!!), 然后將 V2.1.2 的源文件直接添加到工程,并調(diào)整相關(guān)的頭文件包含路徑;

  • 2、V1.4.1中的ppp_oe.h在V2.1.2中改名為pppoe.h,原工程中包含的頭文件作相應(yīng)的修改;V1.4.1中,原本要在cc.h定義的數(shù)據(jù)類型,在新版本中已經(jīng)在arch.h定義。如果你的編譯器無法提供stdint.h的話才需要像之前版本一樣要在cc.h定義。在本例中就不需要定義,所以刪除cc.h中的下面定義

    typedef uint8_t   u8_t;
    typedef int8_t    s8_t;
    typedef uint16_t  u16_t;
    typedef int16_t   s16_t;
    typedef uint32_t  u32_t;
    typedef int32_t   s32_t;
    typedef u32_t     mem_ptr_t;
    
  • 3、V1.4.1中的struct ip_addr在新版中改為ip_addr_t,此處要作相應(yīng)修改;

  • 4、下載contrib-2.1.0,并用下圖中的文件替換原工程中的相應(yīng)文件
  • 5、編譯一下,出現(xiàn)不少錯(cuò)誤:

    錯(cuò)誤提示 解決方法
    error: #136: struct "pbuf" has no field "ts_nsec" 出現(xiàn)這個(gè)是因?yàn)楸纠痰囊浦仓性?code>struct pbuf中增加了 TIME_STAMPING相關(guān)的定義。這里涉及到了官方的源碼改動(dòng),暫時(shí)先不管,屏蔽該宏的定義。所以開頭就說前提是保證官方源碼沒有改動(dòng),不然就麻煩了??!
    error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function type 這個(gè)是因?yàn)?code>LWIP_RAND在V1.4.1中是常量宏,定義在lwipopts.h中,而到了V2.1.2,它是宏函數(shù)的形式LWIP_RAND(),定義在cc.h中,所以出現(xiàn)這么個(gè)提示。本例在sys_arch.c中定義了_LWIP_RAND(),使用系統(tǒng)的tick計(jì)數(shù)作為隨機(jī)數(shù),因此在cc.h中定義#define LWIP_RAND() _LWIP_RAND() 即可。沒有的話可以使用標(biāo)準(zhǔn)庫的rand()。
    Error: L6218E: Undefined symbol errno (referred from if_api.o). ethernetif.c中定義int errno;,全局搜索都沒找到int errno;的定義,只好自己定義了。
    Error: L6218E: Undefined symbol sys_mbox_trypost_fromisr (referred from tcpip.o). 新版的sys.h中增加了err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg);,將中斷和非中斷分開了,以前是一起的。本例中的sys_mbox_trypost同時(shí)支持了兩種方式,所以拷貝一份,將函數(shù)名改成這個(gè)就可以了。
    Error: L6218E: Undefined symbol sio_open (referred from slipif.o). slipif.c從工程中刪除即可,這個(gè)沒用上。
    Error: L6218E: Undefined symbol sio_read (referred from slipif.o). 同上
    Error: L6218E: Undefined symbol sio_send (referred from slipif.o). 同上
    Error: L6218E: Undefined symbol sio_tryread (referred from slipif.o). 同上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評(píng)論 0 38
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,126評(píng)論 0 3
  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,993評(píng)論 0 2
  • 8.1 shell介紹8.2 命令歷史8.3 命令補(bǔ)全和別名8.4 通配符8.5 輸入輸出重定向 linux sh...
    awsome365閱讀 529評(píng)論 0 0
  • 從能力到容貌,女人還是要努力讓自己出色些! 你是什么樣的人,你就會(huì)遇到什么樣的人,也會(huì)擁有什么樣的...
    溫馨霏玲閱讀 281評(píng)論 0 1

友情鏈接更多精彩內(nèi)容