




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1 第 67 頁 共 68 頁本科畢業(yè)設計說明書(論文) 目次1 緒論21.1 課題研究背景及意義21.2 嵌入式系統(tǒng)的現(xiàn)狀和發(fā)展趨勢21.3 嵌入式網(wǎng)絡的關鍵問題41.4 本論文的主要工作42 ARM嵌入式系統(tǒng)62.1 系統(tǒng)開發(fā)環(huán)境62.2 ARM嵌入式硬件平臺72.3 搭建ARM嵌入式開發(fā)環(huán)境92.4 PC機Linux開發(fā)環(huán)境的建立232.5 本章小結233 ARM嵌入式以太網(wǎng)通信的開發(fā)253.1 OSI網(wǎng)絡模型253.2 TCP/IP協(xié)議棧的基本概念253.3 TCP協(xié)議基本概念263.4 UDP協(xié)議293.5 本章小結314 ARM嵌入式的以太網(wǎng)通信程序設計324.1 TCP通信程序設
2、計324.2 TCP網(wǎng)絡程序設計流程344.3 TCP服務器/客戶端網(wǎng)絡程序的實現(xiàn)434.4 UDP通信程序設計484.5 UDP服務器/客戶端網(wǎng)絡程序的實現(xiàn)534.6 本章小結56結論57致謝58參考文獻59附錄 160附錄 263附錄 3661 緒論隨著信息技術的迅猛發(fā)展,在我們的生活工作中,對于網(wǎng)絡通信的要求逐年增高,且隨著移動互聯(lián)網(wǎng)絡的發(fā)展與需求,嵌入式系統(tǒng)與通信網(wǎng)絡,日日夜夜伴隨著我們。嵌入式系統(tǒng)與網(wǎng)絡技術融合已經(jīng)是必然的發(fā)展趨勢,當嵌入式設備具有網(wǎng)絡功能時,人們可以在任何地方、任何時間、任何平臺隨時瀏覽設備的信息,并進行操作和測試。這是在嵌入式系統(tǒng)在其網(wǎng)絡性和開放性的發(fā)展趨勢。1.
3、1 課題研究背景及意義如今,我們的生活與工作中已經(jīng)無法離開網(wǎng)絡。人們進行信息的傳送和交流,之所可以實時且效地,恰是因為有“信息高速公路”,而“信息高速公路”的重要支撐網(wǎng)就是以太網(wǎng)1?!耙蕴?Ether)”這個詞,是來源自十九世紀的物理學家們假設出的某種媒介,用以傳播電磁波的輻射。在下,他們認為“以太”充斥于世界各處,因此,到后來將“以太”這個假說引入到計算機局域網(wǎng)中,從而用來表現(xiàn)它在通信領域也是無處不在,就像“以太”充斥于世界中那樣普遍存在。以太網(wǎng)可以方便的接入網(wǎng)絡,以太網(wǎng)使用的通信協(xié)議也因為適用性,有著十分優(yōu)異的兼容性。當前,在嵌入式系統(tǒng)接入因特網(wǎng)的所有技術中,被使用最多的局域網(wǎng)通信技術即是
4、以太網(wǎng)通信。通過以太網(wǎng)可以十分方便地搭建局域網(wǎng),因而能與因特網(wǎng)鏈接。嵌入式系統(tǒng)的開發(fā)與設計有了前所未有的空間與機遇,對于嵌入式系統(tǒng)的發(fā)展應用,任何時候都有機會跨入嵌入式以太網(wǎng)時代,這些都是需要兩者技術上的完美融合。只要完成了嵌入式系統(tǒng)與以太網(wǎng)的鏈接,使嵌入式系統(tǒng)發(fā)展成為以太網(wǎng)中單獨的一個節(jié)點,用戶在節(jié)點可以通過網(wǎng)絡,便捷且低代價地進行數(shù)據(jù)傳輸。所以為了實現(xiàn)整個系統(tǒng)的數(shù)據(jù)的傳輸功能,而在嵌入式系統(tǒng)與以太網(wǎng)鏈接的方法上做相應的研究,是具有十分重要的經(jīng)濟價值和現(xiàn)實意義的。在這種背景下,本文對基于ARM的以太網(wǎng)通信的這一問題,進行研究與應用,具有充分的實際意義。1.2 嵌入式系統(tǒng)的現(xiàn)狀和發(fā)展趨勢幾乎電
5、子設備所有新的生機都與嵌入式系統(tǒng)的發(fā)展關系緊密,在電子通信、醫(yī)療衛(wèi)生、輕工業(yè)產品、監(jiān)控安防、消費類電子、工業(yè)自動化系統(tǒng)等行業(yè)都有重要的嵌入式相關產品。 尤其是在消費電子相關產業(yè),占有最高的嵌入式系統(tǒng)的產品的市場比重,監(jiān)控安防、電子通信、醫(yī)療衛(wèi)生以及其他領域緊隨其后。近十幾年來,嵌入式系統(tǒng)得到了根本性的發(fā)展。微處理器、微控制器大量在產品中使用,CPU 也從當初8 位的單片機發(fā)展到現(xiàn)在的16位、32位甚至64 位的高端微處理器;從僅具備單一內核發(fā)展到提供豐富外設及接口功能;從幾兆的頻率發(fā)展到現(xiàn)在幾百兆甚至12G 的處理速度。伴隨著CPU性能的不斷攀升,嵌人式系統(tǒng)也具備了文件系統(tǒng)、網(wǎng)絡系統(tǒng)、圖形界面
6、系統(tǒng)等功能,并形成了以嵌入式操作系統(tǒng)為核心的嵌入式軟件體系。跟隨應用程度的不斷加深擴大的嵌入式系統(tǒng),全新領域應用以及商品化的需求在嵌入式系統(tǒng)軟硬件上面表現(xiàn)出了更高的需求。嵌入式系統(tǒng)不僅僅具有微小性、低功耗、高可靠性的特點,還要向高實時性、高自適應性、易于操作和棋塊化的方向發(fā)展2。總的說來,嵌入式系統(tǒng)在以下幾個方面將會有更大的發(fā)展:1. 嵌入式操作系統(tǒng):嵌入式系統(tǒng)剛剛發(fā)展的時候,軟件系統(tǒng)還是前后臺方式的系統(tǒng)開發(fā),這種開發(fā)方式也被大多數(shù)人比喻為“裸奔”。前后臺方式下的軟件系統(tǒng)的實時性差、功能單一、代碼不易于維護等缺點越來越不適應嵌入式系統(tǒng)的高速發(fā)展,為此嵌入式操作系統(tǒng)被引人。嵌入式操作系統(tǒng)的使用能
7、夠更加豐富嵌人式系統(tǒng)的功能,使得產品更加穩(wěn)定可靠,多任務并發(fā)的處理方式也讓系統(tǒng)的實時性要求得到滿足,模塊化的編程方式讓產品的可定制性進一步增強。當前普遍使用的嵌入式的操作系統(tǒng)有Windows CE、C/OS-II、Linux、VxWorks等。這些嵌入式操作系統(tǒng)中當屬Linux具有最高的人氣和應用潛力,原因是其源代碼公開且具有很好的定制性和可利用性,支持硬件廣泛、安全可靠、擁有眾多的開發(fā)者,另外有一重要原由便是產品生產商們在研發(fā)基于Linux系統(tǒng)的相關產品時,通常不必為發(fā)行軟件或者生產產品而支付Linux的許可費用。目前廣泛應用在手機、PAD等消費電子產品上的安卓操作系統(tǒng),便是由Linux的內
8、核所開發(fā)出來的。由此可見嵌入式操作系統(tǒng),特別是嵌入式Linux系統(tǒng)應用潛力巨大。2.網(wǎng)絡互連:網(wǎng)絡技術已經(jīng)深入到我們生活和工業(yè)生產的各個領域,由互聯(lián)網(wǎng)引發(fā)的物聯(lián)網(wǎng)技術正在快速發(fā)展中,網(wǎng)絡也使得人與人、設備與設備之間的聯(lián)系更加緊密,嵌人式設備為了適應網(wǎng)絡技術的發(fā)展,必然要求在硬件上提供各種網(wǎng)絡通信接口。傳統(tǒng)單片機的系統(tǒng)對于網(wǎng)絡連接有很大欠缺,然而現(xiàn)在的嵌入式處理器,卻擁有了內置的網(wǎng)絡端口,不僅擁有對TCP/IP協(xié)議的支持外,對于USB、總線、IEEE1394、藍牙、或紅外通信接口的支持,擁有上述通信接口中的一項或者多項,而且還對物理層提供其驅動的軟件,以及對應的通訊網(wǎng)的協(xié)議腳本。3.易于操作的人
9、機界面:嵌入式產品是為人們的生產生活服務的,如果目前的嵌入式設備還像以前DOS系統(tǒng)那樣使用命令行操作方式的話,就不會便于人們使用和操作,那些給我們生產生活帶來方便和事受的電子高科技產品也不會產生,嵌人式產品被大家使用和接受的程度也將大大降低。嵌入式系統(tǒng)的普及和應用離不開億萬大眾,嵌入式產品的親和力和人機互動性起著決定性的作用。我們都希望在一套圖形漂亮、直觀簡潔的界面下,僅僅通過手指點擊就完成我們的操作。蘋果產品的熱賣,平板電腦、智能手機的普及就充分說明了這點。1.3 嵌入式網(wǎng)絡的關鍵問題 在嵌入式網(wǎng)絡上面,主要關心如下2部分的問題1. 嵌入式本身的內存大小以及其運算速度,這些硬件問題需要被考慮
10、,雖然AT91SAM9G20有著較高的主頻,但也要盡量的減少系統(tǒng)開支,達到最大的效率。2. 搭建合適的平臺以完成通信,選擇合適的平臺將大大降低網(wǎng)絡搭建的工作量,所以依照所需要的功能搭建通信平臺。1.4 本論文的主要工作本課題通過對基于ARM嵌入式的以太網(wǎng)通信的研究,主要采用由Atmel公司推出的AT91SAM9G20芯片、DM9161AEP網(wǎng)絡芯片、Nand Flash等形成設計基礎,在ARM嵌入式平臺中移植Linux內核,通過Linux操作系統(tǒng)完成TCP/IP、UDP/IP通信的功能,最終在YL-9G20開發(fā)板上進行硬件測試。本文第2章介紹了基于ARM的嵌入式系統(tǒng)硬件平臺,介紹了基于ARM的
11、嵌入式系統(tǒng)硬件平臺的組成以及開發(fā)平臺的組建,重要硬件實現(xiàn)部分的構成,囊括相關芯片的問題進行依次進行敘述,且對核心處理器芯片、網(wǎng)絡控制芯片的內部結構、實現(xiàn)功能以及其工作的原理,分別做了相關簡介;以及論述服務器端的開發(fā)環(huán)境搭建,以及基于ARM的AT91Bootstrap的移植,U-Boot的移植,Linux內核配置與根文件系統(tǒng)的移植。本文第3章介紹了以太網(wǎng)通信的基本理論,通過Linux系統(tǒng)實現(xiàn)TCP/IP、UDP通信協(xié)議,體現(xiàn)了Linux操作系統(tǒng)實現(xiàn)網(wǎng)絡通信的技術優(yōu)勢,分別講述協(xié)議棧中ARP、IP、ICMP、TCP、UDP協(xié)議的實現(xiàn)過程,同時也介紹了協(xié)議棧與底層設備及應用層的接口設計。最后介紹了運
12、用socket套接字接口進行網(wǎng)絡程序編寫的流程。本文第4章介紹了基于ARM嵌入式的以太網(wǎng)通信程序的設計。論述了TCP、UDP網(wǎng)絡編程,且在服務器和客戶端測試TCP、UDP通信,實現(xiàn)基于ARM嵌入式的以太網(wǎng)通信功能,完成通信程序的編寫。2 ARM嵌入式系統(tǒng)目前,嵌入式系統(tǒng)相關技術已經(jīng)在工業(yè)系統(tǒng)、個人消費電子產品、工業(yè)系統(tǒng)、智能家居等領域有著良好發(fā)展,其中多數(shù)伴隨嵌入式系統(tǒng)產品的就是其嵌入式網(wǎng)絡系統(tǒng)的開發(fā),ARM嵌入式微處理器一般具有如下特點:體積小、低功耗、低成本、高性能;支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件3。本章,主要講述嵌入式系統(tǒng)的硬件平臺模塊以
13、及發(fā)開環(huán)境。2.1 系統(tǒng)開發(fā)環(huán)境系統(tǒng)開發(fā)環(huán)境主要由硬件部分包括計算機、ARM9開發(fā)板、網(wǎng)絡設備;軟件中包含:嵌入式Linux的開發(fā)環(huán)境以及相關設備驅動、SecureCRT組成。軟件部分的工作均在計算機PC(Personal Computer)上完成,嵌入式Linux開發(fā)環(huán)境負責程序的開發(fā)和調試,SecureCRT可以打印串口輸出的數(shù)據(jù),以及通過串口向開發(fā)板發(fā)送數(shù)據(jù)。ARM嵌入式系統(tǒng)的開發(fā)環(huán)境如下圖 2.1 所示。圖2.1 系統(tǒng)開發(fā)環(huán)境圖PC機提供了程序編寫開發(fā)和調試的平臺,搭載了Linux操作系統(tǒng)的開發(fā)環(huán)境和SecureCRT串口調試工具,完成嵌入式Linux系統(tǒng)的移植以及相關環(huán)境的搭建、程序
14、的編寫以及調試的功能。通過串口和USB接口連接開發(fā)板,在PC機上進行對開發(fā)板的相關操作,通過以太網(wǎng)口完成PC機與開發(fā)板中的網(wǎng)絡芯片的以太網(wǎng)通信的硬件連接,實現(xiàn)以太網(wǎng)通信。2.2 ARM嵌入式硬件平臺硬件系統(tǒng)是ARM嵌入式系統(tǒng)一切的根本,實現(xiàn)產品的基礎就是硬件平臺,實現(xiàn)產品的附加服務,則需要軟件的幫助。為了實現(xiàn)本文的目標 - 基于ARM嵌入式的以太網(wǎng)通信程序設計,我第一步要做的就是進行對ARM嵌入式系統(tǒng)硬件的學習和了解,所以在下面幾節(jié)對于ARM嵌入式系統(tǒng)的硬件平臺結構以及關鍵器件芯片進行介紹。2.2.1 嵌入式硬件平臺結構由上一節(jié)圖2.1可以看出,ARM嵌入式平臺需要通過以太網(wǎng)網(wǎng)絡芯片和以太網(wǎng)口
15、完成網(wǎng)絡的聯(lián)通;以及需要USB和串口對程序和內核等進行下載燒寫以及調試;同時,我們還需要存儲部分以及實時時鐘來提供支持,當然電源模塊為整個ARM嵌入式開發(fā)平臺提供運行的保障 。如圖2.2 所示為本文所需的ARM嵌入式系統(tǒng)的硬件結構。圖 2.2 ARM嵌入式平臺硬件結構通過RJ45連接到PC機,在完成前期工作后,通過設置端口,運行服務器端(PC機)和客戶端(ARM嵌入式平臺)中的網(wǎng)絡程序即可實現(xiàn)TCP或UDP協(xié)議的通信。2.2.2 嵌入式處理器在嵌入式系統(tǒng)中,處理器依照其性能高低分別為嵌入式微控制器以及嵌入式微處理器。在一些低端如:簡單運算處理、邏輯控制、IO控制等場合中,通常使用微控制器,這些
16、微控制器大多是16位或8位的。而在應用一些復雜運算、有處理速度需求且實時性要求的場合中,使用的處理器多是32位甚是64位的微處理器。從2.1.1節(jié)的硬件結構可以看出,我們需要完成通信和數(shù)據(jù)處理的相關任務,要求處理器具有較快的處理速度,然而處理器的系統(tǒng)時鐘對處理速度起決定性作用。本文使用的ARM嵌入式硬件平臺使用的處理器AT91SAM9G20,Atmel公司的AT91SAM9G20芯片主頻達400MHz,完全滿足應用需求4。AT91SAM9G20微處理器基于ARM926EJ-S處理器核心內核,包含3個32位并行的I/O控制器,可控制SDRAM以及包括Nand Flash在內的靜態(tài)存儲器。如圖2.
17、3為該處理器的結構圖。圖2.3 AT91SAM9G20結構圖2.2.3 網(wǎng)絡芯片時今網(wǎng)絡硬、軟件技術的快速發(fā)展使得網(wǎng)絡設備的應用呈現(xiàn)大幅增長的態(tài)勢??刂聘黝悆x器儀表、智能家電、消費電子產品、工業(yè)生產中的設備,以及它們相關數(shù)據(jù)采集的設備都開始了網(wǎng)絡化,在Internet中共享及獲取資源,從而進一步方便我們的工作和生活。以太網(wǎng)通信,顧名思義,我們需要實現(xiàn)網(wǎng)絡連接,也就離不開網(wǎng)絡控制芯片。在我完成設計的過程中,必要解決的就是硬件平臺同以太網(wǎng)的通信問題。本文中使用的ARM嵌入式平臺采用了DM9161系列的網(wǎng)絡控制芯片DM9161AEP,DM9161AEP的結構圖如圖2.4所示。DM9161AEP的芯片
18、特點如下所示:1.48pin LQFP封裝2.工藝:0.25m,輸入輸出供電電壓3.3V,模擬部分2.5V3.支持MII和RMII連接方式(推薦使用MII)4.支持雙絞線自適應(AUTO-mix)5.支持TCP/IP硬加速6.與大部分廠家的微控制器是完全兼容。使用的單口PHY。圖 2.4 DM9161AEP 結構圖 2.3 搭建ARM嵌入式開發(fā)環(huán)境在上面介紹完ARM嵌入式系統(tǒng)的硬件平臺,展開了軟件方面的工作。對于嵌入式系統(tǒng)的軟件開發(fā)來說,需要完成建立交叉編譯工具;由于嵌入式系統(tǒng)所使用的芯片型號多種多樣,很多芯片和硬件接口不能直接兼容6,我們需要完成移植的工作:AT91Bootstarp移植,U
19、-Boot移植與燒寫,Linux內核移植與燒寫,根文件系統(tǒng)移植與燒寫,PC機上開發(fā)環(huán)境的建立等任務。2.3.1 嵌入式Linux簡介Linux最早是由Linus Torvalds所創(chuàng)建的,經(jīng)過20年時間的發(fā)展,Linux已經(jīng)成為一個有著強大功能且穩(wěn)定可靠的OS。經(jīng)過對原有的Linux操作系統(tǒng)進行調整和剪裁,形成了可在嵌入式平臺運行的嵌入式Linux操作系統(tǒng)。嵌入式Linux操作系統(tǒng)擁有嵌入式操作系統(tǒng)的全部特征,同時保留了十分豐富的開放的源代碼,所以應用在嵌入式系統(tǒng)中是越來越普遍。嵌入式Linux操作系統(tǒng)與其它嵌入式操作系統(tǒng)相比具有以下特點:1. 開放源代碼。Linux最大的特點就是源代碼公開并
20、且執(zhí)行GPL協(xié)議,嵌入式Linux開發(fā)人員根據(jù)自己產品的需求可以更改內核源碼來滿足功能使用;不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發(fā)的強大技術后盾5。2. 可裁剪、高效率的微小內核。Linux小內核、高效率,內核的更新速度快而且可以被定制。它的系統(tǒng)內核最小可以到134KB,這么優(yōu)秀的內核設計可以使系統(tǒng)的僅僅占據(jù)更小的資源便可以可靠且穩(wěn)定的運行。獨特的模塊機制可以將用戶的驅動或者應用程序模塊動態(tài)的從內核中插入或卸載。3. 免費。產品制造生產商在開發(fā)完基于嵌入式Linux的產品以后無需為產品的發(fā)布支付相關的許可費。4. 支持眾多硬件。嵌入式Linux操作系統(tǒng)可以支持多種處理
21、器和多種硬件體系,是一種可以跨越平臺的操作系統(tǒng)。5. 安全、可靠。嵌入式Linux十分可靠,可以毫無故障的運行數(shù)年,一直廣泛被數(shù)據(jù)中心所應用。與此同時,嵌入式Linux的開發(fā)人員還可以使用systrace或者grsecurity此類的工具來加強其安全性,這是Windows操作系統(tǒng)開發(fā)者無法想象的。6. 優(yōu)秀的網(wǎng)路功能。嵌入式Linux在網(wǎng)絡方面有著十分完整的內核結構,Linux對網(wǎng)絡中最常用的網(wǎng)絡協(xié)議,如TCP/IP網(wǎng)絡通信協(xié)議有著整體的支持。并且提供包括了10兆、100兆、1000兆的以太網(wǎng)絡的支持。因此嵌入式Linux十分適用于網(wǎng)絡相關產品的開發(fā)。嵌入式Linux的應用,主要在數(shù)字電話、機
22、頂盒、視頻通信、數(shù)據(jù)網(wǎng)絡、以太網(wǎng)交換機、Hub、遠程通信、網(wǎng)橋、醫(yī)療電子、信息家電、PDA、工業(yè)等領域??梢哉f嵌入式Linux在民用還是工用范疇都有著普遍應用,當前很多平板電腦和智能手機采用的安卓也是采用Linux的內核。2.3.2 ARM嵌入式系統(tǒng)一般的開發(fā)方法與多數(shù)常見的桌面軟件的開發(fā)所不同,當嵌入式軟件開發(fā)人員開發(fā)一個基于嵌入式系統(tǒng)的應用時,首先會在PC機上選擇合適的嵌入式開發(fā)環(huán)境并且進行軟件開發(fā),然后在實驗板或者開發(fā)平臺上對其代碼進行測試,最后PC機編譯生成正確的映像文件或者可執(zhí)行的文件,并且燒寫到最終的目標產品中,如圖2.5所示。圖 2.5 ARM嵌入式系統(tǒng)開發(fā)的一般方法對于ARM嵌
23、入式平臺的Linux軟件開發(fā)一般步驟如下:1. PC機的開發(fā)環(huán)境選擇。這里本文選擇的是Fedora 14 系統(tǒng)。通過在Windows系統(tǒng)中的虛擬機來安裝Fedora 14操作系統(tǒng),便于調試。2. 建立交叉編譯工具:Fedora 14自帶的GCC都是針對x86架構的,為了可以讓編寫的代碼在開發(fā)板或者最終產品上良好運行,建立交叉編譯工具是所必須條件。3. 開發(fā)、移植Bootloader。4. 配置、燒寫U-Boot。5. 配置、移植Linux內核。6. 建立根文件系統(tǒng)。7. 開發(fā)程序。2.3.3 嵌入式Linux交叉編譯環(huán)境的建立嵌入式系統(tǒng)的硬件性能和其存儲空間有限,因此,在對程序進行開發(fā)的時候都
24、是在PC機上進行操作,首先建立一個用于開發(fā)板的交叉編譯工具,用其在PC機上編譯程序用于開發(fā)板??梢钥闯觯梢栽谝粋€系統(tǒng)平臺中編譯出能夠運行在不同的體系架構上的代碼,這就是交叉編譯。比如在處理器架構為x86的微機中編譯出可以運行在ARM嵌入式中的代碼。若使用桌面級編譯環(huán)境,則無法生成在ARM平臺上運行的程序代碼。在PC機Linux系統(tǒng)下利用GCC編譯程序,這樣的編譯方法稱之為本地編譯,本地編譯的代碼只能夠在本地運行。與本地編譯相對應的,即是上面所介紹的交叉編譯,通過交叉編譯器可以編譯出這種跨平臺程序。采用arm-linux-gcc-4.3.2版本的交叉編譯工具,通過網(wǎng)絡下載到的文件解壓到個人目錄
25、中。隨后由終端進入解壓后生成的/usr/local/目錄中,將目錄下的arm目錄整體復制到系統(tǒng)文件根目錄/usr/local/下面。然后所有交叉編譯工具都存儲在其中,如圖2.6所示。圖2.6 交叉編譯工具 arm-linux-gcc-4.3.2然后更改環(huán)境變量PATH的函數(shù),將統(tǒng)一存儲的交叉編譯工具的路徑目錄添加到其中。在終端中對PATH進行修改,鍵入:#export PATH = /usr/local/arm/4.3.2/bin: $PATH繼而檢查是否正確添加路徑到PATH中,鍵入:#echo $PATH如圖2.7所示,可以看到,有顯示包含有交叉編譯工具的路徑,說明已完成添加新路徑至PAT
26、H。至此,已經(jīng)完成交叉編譯環(huán)境的搭建。圖2.7 添加交叉編譯工具環(huán)境變量2.3.4 開發(fā)、移植AT91Bootstrap在AT91SAM9G20芯片內部含有一個BootRom代碼。當沒有燒寫任何Bootloader和內核文件的情況之下給芯片上電啟動,通過串口調試工具(本文使用SecureCRT)可以看到串口是有打印消息的,顯示的內容為“RomBoot”,此RomBoot代碼是Atmel廠商定制在芯片中的,人為不能對其作修改。作為ARM嵌入式開發(fā)人員,在啟動代碼的編寫、修改和學習中,AT91Bootstrap是最先面對的環(huán)節(jié)。AT91Bootstrap它的主要作用即是對SDRAM初始化以及相關的
27、存儲器(Nand Flash)初始化,然后加載U-Boot到SDRAM中的指定字節(jié)并開始運行U-Boot。AT91Bootstrap源代碼由公共的硬件驅動、頭文件以及庫文件等組成。首先,解壓下載的AT91Bootstrap,在終端中輸入:#unzip AT91Boostrap1.13.zip解壓后,在當前目錄下生成AT91Bootstrap目錄。進入相應9g20源碼區(qū),修改編譯工具的路徑,打開其文件夾,使用vi進行函數(shù)修改此時,可以直接編譯,在源目錄下執(zhí)行“make”指令。編譯過后可在該目錄下看到nandflash_at91sam9g20ek.bin文件,如圖2.8所示。#cd /home/d
28、ietrich/Bootstrap-v1.13/board/at91sam9g20ek/nandflash#make圖2.8 make編譯后生成bin文件在這里就完成了ARM嵌入式系統(tǒng)的Bootstrap編譯,接下來使用SAM-BA2.8燒寫生成的.bin文件至Nand Flash內存的起始地址處,即0x0,也就是處理器啟動以后首先要從NandFlash上的)0x0地址位上讀取AT91Bootstrap且開始運行,這也說明在啟動代碼中,AT91Bootstrap是第一部分。2.3.5 U-Boot移植與燒寫U-Boot的編譯形式、源碼目錄都喝Linux的內很很相似。實際上,很多U-Boot源代
29、碼就是通過對應的Linux系統(tǒng)內核弱化而來,特別是很多設備驅動程序??梢栽赨-Boot源代碼的注釋行中有很多表現(xiàn)。隨著U-Boot版本不斷的升級,其所支持的硬件資源和系統(tǒng)資源也是越來越豐富。U-Boot有著諸多優(yōu)點:源代碼開放、對很多系列的處理器支持、對很多嵌入式OS內核支持、十分靈活的功能設置、優(yōu)異的穩(wěn)定以及可靠性、多種設備的驅動源代碼以及對網(wǎng)絡的強大支持。正是因為這些特點使得U-Boot被越來越多的嵌入式操作系統(tǒng)所應用,也有著更好的使用前景。U-Boot啟動并且引導Linux內核這一過程可以分為兩個階段,第一個階段即為實現(xiàn)設備的初始化,絕大多數(shù)是采用匯編語言所編寫來達到目的的;第二個階段則
30、是采用C語言編寫,可讀性強,并可實現(xiàn)相對復雜的功能。兩個階段實現(xiàn)的功能如下:1.第一階段功能:設置異常項和異常處理函數(shù);- 設置控制寄存器地址;- 關閉著門狗和屏蔽中斷;- 配置PLLCO飛等寄存器,確定系統(tǒng)的主頻;- 關閉MMU功能;- 初始化RAM控制寄存器;- 拷貝數(shù)據(jù)至SDRAM;- 設置堆攏;- 消除BSS段;- 跳轉到第二階段代碼人口。2.第二階段功能:- 初始化本階段所涉及的硬件設備;- 設置SDRAM的起始地址和大??;- 讀取內核到RAM 中;- 為內核設置啟動參數(shù);- 調用內核??梢詮木W(wǎng)絡上下載U-Boot。本文采用的版本是1.3.4。在終端中使用解壓命令將U-Boot-1.
31、3.4.tar.bz2壓縮文件在個人文件夾內進行解壓操作,然后進入生成的u-boot-1.3.4目錄對Makefile文件進行修改,將CROSS_COMPILE變量修改為編譯器所在目錄(本文2.2.3節(jié))。保存退出vi后對U-Boot進行make編譯,即可在文件目錄下生成我們需要的二進制.bin文件。圖2.9 編譯后生成的bin文件燒寫U-Boot的方法仍然與上一節(jié)燒寫AT91SAM9G20相同,如圖2.10所示,也是通過SAM-BA軟件。不過需要注意的是燒寫起始地址應為NandFlash的0x200000地址處,然后Send File開始燒寫u-boot.bin。圖2.10 燒寫U-Boot
32、.bin2.3.6 嵌入式Linux內核的移植及燒寫嵌入式Linux內核在本文中選擇Linux-2.6.27這個一個版本,解壓Linux-2.6.27.tar.bz2壓縮文件,可以觀察到源碼包內有相當多的文件和目錄,為了掌握Linux內核的移植方法,了解其結構很有必要的。Linux-2.6.27內核包中一共有20個文件夾,有很多都與本文無關,不做介紹,下面只介紹最為重要的7個文件目錄:1. arch目錄。arch子目錄包括了和硬件體系相關的核心代碼。它的每一個子目錄都是代表一種可以支持的硬件體系結構,例如i386 就是關于Intel CPU 及與之相兼容體系結構的子目錄(PC 機一般都基于此目
33、錄)。其中的arm 目錄是我們需要特別關心的,里面包含的是基于ARM處理器的體系結構,是本文對Linux 進行移植所需用到的目錄。2. drivers目錄。drivers 子目錄里面是Linux系統(tǒng)所支持的硬件設備驅動程序;每種驅動程序各占用一個下級子目錄,如/usb目錄下為通用串行總線USB設備驅動程序。對drivers/block/這個目錄下的genhd.c文件進行查看,其中的device_setup()函數(shù)可以了解設備初始化的過程。3. fs目錄。fs子目錄包含的是所有文件系統(tǒng)和各種類型的文件操作代碼,此目錄包含用于配置核心的腳本文件等。4. kenerl目錄。此目錄內為核心代碼,包含了
34、進程通信、進程調度、內存管理、虛擬文件系統(tǒng)等在內的Linux系統(tǒng)大多數(shù)的內核函數(shù)。5. include 目錄。include 子目錄包括編譯核心所需要的大部分頭文件。6. init 目錄。這個目錄內包含初始化代碼。7. lib 目錄。lib 子目錄里面包含Linux 內核庫函數(shù)代碼。在Linux 內核源碼的根目錄下還有一個文件需要特別注意,就是“Makefile文件”。它是Linux內核里面的第一個Makefile文件,其主要用來聯(lián)系內核的各個模塊,保存各種模塊互相間的承接關系以及連接,在進行內核編譯的時候需要修改這個文件。對Linux內核的配置修改,是移植Linux內核的流程中所做的第一步,
35、亦是相當重要且十分繁雜的一步。內核配置相當繁雜,有3000條左右需要配置,掌握一些方法可以降低工作的難度。在內核源代碼/arch/arm/configs目錄中的配置文件可以看出Linux內核所支持的硬件都有哪些,在這里本文使用的ARM嵌入式硬件平臺與Linux內核中提供的AT91SAM9G20EK很匹配,所以在配置內核的過程中可以直接加載AT91SAM9G20EK這個配置文件,然后在這個配置文件的基礎上再做修改就可以了。這樣大大的提高了內核的配置效率和準確度。在Linux內核的配置上,需要對文件系統(tǒng)、雜項、網(wǎng)絡設備支持、設備驅動等進行設置,第一次設置之前需要在終端里清除設置,以免出錯。通過ma
36、ke menuconfig。如圖2.11所示進入配置菜單界面。圖2.11 Linux內核配置界面進入File systems文件系統(tǒng)選項,如圖2.12所示,從雜項文件系統(tǒng)中查看是否支持cramfs文件系統(tǒng)(本文使用的文件系統(tǒng))。圖2.12 cramfs文件系統(tǒng)支持然后進入Device Drivers選項中的網(wǎng)絡設備支持。如圖2.13所示然后進入圖 2.13 網(wǎng)絡芯片驅動支持Ethernet(10 or 100Mbit)選項,選擇需要的網(wǎng)絡芯片的驅動,進行添加。最后退出配置界面并且保存設置,即完成Linux內核的配置。然后在終端進入Linux內核源碼的目錄下,為了防止編譯報錯,執(zhí)行make cl
37、ean 清除之前生成的過程文件。然后執(zhí)行make uImage,如圖2.14所示生成zImage鏡像文件。圖2.14 編譯生成的內核鏡像文件然而,還需要使用mkimage工具去編譯內核文件,可以將其放在/usr/bin文件夾中,這樣可以直接編譯生成uImage。然后燒寫內核文件,同之前一樣,也是利用SAM-BA軟件。在燒寫完成AT91Bootstrap以及U-Boot后繼續(xù)燒寫uImage內核。但是還要注意燒寫的目的地址為0xA0000。然后開始下載內核鏡像文件uImage到Nand Flash中。2.3.7 根文件系統(tǒng)的移植Linux必須在硬件的一個分區(qū)上存放系統(tǒng)啟動所必需的一些文件7,即根
38、文件系統(tǒng),它是嵌入式Linux組成中一個特別重要的組成,它是嵌入式Linux運行里所必須的,Linux內核運行以后,會自動尋找并且掛載自己的根文件系統(tǒng),然后執(zhí)行根文件系統(tǒng)中的可執(zhí)行文件或啟動腳本,嵌入式Linux的應用程序在經(jīng)過交叉編譯后,生成的可執(zhí)行文件也是需要放在根文件系統(tǒng)里的。CramFS是本文所采用的根文件系統(tǒng),它是一個壓縮式的、十分小且簡單的文件系統(tǒng)。首先在用戶文件夾創(chuàng)立一個名為cramfs的目錄,并且將根文件掛載到目錄下,將根文件系統(tǒng)和cramfs相對應。然后通過mkcramfs工具再次打包,形成新的根文件。如圖2.15所示。圖2.15 生成根文件系統(tǒng)燒寫根文件系統(tǒng)與前面的Linu
39、x內核、U-Boot、AT91Bootstrap不同,本文使用tftp的方式燒寫根文件系統(tǒng),因為根文件系統(tǒng)可以做到很大,采用串口或并口傳輸會很慢,通過網(wǎng)線使用tftp的方式燒寫要快捷很多。如圖2.16所示,windows下的tftp界面。設置configure中的Home Directory為當前存放根文件映象的目錄,網(wǎng)線連接開發(fā)板,上電,點擊軟件中的Start可以看到左下角顯示Server is running,表示tftp服務器運行正常,設置完畢。圖2.16 tftp啟動界面啟動串口調試終端軟件SecureCRT,接下來重新給開發(fā)板上電,在等待進入U-Boot倒計時的時候按住空格鍵,直接進
40、入Boot界面,在這個U-Boot中設置tftp的服務器(PC虛擬機上Fedora)及客戶端(開發(fā)板)的IP地址。如圖2.17所示。圖2.17 設置TFTP服務器及客戶端的IP通過U-Boot命令下載根文件系統(tǒng)鏡像到目標板內存中,如圖2.18所示,燒寫根文件到內存地址0x20000000處。同時把內存中的根文件系統(tǒng)鏡像復制至Nand Flash,從而完成對ARM嵌入式的根文件系統(tǒng)的燒寫。圖2.18 在boot通過tftp燒寫根文件系統(tǒng)2.4 PC機Linux開發(fā)環(huán)境的建立在之前,已經(jīng)安裝了交叉編譯的環(huán)境,本應屬于本節(jié)的內容,但編譯內核、U-boot等都對其有需要,所以不在本節(jié)敘述。對于程序開發(fā)
41、的環(huán)境,本文使用集成開發(fā)環(huán)境Eclipse。Eclipse集成開發(fā)環(huán)境僅僅只是個平臺框架,不過各種插件對其支持從而使得其獲得別的功能單一IDE工具難以比擬的靈活性。選擇Eclipse還有一點,即是Eclipse的圖形界面的開發(fā)方式和其良好的框架設計體系。這對習慣Windows圖形界面下開發(fā)方式的人員來說要方便許多。在Fedora14系統(tǒng)中,在安裝時選擇全部安裝,在安裝完畢以后,可以直接在程序里的編程目錄中直接啟動Eclipse。如圖2.19所示Eclipse的工作界面。圖2.19 Eclipse工作界面對于Eclipse的的使用,本文將在第4章嵌入式通信程序的設計中給予說明。2.5 本章小結本
42、章介紹了ARM嵌入式Linux構建的相關知識,也是進行ARM嵌入式以太網(wǎng)通信程序開發(fā)首先要面對的工作,具體涉及啟動代碼、內核、根文件系統(tǒng)的編譯和配置、PC宿主機開發(fā)環(huán)境的搭建以及Eclipse軟件的應用。完成了AT91Bootstrap、U-Boot、Kernle、CramFS 的編譯和配置。在編譯過程中會出現(xiàn)的問題本章也做了說明并提出了解決辦法。這部分知識具有一定的通用性,其中Eclipse是進行代碼調試常有效的軟件平臺,熟練掌握后可以很有效地進行嵌入式linux代碼的編寫和在線仿真調試。3 ARM嵌入式以太網(wǎng)通信的開發(fā)Linux系統(tǒng)的一個主要特點是它強大的網(wǎng)絡支持功能,它在網(wǎng)絡方面的應用也
43、越來越廣泛。本章敘述了TCP/IP 協(xié)議和Linux 網(wǎng)絡開發(fā)的基礎知識,本章是下一章TCP服務器、TCP客戶端開發(fā),UDP服務器以及UDP客戶端開發(fā)程序設計的理論基礎。3.1 OSI網(wǎng)絡模型網(wǎng)絡結構的標準模型是OSI模型。它是很多網(wǎng)絡協(xié)議模型的基礎,目前大多數(shù)的網(wǎng)絡通信協(xié)議都是基于這個模型建立起來的,這種分層的思想在很多領域中都得到了廣泛地應用。OSI協(xié)議參考模型從上到下共分為7層,分別是:應用層、表示層、會話層、傳輸層、網(wǎng)絡層、數(shù)據(jù)鏈路層及物理層。OSI七層網(wǎng)絡模型及其功能如表3.1所列。表3.1 OSI 7層網(wǎng)絡模型OSI層功能應用層 文件傳輸,電子郵件、虛擬終端 表示層 數(shù)據(jù)格式化、代
44、碼轉換、數(shù)據(jù)加密 會話層 解除或建立與別的節(jié)點的聯(lián)系 傳輸層 提供端對端的通信接口 網(wǎng)絡層 為數(shù)據(jù)包選擇路由 數(shù)據(jù)鏈路層 傳輸有地址的幀以及錯誤檢測功能 物理層 以二進制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) 在OSI七層網(wǎng)絡模型中,各層之間的規(guī)則是相互獨立的,每層通過下一層的數(shù)據(jù)為上一層提供服務,不同主機相同層次之間是對等的,每一層都規(guī)定了不同的特性并完成不同的功能。3.2 TCP/IP協(xié)議棧的基本概念上節(jié)中簡單介紹了國際互聯(lián)網(wǎng)標準化組織推薦的OSI網(wǎng)絡模型,但OSI模型過于龐大且較為復雜,具體實現(xiàn)有很多困難。在實際應用中,TCP/IP是網(wǎng)絡中使用的基本通信協(xié)議。TCP/IP 的協(xié)議參考和OSI協(xié)議的
45、對應關系如圖3.1所示。圖3.1 OSI七層模型與TCP/IP四層模型對照圖目前有很多種實現(xiàn)的方式,比如串行線路(Serial Line IP, SLIP)、點對點P2P等。在以太網(wǎng)應用中,該層網(wǎng)絡在IP數(shù)據(jù)的基礎上增加了一共14個字節(jié)的報頭,這14個字節(jié)被稱為以太網(wǎng)報頭,其數(shù)據(jù)格式如圖3.2 所示。圖3.2 以太網(wǎng)數(shù)據(jù)格式3.3 TCP協(xié)議基本概念TCP協(xié)議建立在不可靠的網(wǎng)絡層IP協(xié)議之上,在IP協(xié)議的基礎上,增加了確認重發(fā)、超時重傳、流量控制等機制,實現(xiàn)了一種面向連接的傳輸協(xié)議。建立好連接后,雙方便均可收發(fā)信息直到連接斷開7。TCP協(xié)議是在IP協(xié)議的基礎上進行數(shù)據(jù)傳輸?shù)模琓CP數(shù)據(jù)在IP報
46、文中的位置如圖3.3所示。圖3.3 TCP數(shù)據(jù)在IP報文中的位置3.3.1 建立與斷開TCP連接主機A 與主機B 要想通過TCP協(xié)議進行通信,需要通過3個報文段完成TCP連接的建立,這個過程稱為三次握手(three-way handshake),即對每次發(fā)送的數(shù)據(jù)量是怎樣跟蹤進行協(xié)商使數(shù)據(jù)段的發(fā)送和接收同步8,如圖3.4所示。TCP 連接的建立需要雙方發(fā)送自己的同步SYN信息給對方,在SYN中包含了末端初始化的數(shù)據(jù)序號,并且需要收到對方對自身發(fā)出SYN的確認。三次握手過程為:第一次:主機A向主機B發(fā)送連接請求,其中包含SYN段信息,通知主機B主機端口和序號。第二次:主機B應答主機A,向主機A發(fā)
47、送建立連接請求,并發(fā)送主機B的初始序號,其中ACK段為主機A發(fā)送的ISN + l。第三次:主機A將主機B發(fā)送的SYN段加1(SYN + 1)作為確認號返回給主機B作為應答。圖3.4 TCP建立連接的三次握手過程建立一個TCP連接需要三次握手,而斷開一個TCP連接需要四次揮手,其過程如圖3.5所示。圖3.5 TCP斷開連接的四次揮手過程第一次:主機A發(fā)送FIN字段到主機B,發(fā)送斷開連接的請求。第二次:主機B先確認主機A的FIN請求,然后發(fā)送ACK字段到主機A,確認序號為主機A序號加上1。第三次:主機B向主機A發(fā)送FIN請求。第四次:主機A對主機B的請求確認后,隨之斷開TCP連接。3.3.2 TC
48、P傳輸中數(shù)據(jù)的封裝和解封TCP/IP協(xié)議中數(shù)據(jù)傳輸過程與OSI七層模型相似,只不過是TCP/IP協(xié)議只是四層的網(wǎng)絡模型,實現(xiàn)起來較為方便。TCP數(shù)據(jù)通信傳輸過程如圖3.6所示。圖3.6 TCP通行數(shù)據(jù)傳輸中的封裝和解封數(shù)據(jù)從應用程序發(fā)送到物理層驅動程序處的過程是一個將數(shù)據(jù)封裝的過程。在發(fā)送數(shù)據(jù)的主機A中,數(shù)據(jù)經(jīng)過傳輸層增加了TCP頭部,再經(jīng)過網(wǎng)絡層增加了IP頭部,最后達到物理層驅動程序中并添加了以太網(wǎng)頭部,然后將封裝完畢的數(shù)據(jù)發(fā)送到以太網(wǎng)中進行傳輸,送往接收主機B一端。以太網(wǎng)數(shù)據(jù)包從物理層傳送到應用程序處的過程是一個將數(shù)據(jù)解封的過程。在主機B上,驅動程序從以太網(wǎng)中接收到以太網(wǎng)數(shù)據(jù)包,將以太網(wǎng)數(shù)
49、據(jù)包去除頭部和尾部后進行CRC校驗后發(fā)送到網(wǎng)絡層,在IP協(xié)議層內去除IP頭部并發(fā)送至傳輸層的TCP協(xié)議,在TCP協(xié)議層去除掉TCP頭部獲得需要的數(shù)據(jù),然后將數(shù)據(jù)傳遞給應用程序,在主機B上的應用程序最后得到的是去除掉各種協(xié)議層頭部的有效數(shù)據(jù)。3.3.3 TCP協(xié)議的特點總結TCP 協(xié)議具有以下幾個突出的特點。1.面向連接的服務:TCP進行數(shù)據(jù)傳輸之前必須要建立TCP連接,連接完成后,所有TCP報文的傳輸都在此連接的基礎上進行。2.可靠的傳輸服務:采用校驗和應答重發(fā)機制保證傳輸?shù)目煽啃裕邮辗叫枰獙邮盏腡CP報文進行校驗和計算,如果計算結果錯誤則不發(fā)送確認響應,沒有接收到響應的發(fā)送端主機將在超時
50、后自動重發(fā)剛才的TCP報文。3.字節(jié)流服務:TCP協(xié)議進行傳輸?shù)臅r候將數(shù)據(jù)視為沒有結構的字節(jié)流,這樣基于這樣的字節(jié)流傳輸就沒有字節(jié)順序(大端模式/小端模)的問題。4.流量控制:支持端到端的流量控制。3.4 UDP協(xié)議用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol),簡稱UDP協(xié)議。UDP是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務,IP協(xié)議是TCP/IP協(xié)議中最為核心的協(xié)議10。UDP 數(shù)據(jù)報封裝成一份IP 數(shù)據(jù)報的格式,如圖3.7 所示。圖3.7 UDP數(shù)據(jù)在IP報文中的位置鑒于UDP協(xié)議的上述特點,在網(wǎng)絡質量較差的環(huán)境下使用UDP協(xié)議會出現(xiàn)數(shù)
51、據(jù)包丟失嚴重的問題,但使用UDP協(xié)議比獲得較快的使用速度,我們日常的應用程序中老版的QQ就是使用UDP協(xié)議傳輸11。3.4.1 UDP傳輸中數(shù)據(jù)的封裝和解封由于UDP協(xié)議與TCP協(xié)議都同屬于傳輸層,其在網(wǎng)絡傳輸中的作用也比較相似,因此UDP協(xié)議數(shù)據(jù)傳輸過程中的數(shù)據(jù)封裝和解封過程與TCP協(xié)議極為相似。UDP協(xié)議層的數(shù)據(jù)傳輸過程如圖3.8所示。圖3.8 UDP通信數(shù)據(jù)傳輸中的封裝和解封數(shù)據(jù)從應用程序發(fā)送到物理層驅動程序處的過程是一個將數(shù)據(jù)封裝的過程。在發(fā)送數(shù)據(jù)的主機A中,數(shù)據(jù)經(jīng)過傳輸層增加了UDP 頭部,再經(jīng)過網(wǎng)絡層增加了IP頭部,最后達到物理層驅動程序代碼中添加了以太網(wǎng)頭部,然后將封裝完畢的數(shù)據(jù)
52、發(fā)送到以太網(wǎng)中進行傳輸,送往接收主機B一端。以太網(wǎng)數(shù)據(jù)包從物理層傳送到應用程序處的過程是一個將數(shù)據(jù)解封的過程。在主機B上,驅動程序從以太網(wǎng)中接收到以太網(wǎng)數(shù)據(jù)包,將以太網(wǎng)數(shù)據(jù)包去除頭部和尾部后進行CRC校驗后發(fā)送到網(wǎng)絡層,在IP協(xié)議層內去除IP頭部并發(fā)送至傳輸層UDP協(xié)議處,在UDP協(xié)議層去除掉UDP頭部獲得需要的數(shù)據(jù),然后將數(shù)據(jù)傳遞給應用程序,在主機B上的應用程序最后得到的是去除掉各種頭部的有效數(shù)據(jù)。3.4.2 UDP協(xié)議特點總結UDP協(xié)議具有以下特點:1.UDP無連接協(xié)議,2.可廣播傳輸相同的消息。3.UDP信息包的開銷小。4.吞吐量不受算法的調節(jié)。5.UDP是面向報文的。3.5 本章小結本
53、章介紹了TCP協(xié)議和UDP協(xié)議的數(shù)學模型,以及數(shù)據(jù)轉移的流程,這是ARM嵌入式以太網(wǎng)通信程序設計的基礎,有了這一章的基礎知識,我么可以畫出流程圖,對TCP和UDP通信的流程進行分解,通過下一章的Linux網(wǎng)絡編程套接字的幫助,然后實現(xiàn)其軟件的編程,即可實現(xiàn)ARM嵌入式以太網(wǎng)通信程序的設計。4 ARM嵌入式的以太網(wǎng)通信程序設計通過前面幾章,完成了本課題的前期工作,也是非常重要的,搭建了開發(fā)環(huán)境,搭建了嵌入式Linux系統(tǒng),熟悉了嵌入式的網(wǎng)絡知識;熟悉了TCP/IP和UDP/IP的原理;以及學習了嵌入式Linux的網(wǎng)絡編程,本章講述TCP/IP與UDP/IP的以太網(wǎng)通信程序的設計過程,以及在開發(fā)板
54、上與PC之間以太網(wǎng)通信的測試。4.1 TCP通信程序設計TCP 網(wǎng)絡編程的分為對服務器端和客戶端兩個部分的的程序設計,通過兩端互相接收/發(fā)送請求、進行連接和傳輸數(shù)據(jù),TCP協(xié)議設計了嚴格的3次建立連接握手過程、4次關閉連接握手過程11。4.1.1 TCP 服務器踹編程模式TCP 服務器端模式下編程主要分為以下流程:建立套接字socket()、綁定套接字與端口bind()、設置服務器的監(jiān)聽連接listen()、接收客戶端連接accept()、接收和發(fā)送數(shù)據(jù)read()/write()。和recv() /send()等、關閉套在字close()。如圖4.1 (a)所示為該TCP服務器端模式的流程圖
55、。圖4.1 TCP服務器端模式流程圖1 socket()函數(shù)用于對網(wǎng)絡、協(xié)議以及協(xié)議具體參數(shù)進行設置,實現(xiàn)套接字的初始化2 套接字與端口的綁定過程中,調用bind()函數(shù)將套接字與一個地址結構進行綁定。只有綁定之后才能進行數(shù)據(jù)的接收和發(fā)送。3 函數(shù)listen()用來初始化服務器可連接的隊列。4 TCP服務器用accept()函數(shù)一直監(jiān)聽端口,直到一個客戶端的連接請求到達。5 TCP 服務器通過send()和recv()或write()和read()等函數(shù)進行數(shù)據(jù)發(fā)送和接收。6 當完成通訊需求后,此時需要通過close()函數(shù)去關閉套接字的連接,結束通信。4.1.2 TCP客戶端編程模式TCP
56、客戶端模式下編程主要分為以下流程:建立套接字、服務器連接、接收和發(fā)送數(shù)據(jù)、關閉套接字。圖4.2為該TCP 客戶端模式的流程圖。圖4.2 TCP客戶端模式流程圖客戶端模式流程與服務器端模式流程類似,兩者不同之處是客戶端直接利用connect()函數(shù)連接服務器端,并根據(jù)用戶設置的服務器地址、端口等參數(shù)與特定服務器程序進行通信。在TCP 協(xié)議的客戶端是不需要綁定端口、監(jiān)聽、接受客戶端連接這3個函數(shù)的。4.1.3 TCP服務器端與客戶端通信過程TCP服務器端與客戶端進行數(shù)據(jù)交換要進行三次握手才可以完成TCP連接,之后才開始進行數(shù)據(jù)交換12,客戶端的讀數(shù)據(jù)過程對應服務器端的寫數(shù)據(jù)過程,客戶端與服務器端之間的的讀寫數(shù)據(jù)過程是相互對應的。當兩者完成數(shù)據(jù)讀寫后,關閉套接字的連接,結束通信。該過程如圖4.3所示。圖4.3 TCP服務器端與客戶端數(shù)據(jù)交互過程4.2 TCP網(wǎng)絡程序設計流程4.2.1 創(chuàng)建網(wǎng)絡套接字函數(shù)socket()socket()函數(shù)用于建立一個socket套接字的連接,可指定socket類型等信息。在建立了socket連接之后,可對sockaddr和sockaddr_in兩個數(shù)據(jù)類型進行初始化,以保存所建立的socket信息。socket()函數(shù)調用成功后會返回
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光谷四年級學生數(shù)學試卷
- 肛腸科課件教學課件
- 法國小學生期末數(shù)學試卷
- 關于山西中考數(shù)學試卷
- 都昌縣小升初數(shù)學試卷
- 肋骨骨折的護理
- 肉鴨養(yǎng)殖技術課件
- 2024年11月北京通州中銀富登村鎮(zhèn)銀行招考筆試歷年參考題庫附帶答案詳解
- 2025年02月上饒銀行春季招考筆試歷年參考題庫附帶答案詳解
- 部門經(jīng)理培訓課件
- IPC-A-610國際標準中英文對照(doc 17)
- JJF(建材)110-2019水泥雷氏夾膨脹測定儀校準規(guī)范-(高清現(xiàn)行)
- 《納尼亞傳奇》閱讀交流(課堂PPT)
- 某航空公司教學材料之十八案例
- 縣級課題研究過程記錄
- 預制場(梁場)建設方案
- 專業(yè)課程融入思政工作的教學設計理念與方法(課堂PPT)
- 安川CDBR系列 制動單元 用戶手冊_圖文
- 公司空白財務報表格模板
- 長沙不動產登記申請書
- 鍋爐拆除施工方案(最新)
評論
0/150
提交評論