基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)_第1頁(yè)
基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)_第2頁(yè)
基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)_第3頁(yè)
基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)_第4頁(yè)
基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、推薦精選目次1 緒論21.1 課題研究背景及意義21.2 嵌入式系統(tǒng)的現(xiàn)狀和發(fā)展趨勢(shì)21.3 嵌入式網(wǎng)絡(luò)的關(guān)鍵問題41.4 本論文的主要工作42 ARM嵌入式系統(tǒng)62.1 系統(tǒng)開發(fā)環(huán)境62.2 ARM嵌入式硬件平臺(tái)72.3 搭建ARM嵌入式開發(fā)環(huán)境92.4 PC機(jī)Linux開發(fā)環(huán)境的建立232.5 本章小結(jié)233 ARM嵌入式以太網(wǎng)通信的開發(fā)253.1 OSI網(wǎng)絡(luò)模型253.2 TCP/IP協(xié)議棧的基本概念253.3 TCP協(xié)議基本概念263.4 UDP協(xié)議293.5 本章小結(jié)314 ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)324.1 TCP通信程序設(shè)計(jì)324.2 TCP網(wǎng)絡(luò)程序設(shè)計(jì)流程344.3 T

2、CP服務(wù)器/客戶端網(wǎng)絡(luò)程序的實(shí)現(xiàn)434.4 UDP通信程序設(shè)計(jì)484.5 UDP服務(wù)器/客戶端網(wǎng)絡(luò)程序的實(shí)現(xiàn)534.6 本章小結(jié)56結(jié)論57致謝58參考文獻(xiàn)59附錄 160附錄 263附錄 3661 緒論隨著信息技術(shù)的迅猛發(fā)展,在我們的生活工作中,對(duì)于網(wǎng)絡(luò)通信的要求逐年增高,且隨著移動(dòng)互聯(lián)網(wǎng)絡(luò)的發(fā)展與需求,嵌入式系統(tǒng)與通信網(wǎng)絡(luò),日日夜夜伴隨著我們。嵌入式系統(tǒng)與網(wǎng)絡(luò)技術(shù)融合已經(jīng)是必然的發(fā)展趨勢(shì),當(dāng)嵌入式設(shè)備具有網(wǎng)絡(luò)功能時(shí),人們可以在任何地方、任何時(shí)間、任何平臺(tái)隨時(shí)瀏覽設(shè)備的信息,并進(jìn)行操作和測(cè)試。這是在嵌入式系統(tǒng)在其網(wǎng)絡(luò)性和開放性的發(fā)展趨勢(shì)。1.1 課題研究背景及意義如今,我們的生活與工作中已經(jīng)

3、無法離開網(wǎng)絡(luò)。人們進(jìn)行信息的傳送和交流,之所可以實(shí)時(shí)且效地,恰是因?yàn)橛小靶畔⒏咚俟贰保靶畔⒏咚俟贰钡闹匾尉W(wǎng)就是以太網(wǎng)1?!耙蕴?Ether)”這個(gè)詞,是來源自十九世紀(jì)的物理學(xué)家們假設(shè)出的某種媒介,用以傳播電磁波的輻射。在下,他們認(rèn)為“以太”充斥于世界各處,因此,到后來將“以太”這個(gè)假說引入到計(jì)算機(jī)局域網(wǎng)中,從而用來表現(xiàn)它在通信領(lǐng)域也是無處不在,就像“以太”充斥于世界中那樣普遍存在。以太網(wǎng)可以方便的接入網(wǎng)絡(luò),以太網(wǎng)使用的通信協(xié)議也因?yàn)檫m用性,有著十分優(yōu)異的兼容性。當(dāng)前,在嵌入式系統(tǒng)接入因特網(wǎng)的所有技術(shù)中,被使用最多的局域網(wǎng)通信技術(shù)即是以太網(wǎng)通信。通過以太網(wǎng)可以十分方便地搭建局域網(wǎng),因

4、而能與因特網(wǎng)鏈接。嵌入式系統(tǒng)的開發(fā)與設(shè)計(jì)有了前所未有的空間與機(jī)遇,對(duì)于嵌入式系統(tǒng)的發(fā)展應(yīng)用,任何時(shí)候都有機(jī)會(huì)跨入嵌入式以太網(wǎng)時(shí)代,這些都是需要兩者技術(shù)上的完美融合。只要完成了嵌入式系統(tǒng)與以太網(wǎng)的鏈接,使嵌入式系統(tǒng)發(fā)展成為以太網(wǎng)中單獨(dú)的一個(gè)節(jié)點(diǎn),用戶在節(jié)點(diǎn)可以通過網(wǎng)絡(luò),便捷且低代價(jià)地進(jìn)行數(shù)據(jù)傳輸。所以為了實(shí)現(xiàn)整個(gè)系統(tǒng)的數(shù)據(jù)的傳輸功能,而在嵌入式系統(tǒng)與以太網(wǎng)鏈接的方法上做相應(yīng)的研究,是具有十分重要的經(jīng)濟(jì)價(jià)值和現(xiàn)實(shí)意義的。在這種背景下,本文對(duì)基于ARM的以太網(wǎng)通信的這一問題,進(jìn)行研究與應(yīng)用,具有充分的實(shí)際意義。1.2 嵌入式系統(tǒng)的現(xiàn)狀和發(fā)展趨勢(shì)幾乎電子設(shè)備所有新的生機(jī)都與嵌入式系統(tǒng)的發(fā)展關(guān)系緊密,在

5、電子通信、醫(yī)療衛(wèi)生、輕工業(yè)產(chǎn)品、監(jiān)控安防、消費(fèi)類電子、工業(yè)自動(dòng)化系統(tǒng)等行業(yè)都有重要的嵌入式相關(guān)產(chǎn)品。 尤其是在消費(fèi)電子相關(guān)產(chǎn)業(yè),占有最高的嵌入式系統(tǒng)的產(chǎn)品的市場(chǎng)比重,監(jiān)控安防、電子通信、醫(yī)療衛(wèi)生以及其他領(lǐng)域緊隨其后。近十幾年來,嵌入式系統(tǒng)得到了根本性的發(fā)展。微處理器、微控制器大量在產(chǎn)品中使用,CPU 也從當(dāng)初8 位的單片機(jī)發(fā)展到現(xiàn)在的16位、32位甚至64 位的高端微處理器;從僅具備單一內(nèi)核發(fā)展到提供豐富外設(shè)及接口功能;從幾兆的頻率發(fā)展到現(xiàn)在幾百兆甚至12G 的處理速度。伴隨著CPU性能的不斷攀升,嵌人式系統(tǒng)也具備了文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、圖形界面系統(tǒng)等功能,并形成了以嵌入式操作系統(tǒng)為核心的嵌入式

6、軟件體系。跟隨應(yīng)用程度的不斷加深擴(kuò)大的嵌入式系統(tǒng),全新領(lǐng)域應(yīng)用以及商品化的需求在嵌入式系統(tǒng)軟硬件上面表現(xiàn)出了更高的需求。嵌入式系統(tǒng)不僅僅具有微小性、低功耗、高可靠性的特點(diǎn),還要向高實(shí)時(shí)性、高自適應(yīng)性、易于操作和棋塊化的方向發(fā)展2。總的說來,嵌入式系統(tǒng)在以下幾個(gè)方面將會(huì)有更大的發(fā)展:1. 嵌入式操作系統(tǒng):嵌入式系統(tǒng)剛剛發(fā)展的時(shí)候,軟件系統(tǒng)還是前后臺(tái)方式的系統(tǒng)開發(fā),這種開發(fā)方式也被大多數(shù)人比喻為“裸奔”。前后臺(tái)方式下的軟件系統(tǒng)的實(shí)時(shí)性差、功能單一、代碼不易于維護(hù)等缺點(diǎn)越來越不適應(yīng)嵌入式系統(tǒng)的高速發(fā)展,為此嵌入式操作系統(tǒng)被引人。嵌入式操作系統(tǒng)的使用能夠更加豐富嵌人式系統(tǒng)的功能,使得產(chǎn)品更加穩(wěn)定可靠,

