當前位置:首頁 » 操作系統 » lwip源碼

lwip源碼

發布時間: 2023-03-17 13:33:10

1. 求解LWIP 1.4.0源碼里#define TCP_PCB_COMMON(type)

如此做只是將常用的代碼,以宏拆殲的形式定義出來,李御友這樣代碼簡潔,也便於修改,只是閱讀起來有點困難。
不同於封裝成函數,執行時沒哪槐有開銷;因為在預編譯階段編譯器就會幫你把宏替換成了c代碼。

2. 移植 LWIP到 51單片機 是出現了error C231: 'PACK_STRUCT_STRUCT': redefinition

編譯睜碧器不同,主要是頭文件中定義該結構體,然後多個文件引用該頭文件,造成重復慎早中定義,建議修改頭文件,添加編譯條寬山件

3. gethostbyname()的源碼

struct hostent* gethostbyname(const char *name)
{
err_t err;
ip_addr_t addr;
/* buffer variables for lwip_gethostbyname() */
HOSTENT_STORAGE struct hostent s_hostent;
HOSTENT_STORAGE char *s_aliases;
HOSTENT_STORAGE ip_addr_t s_hostent_addr;
HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2];
/* query host IP address */
err = netconn_gethostbyname(name, &addr);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG, (lwip_gethostbyname(%s) failed, err=%d , name, err));
h_errno = HOST_NOT_FOUND;
return NULL;
}

4. 有用STM32F107+lwip 做TCP客戶端的嗎

我用過stm32F107乙太網通訊,單片機作為叢昌旦客戶端與PC機迅好服務端通訊, 需要移植Lwip協議棧,Lwip協滲擾議棧提供了UDP、TCP、Socket 的API函數,使用時直接調用;建議你先看看此開發板自帶的常式源碼,裡面用了Lwip實現了telnet、http、ftp通訊。如果你沒有的話,我可以發給你。 至於你說的其他兩個,我沒用過,抱歉。你可以看看常式源碼里有沒有相關的使用例子。

5. STM32 WEB伺服器經常用到CGI SSI,可是為什麼這方面一個具體的應用教程都沒有

其實SSI跟asp差別蠻大的,ssi只能是在shtml文件載入的時候,其中的ss標簽被替換為其他內容,(何種標簽替換為何種內容 是用戶在LwIP協議中自定義的),而ASP、CGi是可以在html載入後動態調用的,他們才能實現完善的動態交互功能

至於如何入手,lwip的源碼裡面有詳盡的英文注釋,lz可以對著看看。

如果你想進行lwip 的CGI編程,建議你看看這么幾個文件:httpd.h httpd.c httpd_cgi_ssi.c

我剛好是先學習了普通的PC機上搭建 IIS 伺服器,學習html 、cgi、asp方面的知識,然後才接觸lwip,然後在別人搭建好的嵌入式伺服器上進行cgi編程,基本上手了。

硬體上的cgi編程更底層,而復雜,如果你難以入手,你可以在你的windows下搭建IIS伺服器,熟悉一下cgi,再轉stm32上實現

6. GPRS PPP協議中的IPCP協商問題

局端地址池提供的ip地址不夠用,這要與isp聯系

7. (急)IP協議源代碼(C++)中的轉發函數誰能幫忙解釋一下

PERF_START 轉發開始,初始化。

ip_forward() 轉發函數, 轉發一個數據包。

