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