7、多任務(wù)并發(fā)的處理方式也讓系統(tǒng)的實(shí)時(shí)性要求得到滿足,模塊化的編程方式讓產(chǎn)品的可定制性進(jìn)一步增強(qiáng)。當(dāng)前普遍使用的嵌入式的操作系統(tǒng)有Windows CE、C/OS-II、Linux、VxWorks等。這些嵌入式操作系統(tǒng)中當(dāng)屬Linux具有最高的人氣和應(yīng)用潛力,原因是其源代碼公開且具有很好的定制性和可利用性,支持硬件廣泛、安全可靠、擁有眾多的開發(fā)者,另外有一重要原由便是產(chǎn)品生產(chǎn)商們?cè)谘邪l(fā)基于Linux系統(tǒng)的相關(guān)產(chǎn)品時(shí),通常不必為發(fā)行軟件或者生產(chǎn)產(chǎn)品而支付Linux的許可費(fèi)用。目前廣泛應(yīng)用在手機(jī)、PAD等消費(fèi)電子產(chǎn)品上的安卓操作系統(tǒng),便是由Linux的內(nèi)核所開發(fā)出來的。由此可見嵌入式操作系統(tǒng),特別是嵌入

8、式Linux系統(tǒng)應(yīng)用潛力巨大。2.網(wǎng)絡(luò)互連:網(wǎng)絡(luò)技術(shù)已經(jīng)深入到我們生活和工業(yè)生產(chǎn)的各個(gè)領(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ò)通信接口。傳統(tǒng)單片機(jī)的系統(tǒng)對(duì)于網(wǎng)絡(luò)連接有很大欠缺,然而現(xiàn)在的嵌入式處理器,卻擁有了內(nèi)置的網(wǎng)絡(luò)端口,不僅擁有對(duì)TCP/IP協(xié)議的支持外,對(duì)于USB、總線、IEEE1394、藍(lán)牙、或紅外通信接口的支持,擁有上述通信接口中的一項(xiàng)或者多項(xiàng),而且還對(duì)物理層提供其驅(qū)動(dòng)的軟件,以及對(duì)應(yīng)的通訊網(wǎng)的協(xié)議腳本。3.易于操作的人機(jī)界面:嵌入式產(chǎn)品是為人們的生產(chǎn)生活服務(wù)的,如果目

9、前的嵌入式設(shè)備還像以前DOS系統(tǒng)那樣使用命令行操作方式的話,就不會(huì)便于人們使用和操作,那些給我們生產(chǎn)生活帶來方便和事受的電子高科技產(chǎn)品也不會(huì)產(chǎn)生,嵌人式產(chǎn)品被大家使用和接受的程度也將大大降低。嵌入式系統(tǒng)的普及和應(yīng)用離不開億萬(wàn)大眾,嵌入式產(chǎn)品的親和力和人機(jī)互動(dòng)性起著決定性的作用。我們都希望在一套圖形漂亮、直觀簡(jiǎn)潔的界面下,僅僅通過手指點(diǎn)擊就完成我們的操作。蘋果產(chǎn)品的熱賣,平板電腦、智能手機(jī)的普及就充分說明了這點(diǎn)。1.3 嵌入式網(wǎng)絡(luò)的關(guān)鍵問題 在嵌入式網(wǎng)絡(luò)上面,主要關(guān)心如下2部分的問題1. 嵌入式本身的內(nèi)存大小以及其運(yùn)算速度,這些硬件問題需要被考慮,雖然AT91SAM9G20有著較高的主頻,但也要

10、盡量的減少系統(tǒng)開支,達(dá)到最大的效率。2. 搭建合適的平臺(tái)以完成通信,選擇合適的平臺(tái)將大大降低網(wǎng)絡(luò)搭建的工作量,所以依照所需要的功能搭建通信平臺(tái)。1.4 本論文的主要工作本課題通過對(duì)基于ARM嵌入式的以太網(wǎng)通信的研究,主要采用由Atmel公司推出的AT91SAM9G20芯片、DM9161AEP網(wǎng)絡(luò)芯片、Nand Flash等形成設(shè)計(jì)基礎(chǔ),在ARM嵌入式平臺(tái)中移植Linux內(nèi)核,通過Linux操作系統(tǒng)完成TCP/IP、UDP/IP通信的功能,最終在YL-9G20開發(fā)板上進(jìn)行硬件測(cè)試。本文第2章介紹了基于ARM的嵌入式系統(tǒng)硬件平臺(tái),介紹了基于ARM的嵌入式系統(tǒng)硬件平臺(tái)的組成以及開發(fā)平臺(tái)的組建,重要硬

11、件實(shí)現(xiàn)部分的構(gòu)成,囊括相關(guān)芯片的問題進(jìn)行依次進(jìn)行敘述,且對(duì)核心處理器芯片、網(wǎng)絡(luò)控制芯片的內(nèi)部結(jié)構(gòu)、實(shí)現(xiàn)功能以及其工作的原理,分別做了相關(guān)簡(jiǎn)介;以及論述服務(wù)器端的開發(fā)環(huán)境搭建,以及基于ARM的AT91Bootstrap的移植,U-Boot的移植,Linux內(nèi)核配置與根文件系統(tǒng)的移植。本文第3章介紹了以太網(wǎng)通信的基本理論,通過Linux系統(tǒng)實(shí)現(xiàn)TCP/IP、UDP通信協(xié)議,體現(xiàn)了Linux操作系統(tǒng)實(shí)現(xiàn)網(wǎng)絡(luò)通信的技術(shù)優(yōu)勢(shì),分別講述協(xié)議棧中ARP、IP、ICMP、TCP、UDP協(xié)議的實(shí)現(xiàn)過程,同時(shí)也介紹了協(xié)議棧與底層設(shè)備及應(yīng)用層的接口設(shè)計(jì)。最后介紹了運(yùn)用socket套接字接口進(jìn)行網(wǎng)絡(luò)程序編寫的流程。本

12、文第4章介紹了基于ARM嵌入式的以太網(wǎng)通信程序的設(shè)計(jì)。論述了TCP、UDP網(wǎng)絡(luò)編程,且在服務(wù)器和客戶端測(cè)試TCP、UDP通信,實(shí)現(xiàn)基于ARM嵌入式的以太網(wǎng)通信功能,完成通信程序的編寫。2 ARM嵌入式系統(tǒng)目前,嵌入式系統(tǒng)相關(guān)技術(shù)已經(jīng)在工業(yè)系統(tǒng)、個(gè)人消費(fèi)電子產(chǎn)品、工業(yè)系統(tǒng)、智能家居等領(lǐng)域有著良好發(fā)展,其中多數(shù)伴隨嵌入式系統(tǒng)產(chǎn)品的就是其嵌入式網(wǎng)絡(luò)系統(tǒng)的開發(fā),ARM嵌入式微處理器一般具有如下特點(diǎn):體積小、低功耗、低成本、高性能;支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件3。本章,主要講述嵌入式系統(tǒng)的硬件平臺(tái)模塊以及發(fā)開環(huán)境。2.1 系統(tǒng)開發(fā)環(huán)境系統(tǒng)開發(fā)環(huán)境主要由

13、硬件部分包括計(jì)算機(jī)、ARM9開發(fā)板、網(wǎng)絡(luò)設(shè)備;軟件中包含:嵌入式Linux的開發(fā)環(huán)境以及相關(guān)設(shè)備驅(qū)動(dòng)、SecureCRT組成。軟件部分的工作均在計(jì)算機(jī)PC(Personal Computer)上完成,嵌入式Linux開發(fā)環(huán)境負(fù)責(zé)程序的開發(fā)和調(diào)試,SecureCRT可以打印串口輸出的數(shù)據(jù),以及通過串口向開發(fā)板發(fā)送數(shù)據(jù)。ARM嵌入式系統(tǒng)的開發(fā)環(huán)境如下圖 2.1 所示。圖2.1 系統(tǒng)開發(fā)環(huán)境圖PC機(jī)提供了程序編寫開發(fā)和調(diào)試的平臺(tái),搭載了Linux操作系統(tǒng)的開發(fā)環(huán)境和SecureCRT串口調(diào)試工具,完成嵌入式Linux系統(tǒng)的移植以及相關(guān)環(huán)境的搭建、程序的編寫以及調(diào)試的功能。通過串口和USB接口連接開發(fā)