ip_route() 找通向目的地的路線。
(struct ip_addr *)&(iphdr->dest 目的地轉成ip_addr結構。如果 找到路線,送返 結構 netif,否則 送返 NULL。
if((ip_route ...NULL){} 如果送返 NULL,也就是沒找到路線,則做 {...}

找到路線, 但是 if(netif == inp) ,表示同一個數據包,已到達,不必轉發。

IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); 如果ttl == 0,為防止數據包不斷在 IP 互聯網路上永不終止地循環,減小 數據包 生存時間TTL 1,icmp..是否執行封包回顯應答。

IPH_CHKSUM_SET 更新 IP checksum 檢查,根據條件決定是否+1。

DEBUGF -- 查錯時輸出的信息

#ifdef IP_STATS ... #endif
如果定義了IP_STATS (IP 開始) 則...

PERF_STOP() 終止 轉發

8. 開源的Windows系統——ReactOS

ReactOS 是一個開發與Windows NT和Windows 2000應用程序和硬體驅動程序兼容的開源操作系統的項目。此項目當前雖然只是處於 內部測試(alpha) 開發狀態,但到2005年1月其中一些子項目已經完成了目標。

ReactOS主要是由C語言編寫。部分組件則由C++編寫,例如ReactOS 文件瀏覽器。

ReactOS的許可協議主要為GNU通用公共許可證,也有少量代碼以GNU寬通用公共許可證、BSD許可證之類的開源許可證發行。

為確保操作系統沒有任何一部分是看過泄漏出來的微軟 Windows 源碼的人所寫,或者逆向工程的過程達不到凈室設計標准,一個全盤的源碼審查由ReactOS主要開發者下令展開。此審查當前已經結束。

發展歷程

啟動開發

大約在1996年時,一群開源軟體開發者啟動了一個名為 FreeWin95 的項目,旨在實現一個Windows 95的克隆操作系統。這個項目當時只停留在關於系統實現的討論上。

雖然對於 FreeWin95 項目期待很高,但直到 1997 年末,項目還沒有公開發布任何版本,於是項目協調員Jason Filby 聯合大家重振該項目並起了一個新名稱 「ReactOS」 ,並計劃重新實現 Windows NT。1998年 2 月 ReactOS 項目正式啟動,開始開發系統內核和基本的驅動程序。

代碼審查

為了避免版權起訴,ReactOS 必須明確地完全區分並且不派生於 Windows,這是一個需要非常謹慎工作的目標。2006年1月17日,Hartmut Birr 在 ReactOS 開發者郵件列表中指出 ReactOS 包含有反編譯的 Windows 源碼。因此開發者暫時禁止非開發者進入系統。鑒於 ReactOS 是開放源碼軟體,此舉引起開放源碼社群的不滿。ReactOS 的貢獻者沒受當時的舉動影響。 不久後所有軟體開發工程都能自由進入了。由於 Birr 的指摘未能證實,開發者決定審查源碼。 可能「受污染」的源碼會被封鎖,直到那些源碼經審查後確定無問題。

大部分的源碼已解封,維護和開發都可繼續進行,而審查亦同時進行。

2008年,源碼已經全部解封。審查也已經全部結束。維護和開發得以正常繼續。

參與 Google Summer of Code

從 2006 年開始,ReactOS 項目參與了幾次 Google Summers of Code。例如,在GSoC 2011 中, ReactOS 指導了一個將 lwIP 集成到網路堆棧中的學生項目。迄今為止,ReactOS曾在 GSoC 參與過五次:2006年,2011年,2016 年,2017年 和 2018 年。2019 年也將參與。

公開演示

俄羅斯的政治人物 Viktor Alksnis 會見了項目協調員 Aleksey Bragin,Aleksey Bragin介紹了該項目並演示了該項目,演示中顯示 ReactOS 在 2007 年已經可以運行當時的 Total Commander 和 Mozilla Firefox。 它還吸引了時任俄羅斯總統梅德韋傑夫(Dmitry Medvedev)的關注。 梅德韋傑夫訪問了斯塔夫羅波爾地區的一所高中,巧合的是 ReactOS 開發者 Marat Karatov 正是該學校的高中生,他藉此機會向總統介紹了開源 Windows 系統,並請求總統資助 100 萬歐元。梅德韋傑夫稱對 ReactOS 很感興趣,表示會考驗資助事宜。

ReactOS 社區版

2014年4月,ReactOS 項目宣布推出 iegogo活動,推出基於 0.4版本的 ReactOS Community Edition。籌資活動的目標是50,000美元,除此之外還有額外的伸展目標。ReactOS Community Edition 的開發將以社區為中心,ReactOS用戶投票和資金決定項目旨在支持哪些軟體和硬體驅動程序。2014年 6 月 1 日,關於Indiegogo的靈活眾籌活動結束時籌集了25,141美元用於社區版的開發,並且不久後啟動了支持硬體和軟體的投票過程。

ReactOS Hackfest 2015

ReactOS 項目於2015年8月7日至12日在德國亞琛市舉辦了一場Hackfest。Hackfest 圓滿結束,因為它為 ReactOS 增加了許多功能。

系統開發

核心開發

ReactOS主要用C語言進行編寫,另外包含一些用 C ++ 編寫的元素,如 ReactOS Explorer 和聲音棧。該項目使用 MinGW 和 Visual Studio 進行編譯。 開發人員的目標是使內核和用戶模式API與Windows NT 5.2(Windows Server 2003)兼容,並增加對更多應用程序和硬體的支持,並計劃在開發日趨成熟時針對更新版本的Windows。DirectX支持是通過內部實施 ReactX進行的。2D硬體加速渲染是本機完成的,而其他繪圖功能則重定向到OpenGL作為權宜之計解決方案。 開發進度受開發團隊規模及其經驗水平的影響。作為對實施 Windows 7所需工作量的估計,微軟僱傭了大約1,000名開發人員,組成了25個團隊,每個團隊平均有40名開發人員。但截至2011年9月2日,在 Ohloh 的 ReactOS條目中,通過「非常大,活躍開發者只有 33 位,這些開發人員在 12 個月的時間內貢獻了累計,並且累積了104個以前通過 Subversion 從項目開始為代碼貢獻代碼的用戶。ReactOS 開發人員 Michele C.在米蘭舉辦的 Hackmeeting 2009 上的演講中指出,大多數開發人員在使用ReactOS時都了解 Windows體系結構,並且沒有任何先驗知識。 雖然ReactOS當前主要針對 x86 / AMD64 PC 平台,但是,移植到ARM 架構的努力「正在進行中」,雖然它沒有產生太多功能而被放棄了。支持的的Xbox,變體IA-32體系結構,是通過使用一個特定於體系結構的加入HAL,雖然這一點,與埠沿的PowerPC,不再積極維護。

硬體驅動程序堆棧

在硬體驅動程序方面,例如UniATA項目為ReactOS 提供串列ATA驅動程序。該項目還嘗試使用FullFAT庫重寫其FAT可 安裝文件系統。ReactOS利用 Haiku 的 USB 堆棧作為參考,並作為其 USB 支持的基礎。 網路 ReactOS的網路堆棧構建在 FreeBSD中 OSKit 網路堆棧埠的TCP部分,以及內部開發的面向數據包協議(如IP)的實現。後來,lwIP被集成到ReactOS的網路堆棧中。Samba / Samba TNG 項目已經提供了LSASS,SAM,NETLOGON 和列印假離線等 Windows 網路服務作為開源替代方案。

與 Wine 項目合作

ReactOS 和 Wine 項目共享本機運行二進制 Windows 軟體的目標,因此可以共享許多依賴項和開發。 ReactOS 使用 Wine 項目的一部分,以便它可以從 Wine 在實現 Win32 API方面的進展中受益。雖然由於體系結構的不同,Wine 的 NTDLL,USER32,KERNEL32,GDI32和 ADVAPI32 組件不能由 ReactOS 直接使用,但代碼片段和其他部分可以在兩個項目之間共享。不過內核由 ReactOS 單獨開發,因為 Wine 依賴於現有的類 Unix 內核。。

此外,ReactOS另外有一支實驗性的Arwinss團隊,透過另一種方式去構建Win32 API,使USER32及GDI32的支持可以做得更好。ReactOS原來的Win32子系統完全以Windows的等同為藍本,但Arwinss則透過合並原來ReactOS的Win32子系統及Wine的Win32子系統的架構,以好好利用Wine的系統兼容性。這樣,Arwinss就可以讓用戶透過一個遙距的X server作顯示,而無需硬性規定必須要用硬體上的顯示屏。

影響與評價

下面一些關於 ReactOS 項目的批評提出幾條為什麼他們不相信 ReactOS 會成為一個有價值的項目的原因。其中,有人指出把與 Windows NT 4.0 兼容作為 ReactOS 的發布目標是一個局限,因為 NT 4.0 評價不佳而且它已經過時了。

作為回復,有人提出雖然當前是把與 Windows NT 4.0 兼容作為目標,但是,Windows 後來基於 NT 架構的系統都與 NT 4.0 在系統層次上高度相似(例如:Windows 2000, Windows XP, Windows Server 2003)。因此,想要與後續的 Windows 版本兼容,只要 NT 4.0 的目標完成,剩下都簡單了。 以此為由,該批評的回復者說把 NT 4.0 的兼容作為里程碑並不是一個局限,而是未來開發的基礎。

其它人則批評認為我們已經有好幾個基於 Unix(Linux 及不同版本的 BSD)的操作系統, 與其再創建一個新的, 不如集中精力改善舊的,努力做好 WINE,讓現有的 WINDOWS 應用程序在其上運行得更好。但是,ReactOS 開發者及其他擁護者辯解說,UNIX 類操作系統不一定是唯一的最好的操作系統類型。NT 的設計含有很多概念是 Unix 工作方式的改進,而且一個在更低層次更似 Windows 的操作系統(即是設計成與 Windows 相似,而非執行某某應用程序,嘗試把另一個操作系統變成 Windows)將更有機會成功達到更廣闊地兼容現有的 Windows 應用程序和(特別是)硬體驅動程序。

未來目標

硬體需求

值得留意的是,ReactOS亦可在能模擬上述硬體的軟體內運作,比如Virtual PC、VMware、Bochs或QEMU。

眼見Windows NT 4.0可在i386以外的MIPS、Alpha AXP和PowerPC架構運行,而NT派生的操作系統如Windows XP和Windows Server 2003又已被移植到不同的硬體架構上(例如x86-64、IA-32及IA-64),ReactOS開發者亦開始注意可移植性。譬如對IA-32架構變種Xbox平台的支持,已加入0.2.5發布版,而直到2006年上半年,PowerPC port和Xen port的工程仍在努力。

9. 哪個前輩使用過STM32+UIP/LWIP+DM9000的,進來一解小弟疑惑!感激涕零!

你的側重點應該在LWIP在STM32上的移植、和STM32上的DM9000驅動這上面。

10. 如何查看lwip源碼的當前版本

在Linux內核的頂層Makefile中,扒昌頂端就蠢蔽有,格式為 VERSION = 3 PATCHLEVEL = 0 SUBLEVEL = 8 EXTRAVERSION = NAME = Sneaky Weasel 以上的版春檔扒本號就是3.08

熱點內容
左端演算法 發布:2025-08-24 21:53:26 瀏覽:525
安卓系統怎麼編譯環境 發布:2025-08-24 21:53:24 瀏覽:778
java轉義符 發布:2025-08-24 21:48:26 瀏覽:64
powershell腳本識別 發布:2025-08-24 21:42:30 瀏覽:966
壓縮機企業 發布:2025-08-24 21:35:14 瀏覽:923
三星證書存儲 發布:2025-08-24 21:29:27 瀏覽:909
古詩文源碼 發布:2025-08-24 21:20:15 瀏覽:399
androidxml字元 發布:2025-08-24 20:47:31 瀏覽:51
php頁面跳轉參數 發布:2025-08-24 20:46:25 瀏覽:827
java的常用設計模式 發布:2025-08-24 20:36:52 瀏覽:310