UIP 0 9 移 植 心 得

2021-06-10 11:36:46 字數 2361 閱讀 7676

自從網上發帖慶賀成功移植以來,隔三差五的就有人來問我,關於uip0.9移植的問題。其實很早就寫了這篇文章,只是一直沒有貼出來。這段時間老是有人問,我才想起來,把它翻出來貼上。希望對路過的各位有所幫助。另外,想說一點,我這裡沒有去講底層的函式到底是什麼樣的,因為每個phy都不一樣,得根據實際情況編寫相應的**。也不是說全部都自己寫,在網上找找相應的phy的驅動,根據自己的硬體改改就ok了。

我移植的uip目前沒有加作業系統,等有時間了把lwip加到作業系統(uc/os-ii)中去。目前,已經把uc/os-ii調通了。準備馬上開始移植lwip。

本來很想寫乙份移植心得,可是一直沒有時間。今天有個朋友問我,決定寫乙個說明。我當時也是多方尋求資料,可是很多資料都沒有講的很清楚(也許是我比較笨^_^)。

相信你手上已經有了uip的源**,以下說明已uip0.9為準。

1,uip和lwip的區別

uip主要是針對沒有作業系統的8、16位的cpu,當然在32位上也可以執行。它也可以執行在有作業系統的cpu上。只是效率可能底一些。因為它沒有使用訊號量或訊息等等,而是採用輪詢的方式,來處理資料的傳送和接受。

lwip和uip出自同乙個地方,只是lwip主要針對有作業系統的應用。(沒有研究過源**,不敢過多發表言論)。

2,檔案關係

弄清楚源**之間的聯絡和各個主要函式的功能,移植就不困難了。

uip   à  這是uip的核心**。

unix  à  這是作者在unix系統下的乙個工程。

doc   à  這是說明文件。

重點說說uip和unix這兩個資料夾中比較重要的函式。

uip:

uip.c :       

uip_process( )  完成對ip,udp,tcp的資料的解析。

uip_udp_new() 建立乙個udp。

uip_listen()    監聽乙個埠。

uip_connect()  準備建立乙個tcp連線,傳送同步訊號。

uip_arp.c             

uip_arp_update()更新arp列表。

uip_arp_init()   初始化arp緩衝塊

uip_arp_out()   傳送乙個arp請求

uip_arp_arpin()  處理收到乙個arp包

uip_arp_ipin()   處理收到是arp包的ip包。

slipdev.c        是關於slip 協議的檔案

unix:

main.c              uip服務的主迴圈。

tapdev.c 和 tapdev.h  是低層資料的接收與傳送。

uip_arch.c                   一些計算校驗和的函式。

uipopt.h                這是乙個uip的配置檔案。你可以修改ip,netmask,gateway,mac等等以便符合你的網路。

3,移植細節

在你的工程中,你需要包含如下檔案:

uip.c

uip_arch.c

uip_arp.c

tapdev.c

main.c

a, 網絡卡驅動移植

tapdev.c 包含3個函式:

a>  tapdev_init(void)                   網絡卡初始化.

b>  unsigned int  tapdev_read(void)  接收網絡卡資料

c> void tapdev_send(void)           傳送網絡卡資料

這3個函式與低層硬體有關.大家只需按照上述函式的介面,完成低層資料的收發便可.

b, udp的移植

a>    uipopt.h 中修改     

#define uip_udp                       1

#define uip_udp_conns    10(同時可建立udp的連線數)

新增 #include

b>    新建udp.c 和udp.h 兩個檔案

udp.c中定義兩個函式

udpinit(void)

}if(uip_newdata())}}

趕緊試試吧!體驗一把移植成功的快樂!

c,tcp的移植

如果你已經弄清楚了udp的移植,tcp的移植則易如反掌了。

你可以參看一下doc資料夾下的uip-refman.pdf中的1.7 example 這一小節(第13頁)。上面已經說的很清楚,我不想在這裡多說。雖然是英文的,但是比較淺顯。另外,你也可以找到 張偉林 翻譯的中文版本,我這裡也有.

另外, 的這篇文章大家也可以看看。

d,其他的協議都有範例,大家研習**便可。

急急忙忙趕出來的移植心得,很粗糙。但希望對大家有用。如果有什麼錯誤,望大家批評指正.

uip 學習筆記(移植篇)

uip 1 初始化uip協議棧 uip init 2 處理輸入包 uip input 3 處理週期計時事件 uip periodic 4 開始監聽埠 uip listen 5 連線到遠端主機 uip connect 6 接收到連線請求 uip connected 7 主動關閉連線 uip close...

opencv移植dsp心得

對於單片的處理系統,程式的編譯有不少不同,不可以用windows下對程式組織來考慮dsp的程式組織。作移植的話,一定要對dsp下程式的編譯和執行有了解。比如,ccs中,子程式宣告後就會分配空間,傳結構會預設傳結構的位址 這樣,直接編譯opencv,要想編譯通過並不困難,但用 器除錯的時候,基本上op...

移植U BOOT到揚創2440心得

test u boot.bin實現從伺服器現在bin到指定記憶體中,再使用go 0x32000000命令執行test u boot,注意go方式除錯u boot時不能重複初始化cpu sdram等,將start.s中的cpu init crit注釋掉。在實際除錯過程中可是在第一階段採用點燈法測試,對...