14、板,在PC機(jī)上進(jìn)行對(duì)開發(fā)板的相關(guān)操作,通過以太網(wǎng)口完成PC機(jī)與開發(fā)板中的網(wǎng)絡(luò)芯片的以太網(wǎng)通信的硬件連接,實(shí)現(xiàn)以太網(wǎng)通信。2.2 ARM嵌入式硬件平臺(tái)硬件系統(tǒng)是ARM嵌入式系統(tǒng)一切的根本,實(shí)現(xiàn)產(chǎn)品的基礎(chǔ)就是硬件平臺(tái),實(shí)現(xiàn)產(chǎn)品的附加服務(wù),則需要軟件的幫助。為了實(shí)現(xiàn)本文的目標(biāo) - 基于ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì),我第一步要做的就是進(jìn)行對(duì)ARM嵌入式系統(tǒng)硬件的學(xué)習(xí)和了解,所以在下面幾節(jié)對(duì)于ARM嵌入式系統(tǒng)的硬件平臺(tái)結(jié)構(gòu)以及關(guān)鍵器件芯片進(jìn)行介紹。2.2.1 嵌入式硬件平臺(tái)結(jié)構(gòu)由上一節(jié)圖2.1可以看出,ARM嵌入式平臺(tái)需要通過以太網(wǎng)網(wǎng)絡(luò)芯片和以太網(wǎng)口完成網(wǎng)絡(luò)的聯(lián)通;以及需要USB和串口對(duì)程序和內(nèi)核等

15、進(jìn)行下載燒寫以及調(diào)試;同時(shí),我們還需要存儲(chǔ)部分以及實(shí)時(shí)時(shí)鐘來提供支持,當(dāng)然電源模塊為整個(gè)ARM嵌入式開發(fā)平臺(tái)提供運(yùn)行的保障 。如圖2.2 所示為本文所需的ARM嵌入式系統(tǒng)的硬件結(jié)構(gòu)。圖 2.2 ARM嵌入式平臺(tái)硬件結(jié)構(gòu)通過RJ45連接到PC機(jī),在完成前期工作后,通過設(shè)置端口,運(yùn)行服務(wù)器端(PC機(jī))和客戶端(ARM嵌入式平臺(tái))中的網(wǎng)絡(luò)程序即可實(shí)現(xiàn)TCP或UDP協(xié)議的通信。2.2.2 嵌入式處理器在嵌入式系統(tǒng)中,處理器依照其性能高低分別為嵌入式微控制器以及嵌入式微處理器。在一些低端如:簡(jiǎn)單運(yùn)算處理、邏輯控制、IO控制等場(chǎng)合中,通常使用微控制器,這些微控制器大多是16位或8位的。而在應(yīng)用一些復(fù)雜運(yùn)算

16、、有處理速度需求且實(shí)時(shí)性要求的場(chǎng)合中,使用的處理器多是32位甚是64位的微處理器。從2.1.1節(jié)的硬件結(jié)構(gòu)可以看出,我們需要完成通信和數(shù)據(jù)處理的相關(guān)任務(wù),要求處理器具有較快的處理速度,然而處理器的系統(tǒng)時(shí)鐘對(duì)處理速度起決定性作用。本文使用的ARM嵌入式硬件平臺(tái)使用的處理器AT91SAM9G20,Atmel公司的AT91SAM9G20芯片主頻達(dá)400MHz,完全滿足應(yīng)用需求4。AT91SAM9G20微處理器基于ARM926EJ-S處理器核心內(nèi)核,包含3個(gè)32位并行的I/O控制器,可控制SDRAM以及包括Nand Flash在內(nèi)的靜態(tài)存儲(chǔ)器。如圖2.3為該處理器的結(jié)構(gòu)圖。圖2.3 AT91SAM9G

17、20結(jié)構(gòu)圖2.2.3 網(wǎng)絡(luò)芯片時(shí)今網(wǎng)絡(luò)硬、軟件技術(shù)的快速發(fā)展使得網(wǎng)絡(luò)設(shè)備的應(yīng)用呈現(xiàn)大幅增長(zhǎng)的態(tài)勢(shì)??刂聘黝悆x器儀表、智能家電、消費(fèi)電子產(chǎn)品、工業(yè)生產(chǎn)中的設(shè)備,以及它們相關(guān)數(shù)據(jù)采集的設(shè)備都開始了網(wǎng)絡(luò)化,在Internet中共享及獲取資源,從而進(jìn)一步方便我們的工作和生活。以太網(wǎng)通信,顧名思義,我們需要實(shí)現(xiàn)網(wǎng)絡(luò)連接,也就離不開網(wǎng)絡(luò)控制芯片。在我完成設(shè)計(jì)的過程中,必要解決的就是硬件平臺(tái)同以太網(wǎng)的通信問題。本文中使用的ARM嵌入式平臺(tái)采用了DM9161系列的網(wǎng)絡(luò)控制芯片DM9161AEP,DM9161AEP的結(jié)構(gòu)圖如圖2.4所示。DM9161AEP的芯片特點(diǎn)如下所示:1.48pin LQFP封裝2.工藝

18、:0.25m,輸入輸出供電電壓3.3V,模擬部分2.5V3.支持MII和RMII連接方式(推薦使用MII)4.支持雙絞線自適應(yīng)(AUTO-mix)5.支持TCP/IP硬加速6.與大部分廠家的微控制器是完全兼容。使用的單口PHY。圖 2.4 DM9161AEP 結(jié)構(gòu)圖 2.3 搭建ARM嵌入式開發(fā)環(huán)境在上面介紹完ARM嵌入式系統(tǒng)的硬件平臺(tái),展開了軟件方面的工作。對(duì)于嵌入式系統(tǒng)的軟件開發(fā)來說,需要完成建立交叉編譯工具;由于嵌入式系統(tǒng)所使用的芯片型號(hào)多種多樣,很多芯片和硬件接口不能直接兼容6,我們需要完成移植的工作:AT91Bootstarp移植,U-Boot移植與燒寫,Linux內(nèi)核移植與燒寫,根

19、文件系統(tǒng)移植與燒寫,PC機(jī)上開發(fā)環(huán)境的建立等任務(wù)。2.3.1 嵌入式Linux簡(jiǎn)介L(zhǎng)inux最早是由Linus Torvalds所創(chuàng)建的,經(jīng)過20年時(shí)間的發(fā)展,Linux已經(jīng)成為一個(gè)有著強(qiáng)大功能且穩(wěn)定可靠的OS。經(jīng)過對(duì)原有的Linux操作系統(tǒng)進(jìn)行調(diào)整和剪裁,形成了可在嵌入式平臺(tái)運(yùn)行的嵌入式Linux操作系統(tǒng)。嵌入式Linux操作系統(tǒng)擁有嵌入式操作系統(tǒng)的全部特征,同時(shí)保留了十分豐富的開放的源代碼,所以應(yīng)用在嵌入式系統(tǒng)中是越來越普遍。嵌入式Linux操作系統(tǒng)與其它嵌入式操作系統(tǒng)相比具有以下特點(diǎn):1. 開放源代碼。Linux最大的特點(diǎn)就是源代碼公開并且執(zhí)行GPL協(xié)議,嵌入式Linux開發(fā)人員根據(jù)自己

20、產(chǎn)品的需求可以更改內(nèi)核源碼來滿足功能使用;不存在黑箱技術(shù),遍布全球的眾多Linux愛好者又是Linux開發(fā)的強(qiáng)大技術(shù)后盾5。2. 可裁剪、高效率的微小內(nèi)核。Linux小內(nèi)核、高效率,內(nèi)核的更新速度快而且可以被定制。它的系統(tǒng)內(nèi)核最小可以到134KB,這么優(yōu)秀的內(nèi)核設(shè)計(jì)可以使系統(tǒng)的僅僅占據(jù)更小的資源便可以可靠且穩(wěn)定的運(yùn)行。獨(dú)特的模塊機(jī)制可以將用戶的驅(qū)動(dòng)或者應(yīng)用程序模塊動(dòng)態(tài)的從內(nèi)核中插入或卸載。3. 免費(fèi)。產(chǎn)品制造生產(chǎn)商在開發(fā)完基于嵌入式Linux的產(chǎn)品以后無需為產(chǎn)品的發(fā)布支付相關(guān)的許可費(fèi)。4. 支持眾多硬件。嵌入式Linux操作系統(tǒng)可以支持多種處理器和多種硬件體系,是一種可以跨越平臺(tái)的操作系統(tǒng)。5

