自從網上發帖慶賀成功移植以來,隔三差五的就有人來問我,關於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注釋掉。在實際除錯過程中可是在第一階段採用點燈法測試,對...