21、. 安全、可靠。嵌入式Linux十分可靠,可以毫無故障的運(yùn)行數(shù)年,一直廣泛被數(shù)據(jù)中心所應(yīng)用。與此同時(shí),嵌入式Linux的開發(fā)人員還可以使用systrace或者grsecurity此類的工具來加強(qiáng)其安全性,這是Windows操作系統(tǒng)開發(fā)者無法想象的。6. 優(yōu)秀的網(wǎng)路功能。嵌入式Linux在網(wǎng)絡(luò)方面有著十分完整的內(nèi)核結(jié)構(gòu),Linux對(duì)網(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ā)。嵌入式Linux的應(yīng)用,主要在數(shù)字電話、機(jī)頂盒、視頻通信、數(shù)據(jù)網(wǎng)絡(luò)、以太網(wǎng)交換機(jī)、Hub、遠(yuǎn)

22、程通信、網(wǎng)橋、醫(yī)療電子、信息家電、PDA、工業(yè)等領(lǐng)域??梢哉f嵌入式Linux在民用還是工用范疇都有著普遍應(yīng)用,當(dāng)前很多平板電腦和智能手機(jī)采用的安卓也是采用Linux的內(nèi)核。2.3.2 ARM嵌入式系統(tǒng)一般的開發(fā)方法與多數(shù)常見的桌面軟件的開發(fā)所不同,當(dāng)嵌入式軟件開發(fā)人員開發(fā)一個(gè)基于嵌入式系統(tǒng)的應(yīng)用時(shí),首先會(huì)在PC機(jī)上選擇合適的嵌入式開發(fā)環(huán)境并且進(jìn)行軟件開發(fā),然后在實(shí)驗(yàn)板或者開發(fā)平臺(tái)上對(duì)其代碼進(jìn)行測(cè)試,最后PC機(jī)編譯生成正確的映像文件或者可執(zhí)行的文件,并且燒寫到最終的目標(biāo)產(chǎn)品中,如圖2.5所示。圖 2.5 ARM嵌入式系統(tǒng)開發(fā)的一般方法對(duì)于ARM嵌入式平臺(tái)的Linux軟件開發(fā)一般步驟如下:1. P

23、C機(jī)的開發(fā)環(huán)境選擇。這里本文選擇的是Fedora 14 系統(tǒng)。通過在Windows系統(tǒng)中的虛擬機(jī)來安裝Fedora 14操作系統(tǒng),便于調(diào)試。2. 建立交叉編譯工具:Fedora 14自帶的GCC都是針對(duì)x86架構(gòu)的,為了可以讓編寫的代碼在開發(fā)板或者最終產(chǎn)品上良好運(yùn)行,建立交叉編譯工具是所必須條件。3. 開發(fā)、移植Bootloader。4. 配置、燒寫U-Boot。5. 配置、移植Linux內(nèi)核。6. 建立根文件系統(tǒng)。7. 開發(fā)程序。2.3.3 嵌入式Linux交叉編譯環(huán)境的建立嵌入式系統(tǒng)的硬件性能和其存儲(chǔ)空間有限,因此,在對(duì)程序進(jìn)行開發(fā)的時(shí)候都是在PC機(jī)上進(jìn)行操作,首先建立一個(gè)用于開發(fā)板的交叉

24、編譯工具,用其在PC機(jī)上編譯程序用于開發(fā)板??梢钥闯?,可以在一個(gè)系統(tǒng)平臺(tái)中編譯出能夠運(yùn)行在不同的體系架構(gòu)上的代碼,這就是交叉編譯。比如在處理器架構(gòu)為x86的微機(jī)中編譯出可以運(yùn)行在ARM嵌入式中的代碼。若使用桌面級(jí)編譯環(huán)境,則無法生成在ARM平臺(tái)上運(yùn)行的程序代碼。在PC機(jī)Linux系統(tǒng)下利用GCC編譯程序,這樣的編譯方法稱之為本地編譯,本地編譯的代碼只能夠在本地運(yùn)行。與本地編譯相對(duì)應(yīng)的,即是上面所介紹的交叉編譯,通過交叉編譯器可以編譯出這種跨平臺(tái)程序。采用arm-linux-gcc-4.3.2版本的交叉編譯工具,通過網(wǎng)絡(luò)下載到的文件解壓到個(gè)人目錄中。隨后由終端進(jìn)入解壓后生成的/usr/local

25、/目錄中,將目錄下的arm目錄整體復(fù)制到系統(tǒng)文件根目錄/usr/local/下面。然后所有交叉編譯工具都存儲(chǔ)在其中,如圖2.6所示。圖2.6 交叉編譯工具 arm-linux-gcc-4.3.2然后更改環(huán)境變量PATH的函數(shù),將統(tǒng)一存儲(chǔ)的交叉編譯工具的路徑目錄添加到其中。在終端中對(duì)PATH進(jìn)行修改,鍵入:#export PATH = /usr/local/arm/4.3.2/bin: $PATH繼而檢查是否正確添加路徑到PATH中,鍵入:#echo $PATH如圖2.7所示,可以看到,有顯示包含有交叉編譯工具的路徑,說明已完成添加新路徑至PATH。至此,已經(jīng)完成交叉編譯環(huán)境的搭建。圖2.7 添

26、加交叉編譯工具環(huán)境變量2.3.4 開發(fā)、移植AT91Bootstrap在AT91SAM9G20芯片內(nèi)部含有一個(gè)BootRom代碼。當(dāng)沒有燒寫任何Bootloader和內(nèi)核文件的情況之下給芯片上電啟動(dòng),通過串口調(diào)試工具(本文使用SecureCRT)可以看到串口是有打印消息的,顯示的內(nèi)容為“RomBoot”,此RomBoot代碼是Atmel廠商定制在芯片中的,人為不能對(duì)其作修改。作為ARM嵌入式開發(fā)人員,在啟動(dòng)代碼的編寫、修改和學(xué)習(xí)中,AT91Bootstrap是最先面對(duì)的環(huán)節(jié)。AT91Bootstrap它的主要作用即是對(duì)SDRAM初始化以及相關(guān)的存儲(chǔ)器(Nand Flash)初始化,然后加載U-

27、Boot到SDRAM中的指定字節(jié)并開始運(yùn)行U-Boot。AT91Bootstrap源代碼由公共的硬件驅(qū)動(dòng)、頭文件以及庫(kù)文件等組成。首先,解壓下載的AT91Bootstrap,在終端中輸入:#unzip AT91Boostrap1.13.zip解壓后,在當(dāng)前目錄下生成AT91Bootstrap目錄。進(jìn)入相應(yīng)9g20源碼區(qū),修改編譯工具的路徑,打開其文件夾,使用vi進(jìn)行函數(shù)修改此時(shí),可以直接編譯,在源目錄下執(zhí)行“make”指令。編譯過后可在該目錄下看到nandflash_at91sam9g20ek.bin文件,如圖2.8所示。#cd /home/dietrich/Bootstrap-v1.13/b

28、oard/at91sam9g20ek/nandflash#make圖2.8 make編譯后生成bin文件在這里就完成了ARM嵌入式系統(tǒng)的Bootstrap編譯,接下來使用SAM-BA2.8燒寫生成的.bin文件至Nand Flash內(nèi)存的起始地址處,即0x0,也就是處理器啟動(dòng)以后首先要從NandFlash上的)0x0地址位上讀取AT91Bootstrap且開始運(yùn)行,這也說明在啟動(dòng)代碼中,AT91Bootstrap是第一部分。2.3.5 U-Boot移植與燒寫U-Boot的編譯形式、源碼目錄都喝Linux的內(nèi)很很相似。實(shí)際上,很多U-Boot源代碼就是通過對(duì)應(yīng)的Linux系統(tǒng)內(nèi)核弱化而來,特別是

29、很多設(shè)備驅(qū)動(dòng)程序??梢栽赨-Boot源代碼的注釋行中有很多表現(xiàn)。隨著U-Boot版本不斷的升級(jí),其所支持的硬件資源和系統(tǒng)資源也是越來越豐富。U-Boot有著諸多優(yōu)點(diǎn):源代碼開放、對(duì)很多系列的處理器支持、對(duì)很多嵌入式OS內(nèi)核支持、十分靈活的功能設(shè)置、優(yōu)異的穩(wěn)定以及可靠性、多種設(shè)備的驅(qū)動(dòng)源代碼以及對(duì)網(wǎng)絡(luò)的強(qiáng)大支持。正是因?yàn)檫@些特點(diǎn)使得U-Boot被越來越多的嵌入式操作系統(tǒng)所應(yīng)用,也有著更好的使用前景。U-Boot啟動(dòng)并且引導(dǎo)Linux內(nèi)核這一過程可以分為兩個(gè)階段,第一個(gè)階段即為實(shí)現(xiàn)設(shè)備的初始化,絕大多數(shù)是采用匯編語(yǔ)言所編寫來達(dá)到目的的;第二個(gè)階段則是采用C語(yǔ)言編寫,可讀性強(qiáng),并可實(shí)現(xiàn)相對(duì)復(fù)雜的功能

30、。兩個(gè)階段實(shí)現(xiàn)的功能如下:1.第一階段功能:設(shè)置異常項(xiàng)和異常處理函數(shù);- 設(shè)置控制寄存器地址;- 關(guān)閉著門狗和屏蔽中斷;- 配置PLLCO飛等寄存器,確定系統(tǒng)的主頻;- 關(guān)閉MMU功能;- 初始化RAM控制寄存器;- 拷貝數(shù)據(jù)至SDRAM;- 設(shè)置堆攏;- 消除BSS段;- 跳轉(zhuǎn)到第二階段代碼人口。2.第二階段功能:- 初始化本階段所涉及的硬件設(shè)備;- 設(shè)置SDRAM的起始地址和大??;- 讀取內(nèi)核到RAM 中;- 為內(nèi)核設(shè)置啟動(dòng)參數(shù);- 調(diào)用內(nèi)核??梢詮木W(wǎng)絡(luò)上下載U-Boot。本文采用的版本是1.3.4。在終端中使用解壓命令將U-Boot-1.3.4.tar.bz2壓縮文件在個(gè)人文件夾內(nèi)進(jìn)行解

31、壓操作,然后進(jìn)入生成的u-boot-1.3.4目錄對(duì)Makefile文件進(jìn)行修改,將CROSS_COMPILE變量修改為編譯器所在目錄(本文2.2.3節(jié))。保存退出vi后對(duì)U-Boot進(jìn)行make編譯,即可在文件目錄下生成我們需要的二進(jìn)制.bin文件。圖2.9 編譯后生成的bin文件燒寫U-Boot的方法仍然與上一節(jié)燒寫AT91SAM9G20相同,如圖2.10所示,也是通過SAM-BA軟件。不過需要注意的是燒寫起始地址應(yīng)為NandFlash的0x200000地址處,然后Send File開始燒寫u-boot.bin。圖2.10 燒寫U-Boot.bin2.3.6 嵌入式Linux內(nèi)核的移植及燒

32、寫嵌入式Linux內(nèi)核在本文中選擇Linux-2.6.27這個(gè)一個(gè)版本,解壓Linux-2.6.27.tar.bz2壓縮文件,可以觀察到源碼包內(nèi)有相當(dāng)多的文件和目錄,為了掌握Linux內(nèi)核的移植方法,了解其結(jié)構(gòu)很有必要的。Linux-2.6.27內(nèi)核包中一共有20個(gè)文件夾,有很多都與本文無關(guān),不做介紹,下面只介紹最為重要的7個(gè)文件目錄:1. arch目錄。arch子目錄包括了和硬件體系相關(guān)的核心代碼。它的每一個(gè)子目錄都是代表一種可以支持的硬件體系結(jié)構(gòu),例如i386 就是關(guān)于Intel CPU 及與之相兼容體系結(jié)構(gòu)的子目錄(PC 機(jī)一般都基于此目錄)。其中的arm 目錄是我們需要特別關(guān)心的,里面

33、包含的是基于ARM處理器的體系結(jié)構(gòu),是本文對(duì)Linux 進(jìn)行移植所需用到的目錄。2. drivers目錄。drivers 子目錄里面是Linux系統(tǒng)所支持的硬件設(shè)備驅(qū)動(dòng)程序;每種驅(qū)動(dòng)程序各占用一個(gè)下級(jí)子目錄,如/usb目錄下為通用串行總線USB設(shè)備驅(qū)動(dòng)程序。對(duì)drivers/block/這個(gè)目錄下的genhd.c文件進(jìn)行查看,其中的device_setup()函數(shù)可以了解設(shè)備初始化的過程。3. fs目錄。fs子目錄包含的是所有文件系統(tǒng)和各種類型的文件操作代碼,此目錄包含用于配置核心的腳本文件等。4. kenerl目錄。此目錄內(nèi)為核心代碼,包含了進(jìn)程通信、進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)等在內(nèi)的

34、Linux系統(tǒng)大多數(shù)的內(nèi)核函數(shù)。5. include 目錄。include 子目錄包括編譯核心所需要的大部分頭文件。6. init 目錄。這個(gè)目錄內(nèi)包含初始化代碼。7. lib 目錄。lib 子目錄里面包含Linux 內(nèi)核庫(kù)函數(shù)代碼。在Linux 內(nèi)核源碼的根目錄下還有一個(gè)文件需要特別注意,就是“Makefile文件”。它是Linux內(nèi)核里面的第一個(gè)Makefile文件,其主要用來聯(lián)系內(nèi)核的各個(gè)模塊,保存各種模塊互相間的承接關(guān)系以及連接,在進(jìn)行內(nèi)核編譯的時(shí)候需要修改這個(gè)文件。對(duì)Linux內(nèi)核的配置修改,是移植Linux內(nèi)核的流程中所做的第一步,亦是相當(dāng)重要且十分繁雜的一步。內(nèi)核配置相當(dāng)繁雜,有

35、3000條左右需要配置,掌握一些方法可以降低工作的難度。在內(nèi)核源代碼/arch/arm/configs目錄中的配置文件可以看出Linux內(nèi)核所支持的硬件都有哪些,在這里本文使用的ARM嵌入式硬件平臺(tái)與Linux內(nèi)核中提供的AT91SAM9G20EK很匹配,所以在配置內(nèi)核的過程中可以直接加載AT91SAM9G20EK這個(gè)配置文件,然后在這個(gè)配置文件的基礎(chǔ)上再做修改就可以了。這樣大大的提高了內(nèi)核的配置效率和準(zhǔn)確度。在Linux內(nèi)核的配置上,需要對(duì)文件系統(tǒng)、雜項(xiàng)、網(wǎng)絡(luò)設(shè)備支持、設(shè)備驅(qū)動(dòng)等進(jìn)行設(shè)置,第一次設(shè)置之前需要在終端里清除設(shè)置,以免出錯(cuò)。通過make menuconfig。如圖2.11所示進(jìn)入配

36、置菜單界面。圖2.11 Linux內(nèi)核配置界面進(jìn)入File systems文件系統(tǒng)選項(xiàng),如圖2.12所示,從雜項(xiàng)文件系統(tǒng)中查看是否支持cramfs文件系統(tǒng)(本文使用的文件系統(tǒng))。圖2.12 cramfs文件系統(tǒng)支持然后進(jìn)入Device Drivers選項(xiàng)中的網(wǎng)絡(luò)設(shè)備支持。如圖2.13所示然后進(jìn)入圖 2.13 網(wǎng)絡(luò)芯片驅(qū)動(dòng)支持Ethernet(10 or 100Mbit)選項(xiàng),選擇需要的網(wǎng)絡(luò)芯片的驅(qū)動(dòng),進(jìn)行添加。最后退出配置界面并且保存設(shè)置,即完成Linux內(nèi)核的配置。然后在終端進(jìn)入Linux內(nèi)核源碼的目錄下,為了防止編譯報(bào)錯(cuò),執(zhí)行make clean 清除之前生成的過程文件。然后執(zhí)行make

37、uImage,如圖2.14所示生成zImage鏡像文件。圖2.14 編譯生成的內(nèi)核鏡像文件然而,還需要使用mkimage工具去編譯內(nèi)核文件,可以將其放在/usr/bin文件夾中,這樣可以直接編譯生成uImage。然后燒寫內(nèi)核文件,同之前一樣,也是利用SAM-BA軟件。在燒寫完成AT91Bootstrap以及U-Boot后繼續(xù)燒寫uImage內(nèi)核。但是還要注意燒寫的目的地址為0xA0000。然后開始下載內(nèi)核鏡像文件uImage到Nand Flash中。2.3.7 根文件系統(tǒng)的移植Linux必須在硬件的一個(gè)分區(qū)上存放系統(tǒng)啟動(dòng)所必需的一些文件7,即根文件系統(tǒng),它是嵌入式Linux組成中一個(gè)特別重要的

38、組成,它是嵌入式Linux運(yùn)行里所必須的,Linux內(nèi)核運(yùn)行以后,會(huì)自動(dòng)尋找并且掛載自己的根文件系統(tǒng),然后執(zhí)行根文件系統(tǒng)中的可執(zhí)行文件或啟動(dòng)腳本,嵌入式Linux的應(yīng)用程序在經(jīng)過交叉編譯后,生成的可執(zhí)行文件也是需要放在根文件系統(tǒng)里的。CramFS是本文所采用的根文件系統(tǒng),它是一個(gè)壓縮式的、十分小且簡(jiǎn)單的文件系統(tǒng)。首先在用戶文件夾創(chuàng)立一個(gè)名為cramfs的目錄,并且將根文件掛載到目錄下,將根文件系統(tǒng)和cramfs相對(duì)應(yīng)。然后通過mkcramfs工具再次打包,形成新的根文件。如圖2.15所示。圖2.15 生成根文件系統(tǒng)燒寫根文件系統(tǒng)與前面的Linux內(nèi)核、U-Boot、AT91Bootstrap不

39、同,本文使用tftp的方式燒寫根文件系統(tǒng),因?yàn)楦募到y(tǒng)可以做到很大,采用串口或并口傳輸會(huì)很慢,通過網(wǎng)線使用tftp的方式燒寫要快捷很多。如圖2.16所示,windows下的tftp界面。設(shè)置configure中的Home Directory為當(dāng)前存放根文件映象的目錄,網(wǎng)線連接開發(fā)板,上電,點(diǎn)擊軟件中的Start可以看到左下角顯示Server is running,表示tftp服務(wù)器運(yùn)行正常,設(shè)置完畢。圖2.16 tftp啟動(dòng)界面啟動(dòng)串口調(diào)試終端軟件SecureCRT,接下來重新給開發(fā)板上電,在等待進(jìn)入U(xiǎn)-Boot倒計(jì)時(shí)的時(shí)候按住空格鍵,直接進(jìn)入Boot界面,在這個(gè)U-Boot中設(shè)置tftp的

40、服務(wù)器(PC虛擬機(jī)上Fedora)及客戶端(開發(fā)板)的IP地址。如圖2.17所示。圖2.17 設(shè)置TFTP服務(wù)器及客戶端的IP通過U-Boot命令下載根文件系統(tǒng)鏡像到目標(biāo)板內(nèi)存中,如圖2.18所示,燒寫根文件到內(nèi)存地址0x20000000處。同時(shí)把內(nèi)存中的根文件系統(tǒng)鏡像復(fù)制至Nand Flash,從而完成對(duì)ARM嵌入式的根文件系統(tǒng)的燒寫。圖2.18 在boot通過tftp燒寫根文件系統(tǒng)2.4 PC機(jī)Linux開發(fā)環(huán)境的建立在之前,已經(jīng)安裝了交叉編譯的環(huán)境,本應(yīng)屬于本節(jié)的內(nèi)容,但編譯內(nèi)核、U-boot等都對(duì)其有需要,所以不在本節(jié)敘述。對(duì)于程序開發(fā)的環(huán)境,本文使用集成開發(fā)環(huán)境Eclipse。Ecl

41、ipse集成開發(fā)環(huán)境僅僅只是個(gè)平臺(tái)框架,不過各種插件對(duì)其支持從而使得其獲得別的功能單一IDE工具難以比擬的靈活性。選擇Eclipse還有一點(diǎn),即是Eclipse的圖形界面的開發(fā)方式和其良好的框架設(shè)計(jì)體系。這對(duì)習(xí)慣Windows圖形界面下開發(fā)方式的人員來說要方便許多。在Fedora14系統(tǒng)中,在安裝時(shí)選擇全部安裝,在安裝完畢以后,可以直接在程序里的編程目錄中直接啟動(dòng)Eclipse。如圖2.19所示Eclipse的工作界面。圖2.19 Eclipse工作界面對(duì)于Eclipse的的使用,本文將在第4章嵌入式通信程序的設(shè)計(jì)中給予說明。2.5 本章小結(jié)本章介紹了ARM嵌入式Linux構(gòu)建的相關(guān)知識(shí),也是

42、進(jìn)行ARM嵌入式以太網(wǎng)通信程序開發(fā)首先要面對(duì)的工作,具體涉及啟動(dòng)代碼、內(nèi)核、根文件系統(tǒng)的編譯和配置、PC宿主機(jī)開發(fā)環(huán)境的搭建以及Eclipse軟件的應(yīng)用。完成了AT91Bootstrap、U-Boot、Kernle、CramFS 的編譯和配置。在編譯過程中會(huì)出現(xiàn)的問題本章也做了說明并提出了解決辦法。這部分知識(shí)具有一定的通用性,其中Eclipse是進(jìn)行代碼調(diào)試常有效的軟件平臺(tái),熟練掌握后可以很有效地進(jìn)行嵌入式linux代碼的編寫和在線仿真調(diào)試。3 ARM嵌入式以太網(wǎng)通信的開發(fā)Linux系統(tǒng)的一個(gè)主要特點(diǎn)是它強(qiáng)大的網(wǎng)絡(luò)支持功能,它在網(wǎng)絡(luò)方面的應(yīng)用也越來越廣泛。本章敘述了TCP/IP 協(xié)議和Linu

43、x 網(wǎng)絡(luò)開發(fā)的基礎(chǔ)知識(shí),本章是下一章TCP服務(wù)器、TCP客戶端開發(fā),UDP服務(wù)器以及UDP客戶端開發(fā)程序設(shè)計(jì)的理論基礎(chǔ)。3.1 OSI網(wǎng)絡(luò)模型網(wǎng)絡(luò)結(jié)構(gòu)的標(biāo)準(zhǔn)模型是OSI模型。它是很多網(wǎng)絡(luò)協(xié)議模型的基礎(chǔ),目前大多數(shù)的網(wǎng)絡(luò)通信協(xié)議都是基于這個(gè)模型建立起來的,這種分層的思想在很多領(lǐng)域中都得到了廣泛地應(yīng)用。OSI協(xié)議參考模型從上到下共分為7層,分別是:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層及物理層。OSI七層網(wǎng)絡(luò)模型及其功能如表3.1所列。表3.1 OSI 7層網(wǎng)絡(luò)模型OSI層功能應(yīng)用層 文件傳輸,電子郵件、虛擬終端 表示層 數(shù)據(jù)格式化、代碼轉(zhuǎn)換、數(shù)據(jù)加密 會(huì)話層 解除或建立與別的節(jié)點(diǎn)的聯(lián)

44、系 傳輸層 提供端對(duì)端的通信接口 網(wǎng)絡(luò)層 為數(shù)據(jù)包選擇路由 數(shù)據(jù)鏈路層 傳輸有地址的幀以及錯(cuò)誤檢測(cè)功能 物理層 以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) 在OSI七層網(wǎng)絡(luò)模型中,各層之間的規(guī)則是相互獨(dú)立的,每層通過下一層的數(shù)據(jù)為上一層提供服務(wù),不同主機(jī)相同層次之間是對(duì)等的,每一層都規(guī)定了不同的特性并完成不同的功能。3.2 TCP/IP協(xié)議棧的基本概念上節(jié)中簡(jiǎn)單介紹了國(guó)際互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織推薦的OSI網(wǎng)絡(luò)模型,但OSI模型過于龐大且較為復(fù)雜,具體實(shí)現(xiàn)有很多困難。在實(shí)際應(yīng)用中,TCP/IP是網(wǎng)絡(luò)中使用的基本通信協(xié)議。TCP/IP 的協(xié)議參考和OSI協(xié)議的對(duì)應(yīng)關(guān)系如圖3.1所示。圖3.1 OSI七層模型與

45、TCP/IP四層模型對(duì)照?qǐng)D目前有很多種實(shí)現(xiàn)的方式,比如串行線路(Serial Line IP, SLIP)、點(diǎn)對(duì)點(diǎn)P2P等。在以太網(wǎng)應(yīng)用中,該層網(wǎng)絡(luò)在IP數(shù)據(jù)的基礎(chǔ)上增加了一共14個(gè)字節(jié)的報(bào)頭,這14個(gè)字節(jié)被稱為以太網(wǎng)報(bào)頭,其數(shù)據(jù)格式如圖3.2 所示。圖3.2 以太網(wǎng)數(shù)據(jù)格式3.3 TCP協(xié)議基本概念TCP協(xié)議建立在不可靠的網(wǎng)絡(luò)層IP協(xié)議之上,在IP協(xié)議的基礎(chǔ)上,增加了確認(rèn)重發(fā)、超時(shí)重傳、流量控制等機(jī)制,實(shí)現(xiàn)了一種面向連接的傳輸協(xié)議。建立好連接后,雙方便均可收發(fā)信息直到連接斷開7。TCP協(xié)議是在IP協(xié)議的基礎(chǔ)上進(jìn)行數(shù)據(jù)傳輸?shù)模琓CP數(shù)據(jù)在IP報(bào)文中的位置如圖3.3所示。圖3.3 TCP數(shù)據(jù)在I

46、P報(bào)文中的位置3.3.1 建立與斷開TCP連接主機(jī)A 與主機(jī)B 要想通過TCP協(xié)議進(jìn)行通信,需要通過3個(gè)報(bào)文段完成TCP連接的建立,這個(gè)過程稱為三次握手(three-way handshake),即對(duì)每次發(fā)送的數(shù)據(jù)量是怎樣跟蹤進(jìn)行協(xié)商使數(shù)據(jù)段的發(fā)送和接收同步8,如圖3.4所示。TCP 連接的建立需要雙方發(fā)送自己的同步SYN信息給對(duì)方,在SYN中包含了末端初始化的數(shù)據(jù)序號(hào),并且需要收到對(duì)方對(duì)自身發(fā)出SYN的確認(rèn)。三次握手過程為:第一次:主機(jī)A向主機(jī)B發(fā)送連接請(qǐng)求,其中包含SYN段信息,通知主機(jī)B主機(jī)端口和序號(hào)。第二次:主機(jī)B應(yīng)答主機(jī)A,向主機(jī)A發(fā)送建立連接請(qǐng)求,并發(fā)送主機(jī)B的初始序號(hào),其中ACK

47、段為主機(jī)A發(fā)送的ISN + l。第三次:主機(jī)A將主機(jī)B發(fā)送的SYN段加1(SYN + 1)作為確認(rèn)號(hào)返回給主機(jī)B作為應(yīng)答。圖3.4 TCP建立連接的三次握手過程建立一個(gè)TCP連接需要三次握手,而斷開一個(gè)TCP連接需要四次揮手,其過程如圖3.5所示。圖3.5 TCP斷開連接的四次揮手過程第一次:主機(jī)A發(fā)送FIN字段到主機(jī)B,發(fā)送斷開連接的請(qǐng)求。第二次:主機(jī)B先確認(rèn)主機(jī)A的FIN請(qǐng)求,然后發(fā)送ACK字段到主機(jī)A,確認(rèn)序號(hào)為主機(jī)A序號(hào)加上1。第三次:主機(jī)B向主機(jī)A發(fā)送FIN請(qǐng)求。第四次:主機(jī)A對(duì)主機(jī)B的請(qǐng)求確認(rèn)后,隨之?dāng)嚅_TCP連接。3.3.2 TCP傳輸中數(shù)據(jù)的封裝和解封TCP/IP協(xié)議中數(shù)據(jù)傳輸

48、過程與OSI七層模型相似,只不過是TCP/IP協(xié)議只是四層的網(wǎng)絡(luò)模型,實(shí)現(xiàn)起來較為方便。TCP數(shù)據(jù)通信傳輸過程如圖3.6所示。圖3.6 TCP通行數(shù)據(jù)傳輸中的封裝和解封數(shù)據(jù)從應(yīng)用程序發(fā)送到物理層驅(qū)動(dòng)程序處的過程是一個(gè)將數(shù)據(jù)封裝的過程。在發(fā)送數(shù)據(jù)的主機(jī)A中,數(shù)據(jù)經(jīng)過傳輸層增加了TCP頭部,再經(jīng)過網(wǎng)絡(luò)層增加了IP頭部,最后達(dá)到物理層驅(qū)動(dòng)程序中并添加了以太網(wǎng)頭部,然后將封裝完畢的數(shù)據(jù)發(fā)送到以太網(wǎng)中進(jìn)行傳輸,送往接收主機(jī)B一端。以太網(wǎng)數(shù)據(jù)包從物理層傳送到應(yīng)用程序處的過程是一個(gè)將數(shù)據(jù)解封的過程。在主機(jī)B上,驅(qū)動(dòng)程序從以太網(wǎng)中接收到以太網(wǎng)數(shù)據(jù)包,將以太網(wǎng)數(shù)據(jù)包去除頭部和尾部后進(jìn)行CRC校驗(yàn)后發(fā)送到網(wǎng)絡(luò)層,

49、在IP協(xié)議層內(nèi)去除IP頭部并發(fā)送至傳輸層的TCP協(xié)議,在TCP協(xié)議層去除掉TCP頭部獲得需要的數(shù)據(jù),然后將數(shù)據(jù)傳遞給應(yīng)用程序,在主機(jī)B上的應(yīng)用程序最后得到的是去除掉各種協(xié)議層頭部的有效數(shù)據(jù)。3.3.3 TCP協(xié)議的特點(diǎn)總結(jié)TCP 協(xié)議具有以下幾個(gè)突出的特點(diǎn)。1.面向連接的服務(wù):TCP進(jìn)行數(shù)據(jù)傳輸之前必須要建立TCP連接,連接完成后,所有TCP報(bào)文的傳輸都在此連接的基礎(chǔ)上進(jìn)行。2.可靠的傳輸服務(wù):采用校驗(yàn)和應(yīng)答重發(fā)機(jī)制保證傳輸?shù)目煽啃?,接收方需要?duì)接收的TCP報(bào)文進(jìn)行校驗(yàn)和計(jì)算,如果計(jì)算結(jié)果錯(cuò)誤則不發(fā)送確認(rèn)響應(yīng),沒有接收到響應(yīng)的發(fā)送端主機(jī)將在超時(shí)后自動(dòng)重發(fā)剛才的TCP報(bào)文。3.字節(jié)流服務(wù):TCP

50、協(xié)議進(jìn)行傳輸?shù)臅r(shí)候?qū)?shù)據(jù)視為沒有結(jié)構(gòu)的字節(jié)流,這樣基于這樣的字節(jié)流傳輸就沒有字節(jié)順序(大端模式/小端模)的問題。4.流量控制:支持端到端的流量控制。3.4 UDP協(xié)議用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol),簡(jiǎn)稱UDP協(xié)議。UDP是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù),IP協(xié)議是TCP/IP協(xié)議中最為核心的協(xié)議10。UDP 數(shù)據(jù)報(bào)封裝成一份IP 數(shù)據(jù)報(bào)的格式,如圖3.7 所示。圖3.7 UDP數(shù)據(jù)在IP報(bào)文中的位置鑒于UDP協(xié)議的上述特點(diǎn),在網(wǎng)絡(luò)質(zhì)量較差的環(huán)境下使用UDP協(xié)議會(huì)出現(xiàn)數(shù)據(jù)包丟失嚴(yán)重的問題,但使用UDP協(xié)議比獲得較快的使

51、用速度,我們?nèi)粘5膽?yīng)用程序中老版的QQ就是使用UDP協(xié)議傳輸11。3.4.1 UDP傳輸中數(shù)據(jù)的封裝和解封由于UDP協(xié)議與TCP協(xié)議都同屬于傳輸層,其在網(wǎng)絡(luò)傳輸中的作用也比較相似,因此UDP協(xié)議數(shù)據(jù)傳輸過程中的數(shù)據(jù)封裝和解封過程與TCP協(xié)議極為相似。UDP協(xié)議層的數(shù)據(jù)傳輸過程如圖3.8所示。圖3.8 UDP通信數(shù)據(jù)傳輸中的封裝和解封數(shù)據(jù)從應(yīng)用程序發(fā)送到物理層驅(qū)動(dòng)程序處的過程是一個(gè)將數(shù)據(jù)封裝的過程。在發(fā)送數(shù)據(jù)的主機(jī)A中,數(shù)據(jù)經(jīng)過傳輸層增加了UDP 頭部,再經(jīng)過網(wǎng)絡(luò)層增加了IP頭部,最后達(dá)到物理層驅(qū)動(dòng)程序代碼中添加了以太網(wǎng)頭部,然后將封裝完畢的數(shù)據(jù)發(fā)送到以太網(wǎng)中進(jìn)行傳輸,送往接收主機(jī)B一端。以太網(wǎng)

52、數(shù)據(jù)包從物理層傳送到應(yīng)用程序處的過程是一個(gè)將數(shù)據(jù)解封的過程。在主機(jī)B上,驅(qū)動(dòng)程序從以太網(wǎng)中接收到以太網(wǎng)數(shù)據(jù)包,將以太網(wǎng)數(shù)據(jù)包去除頭部和尾部后進(jìn)行CRC校驗(yàn)后發(fā)送到網(wǎng)絡(luò)層,在IP協(xié)議層內(nèi)去除IP頭部并發(fā)送至傳輸層UDP協(xié)議處,在UDP協(xié)議層去除掉UDP頭部獲得需要的數(shù)據(jù),然后將數(shù)據(jù)傳遞給應(yīng)用程序,在主機(jī)B上的應(yīng)用程序最后得到的是去除掉各種頭部的有效數(shù)據(jù)。3.4.2 UDP協(xié)議特點(diǎn)總結(jié)UDP協(xié)議具有以下特點(diǎn):1.UDP無連接協(xié)議,2.可廣播傳輸相同的消息。3.UDP信息包的開銷小。4.吞吐量不受算法的調(diào)節(jié)。5.UDP是面向報(bào)文的。3.5 本章小結(jié)本章介紹了TCP協(xié)議和UDP協(xié)議的數(shù)學(xué)模型,以及數(shù)據(jù)

53、轉(zhuǎn)移的流程,這是ARM嵌入式以太網(wǎng)通信程序設(shè)計(jì)的基礎(chǔ),有了這一章的基礎(chǔ)知識(shí),我么可以畫出流程圖,對(duì)TCP和UDP通信的流程進(jìn)行分解,通過下一章的Linux網(wǎng)絡(luò)編程套接字的幫助,然后實(shí)現(xiàn)其軟件的編程,即可實(shí)現(xiàn)ARM嵌入式以太網(wǎng)通信程序的設(shè)計(jì)。4 ARM嵌入式的以太網(wǎng)通信程序設(shè)計(jì)通過前面幾章,完成了本課題的前期工作,也是非常重要的,搭建了開發(fā)環(huán)境,搭建了嵌入式Linux系統(tǒng),熟悉了嵌入式的網(wǎng)絡(luò)知識(shí);熟悉了TCP/IP和UDP/IP的原理;以及學(xué)習(xí)了嵌入式Linux的網(wǎng)絡(luò)編程,本章講述TCP/IP與UDP/IP的以太網(wǎng)通信程序的設(shè)計(jì)過程,以及在開發(fā)板上與PC之間以太網(wǎng)通信的測(cè)試。4.1 TCP通信程

54、序設(shè)計(jì)TCP 網(wǎng)絡(luò)編程的分為對(duì)服務(wù)器端和客戶端兩個(gè)部分的的程序設(shè)計(jì),通過兩端互相接收/發(fā)送請(qǐng)求、進(jìn)行連接和傳輸數(shù)據(jù),TCP協(xié)議設(shè)計(jì)了嚴(yán)格的3次建立連接握手過程、4次關(guān)閉連接握手過程11。4.1.1 TCP 服務(wù)器踹編程模式TCP 服務(wù)器端模式下編程主要分為以下流程:建立套接字socket()、綁定套接字與端口bind()、設(shè)置服務(wù)器的監(jiān)聽連接listen()、接收客戶端連接accept()、接收和發(fā)送數(shù)據(jù)read()/write()。和recv() /send()等、關(guān)閉套在字close()。如圖4.1 (a)所示為該TCP服務(wù)器端模式的流程圖。圖4.1 TCP服務(wù)器端模式流程圖1 socke

55、t()函數(shù)用于對(duì)網(wǎng)絡(luò)、協(xié)議以及協(xié)議具體參數(shù)進(jìn)行設(shè)置,實(shí)現(xiàn)套接字的初始化2 套接字與端口的綁定過程中,調(diào)用bind()函數(shù)將套接字與一個(gè)地址結(jié)構(gòu)進(jìn)行綁定。只有綁定之后才能進(jìn)行數(shù)據(jù)的接收和發(fā)送。3 函數(shù)listen()用來初始化服務(wù)器可連接的隊(duì)列。4 TCP服務(wù)器用accept()函數(shù)一直監(jiān)聽端口,直到一個(gè)客戶端的連接請(qǐng)求到達(dá)。5 TCP 服務(wù)器通過send()和recv()或write()和read()等函數(shù)進(jìn)行數(shù)據(jù)發(fā)送和接收。6 當(dāng)完成通訊需求后,此時(shí)需要通過close()函數(shù)去關(guān)閉套接字的連接,結(jié)束通信。4.1.2 TCP客戶端編程模式TCP客戶端模式下編程主要分為以下流程:建立套接字、服務(wù)

56、器連接、接收和發(fā)送數(shù)據(jù)、關(guān)閉套接字。圖4.2為該TCP 客戶端模式的流程圖。圖4.2 TCP客戶端模式流程圖客戶端模式流程與服務(wù)器端模式流程類似,兩者不同之處是客戶端直接利用connect()函數(shù)連接服務(wù)器端,并根據(jù)用戶設(shè)置的服務(wù)器地址、端口等參數(shù)與特定服務(wù)器程序進(jìn)行通信。在TCP 協(xié)議的客戶端是不需要綁定端口、監(jiān)聽、接受客戶端連接這3個(gè)函數(shù)的。4.1.3 TCP服務(wù)器端與客戶端通信過程TCP服務(wù)器端與客戶端進(jìn)行數(shù)據(jù)交換要進(jìn)行三次握手才可以完成TCP連接,之后才開始進(jìn)行數(shù)據(jù)交換12,客戶端的讀數(shù)據(jù)過程對(duì)應(yīng)服務(wù)器端的寫數(shù)據(jù)過程,客戶端與服務(wù)器端之間的的讀寫數(shù)據(jù)過程是相互對(duì)應(yīng)的。當(dāng)兩者完成數(shù)據(jù)讀寫后,關(guān)閉套接字的連接,結(jié)束通信。該過程如圖4.3所示。圖4.3 TCP服務(wù)器端與客戶端數(shù)據(jù)交互過程4.2 TCP網(wǎng)絡(luò)程序設(shè)計(jì)流程4.2.1 創(chuàng)建網(wǎng)絡(luò)套接字函數(shù)socket()socket()函數(shù)用于建立一個(gè)socket套接字的連接,可指定socket類型等信息。在建立了socket連接之后,可對(duì)sockaddr和sockaddr_in兩個(gè)數(shù)據(jù)類型進(jìn)行初始化,以保存所建立的socket信息。socket()函數(shù)調(diào)用成功后會(huì)返回一個(gè)表示套接字的文件描述符。該函數(shù)的原型如下所示:Family設(shè)置使用的協(xié)議族。通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論