基于linux的嵌入式流媒體點播系統(tǒng)畢業(yè)論文_第1頁
基于linux的嵌入式流媒體點播系統(tǒng)畢業(yè)論文_第2頁
基于linux的嵌入式流媒體點播系統(tǒng)畢業(yè)論文_第3頁
基于linux的嵌入式流媒體點播系統(tǒng)畢業(yè)論文_第4頁
基于linux的嵌入式流媒體點播系統(tǒng)畢業(yè)論文_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、海 南 大 學(xué) 畢 業(yè) 論 文(設(shè)計)題 目:基于linux的嵌入式流媒體點播系統(tǒng)學(xué) 號: 姓 名: 年 級:09級 學(xué) 院:海南大學(xué)應(yīng)用科技學(xué)院 系 別:應(yīng)用計算機系 專 業(yè):網(wǎng)絡(luò)工程 指導(dǎo)教師: 完成日期:2013 年 04月 25 日 摘 要隨著嵌入式系統(tǒng)以及計算機網(wǎng)絡(luò)通信技術(shù)、多媒體應(yīng)用程序的快速發(fā)展,基于嵌入式linux的家庭娛樂中心、視頻點播和實時會議系統(tǒng)已經(jīng)成為一個開發(fā)的熱點。這種系統(tǒng)因其體積小、功耗低、使用方便而廣受青睞。論文主要做了uboot移植、kernel移植、以及播放器主界面設(shè)計的工作。內(nèi)核采用linux-,針對mini2440開發(fā)板對內(nèi)核做了板級的定制

2、。使用 qt設(shè)計了播放器主界面。論文介紹了rtsp 流媒體協(xié)議的體系結(jié)構(gòu)和工作原理。把流媒體視頻點播相關(guān)技術(shù)應(yīng)用到嵌入式系統(tǒng)中,在嵌入式s3c2440硬件平臺和linux操作系統(tǒng)上開發(fā)實現(xiàn)一個vod系統(tǒng)。該視頻點播系統(tǒng)提供了美觀、友好的tq圖形用戶界面,可以進行本地播放和網(wǎng)絡(luò)播放,實現(xiàn)了視頻點播的基本功能。關(guān)鍵字:嵌入式系統(tǒng);實時流傳輸協(xié)議;流媒體;視頻點播abstractwith the embedded system and computer network communication technology, the rapid development of multimedia appl

3、ications, home entertainment center, video on demand based on embedded linux and real-time conference system development has become a hot spot. this system because of its small volume, low power consumption, easy to use and popular.thesis mainly do the uboot, the transplantation of the kernel, and p

4、layers main interface design work. the kernel of linux - used against mini2440 development threatening the custom kernel did the board level. based on the qt player main interface is designed.paper introduces the system structure and working principle of rtsp streaming protocols. the stream

5、ing video on demand technology applied to embedded systems, on s3c2440 embedded hardware platform and the linux operating system development and implementation of a vod system. the video on demand system provides the tq is beautiful, friendly graphical user interface, can undertake local broadcast a

6、nd internet broadcast, has realized the basic function of video on demand.key words:embedded system; real time streaming protocol;stream media;video on demand目錄1 緒論11.1 嵌入式linux流媒體點播的應(yīng)用背景11.2 研究意義12 流媒體相關(guān)技術(shù)介紹22.1 vod介紹22.2技術(shù)介紹22.2.1 avi22.2.2 mpeg-432.3 流傳輸技術(shù)32.3.1 流媒體技術(shù)和流式傳輸方式32.4 實時流媒體傳輸協(xié)議介紹42.4.1

7、 rtsp42.5 交叉編譯53 系統(tǒng)的需求說明73.1多媒體點播系統(tǒng)功能需求74 系統(tǒng)的總體設(shè)計84.1 系統(tǒng)總體劃分84.2實現(xiàn)模式:c/s模型95 系統(tǒng)的詳細設(shè)計及實現(xiàn)115.1 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建115.1.1 建立工作目錄115.1.2 建立交叉編譯環(huán)境115.2 嵌入式linux 的uboot移植125.2.1 bootloader介紹125.2.2 在嵌入式 linux 中bootloader 的重要性135.2.3 u-boot引導(dǎo)流程135.2.4 u-boot移植步驟145.2.5 建立開發(fā)板文件并測試編譯環(huán)境155.2.6 在/board 中建立mini2440 目

8、錄和文件155.2.7 在 include/configs/中建立開發(fā)板配置文件155.3 linux內(nèi)核配置與編譯165.3.1 內(nèi)核簡介165.3.2 建立目標平臺175.3.3 移植nand 驅(qū)動并修改分區(qū)信息185.3.4 為內(nèi)核打補丁支持yaffs2195.3.5 移植dm9000 網(wǎng)卡驅(qū)動195.3.6 移植lcd 顯示驅(qū)動205.3.7 添加觸摸屏驅(qū)動215.3.8 移植sd 卡驅(qū)動225.4流媒體播放器設(shè)計235.4.1 播放器主界面工作流程235.4.2 播放解碼處理245.4.3 播放器主界面設(shè)計246 系統(tǒng)的集成與調(diào)試306.1系統(tǒng)集成306.2 系統(tǒng)播放307總結(jié)32致

9、謝33參考文獻341 緒論1.1 嵌入式linux流媒體點播的應(yīng)用背景隨著多媒體計算機技術(shù)、移動通信技術(shù)的快速發(fā)展以及便攜式移動終端設(shè)備的普及,使嵌入式開發(fā)得到了快速發(fā)展。在現(xiàn)代計算機網(wǎng)絡(luò)技術(shù)快速發(fā)展的基礎(chǔ)上,多媒體計算機技術(shù)和多媒體網(wǎng)絡(luò)技術(shù)越來越廣泛地應(yīng)用到視頻點播系統(tǒng)。在遠程醫(yī)療,酒店vod,遠程實時視頻會議上得到了越來越廣泛的應(yīng)用,并且智能化成為其發(fā)展一大趨勢。1.2 研究意義在這個信息化的時代,嵌入視頻vod系統(tǒng)正在融入人們的生活,比如ktv點播系統(tǒng)、智能電視等等,這些都使人們能更加高效便捷的享受信息資源,極大地方便了人們的生活,這使得嵌入式vod系統(tǒng)開發(fā)成為一個熱點。嵌入式開發(fā)不同于

10、傳統(tǒng)的有著豐富資源的pc開發(fā),嵌入式開發(fā)往往是基于受限的硬件資源,這在技術(shù)和實施難度上對嵌入式流媒體點播提出了更高的要求,成為研究嵌入式多媒體點播的難點。同時嵌入式技術(shù)發(fā)展迅速,隨著嵌入式產(chǎn)品快速地更新?lián)Q代,系統(tǒng)還要有良好的擴展性。2 流媒體相關(guān)技術(shù)介紹2.1 vod介紹vod是video on demand的縮寫。視頻點播是計算機技術(shù)、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)發(fā)展的產(chǎn)物01。現(xiàn)代社會中,高端嵌入式移動終端成為人們接受信息資源的便捷方式。視頻點播系統(tǒng)不僅可以為用戶提供豐富的網(wǎng)絡(luò)信息資源而且在遠程教育、智能家電等領(lǐng)域得到越來越廣泛的應(yīng)用。用戶可以按照自己的需求點播視頻,即播即放,并且可以實現(xiàn)暫停、快

11、進、后退等操作,這種系統(tǒng)播放等待時間小并且支持多種流媒體視頻格式。隨著智能家電、智能汽車的快速發(fā)展,嵌入式vod必將得到越來越廣泛的應(yīng)用。2.2技術(shù)介紹進入信息時代,數(shù)字化后的視頻文件具有海量性,由于目前的網(wǎng)絡(luò)帶寬有限,在網(wǎng)絡(luò)傳輸高清大視頻文件是一件很不容易的事,因為傳輸速度和視頻質(zhì)量很難滿足用戶的需求。所以要實現(xiàn)視頻點播的功能必須對這些要傳輸?shù)囊曨l數(shù)據(jù)進行壓縮和解壓縮。隨著多媒體技術(shù)的不斷發(fā)展,多媒體數(shù)據(jù)的存儲與壓縮技術(shù)已經(jīng)相對比較成熟,例如h.261,mpeg-4 等,其中mpeg標準已經(jīng)從mpeg-1、mpeg-2 發(fā)展到了目前應(yīng)用比較廣泛的mpeg-4 標準02。2.2.1 aviav

12、i是將語音和影像同步組合在一起的文件格式,是微軟公司1992年推出的視頻格式,可以將視頻和音頻交織在一起進行同步播放。這種播放方式不僅可以提高系統(tǒng)的工作效率,同時也可以迅速地加載和啟動播放程序,減少播放avi視頻數(shù)據(jù)時的用戶等待時間。avi格式文件結(jié)構(gòu)由文件頭、索引塊和數(shù)據(jù)塊組成。avi文件主要參數(shù)有影像參數(shù)、伴音參數(shù)和壓縮參數(shù)。影像參數(shù)的視窗大小和幀率可以根據(jù)播放環(huán)境的硬件能力和處理速度進行調(diào)整,窗口越大視頻文件越大。wav文件時avi文件中伴音信號來源,包括影像與伴音的交織參數(shù)和同步控制參數(shù)。avi支持256色和rle壓縮,avi對視頻文件采用有損壓縮方式。這種視頻格式的優(yōu)點是可以跨多個平

13、臺使用,其缺點是視頻文件太大,目前是一種常用的視頻文件格式。2.2.2 mpeg-4mpeg-4是一種包含音頻和圖像的壓縮技術(shù),對圖像的壓縮算法提供的壓縮比可達到200:1。mpeg-4 在較高的壓縮比下也能獲得較高的圖像質(zhì)量,最大的特點是基于對象的編碼方式以及對合成對象的編碼能力。它支持固定和可變速率視頻編碼,具有高效的壓縮性,其編碼系統(tǒng)是開放的,隨時可以加入新的有效的算法模塊。mpeg-4標準具有通用的訪問性,適用于無線和有線網(wǎng)絡(luò)以及固態(tài)存儲,支持各種帶寬的傳輸信道和接收端??梢岳煤苷膸捦ㄟ^幀的重建技術(shù)壓縮和傳輸數(shù)據(jù),從而能以最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。mpeg-4 的可視信息的碼

14、率范圍可從564kbit/s直至 64kbit/s-4mbit/s,并且可以兼容 mpeg-1 和 mpeg-2 已經(jīng)提供的大多數(shù)功能03。因此在mpeg-4數(shù)字電視、動態(tài)圖像和移動通信等領(lǐng)域得到了普遍應(yīng)用。2.3 流傳輸技術(shù)2.3.1 流媒體技術(shù)和流式傳輸方式流媒體是指使用流式傳輸?shù)姆绞皆诰W(wǎng)絡(luò)上傳輸?shù)拿襟w格式。流是對在網(wǎng)絡(luò)上所傳輸?shù)慕?jīng)過一定編碼的多媒體信息的一種描述04。在進行網(wǎng)絡(luò)播放時,等待時間和視頻質(zhì)量是用戶主要的考慮因素。傳統(tǒng)視頻播放時必須整個視頻文件必須全部下載下來才能觀看,這會使得播放延時非常大。而現(xiàn)在很流行的嵌入式視頻點播系統(tǒng)可以實現(xiàn)即播即放,極大地減少了等待時間,并且在播放時用

15、戶還可以進行相關(guān)的交互式操作。這種觀看方式大大地滿足了用戶的需求。流式傳輸有兩種方式:實時流式傳輸和順序流式傳輸。傳統(tǒng)的視頻播放中主要采用順序傳輸方式,使用這種方式用戶一般只能觀看自己已經(jīng)下載的視頻,缺乏靈活性。實時流傳輸允許用戶在進行視頻觀看時進行相關(guān)的交互式操作,支持隨機訪問,比如前進、后退等?,F(xiàn)對于傳統(tǒng)的順序傳輸方式視頻播放,實時流傳輸更能滿足用戶需求,逐漸成為視頻點播的主流方式。2.4 實時流媒體傳輸協(xié)議介紹實時流媒體播放協(xié)議簇主要由rtsp、rtp和trcp構(gòu)成,整個rtsp協(xié)議棧是建立在tcp/ip協(xié)議棧之上的。其中rtsp提供控制功能,如播放器客戶端播放、暫停、前進等功能,rtp

16、協(xié)議負責流媒體數(shù)據(jù)的實時傳輸,rtcp負責檢查反饋網(wǎng)絡(luò)狀況以進行相應(yīng)的調(diào)整。協(xié)議簇的層次結(jié)構(gòu)如圖2-1所示。rtsp 層rtp /trcp層udp/tcp層ip層應(yīng)用層網(wǎng)絡(luò)層傳輸層 圖2-1 rtsp協(xié)議棧2.4.1 rtsprtsp協(xié)議屬于應(yīng)用層協(xié)議,是一個多媒體播放控制協(xié)議,以c/s方式工作。在用戶進行視頻點播時,通過rtsp協(xié)議內(nèi)部定義的方法可以實現(xiàn)交互式操作,比如暫停、后退、前進等。要實現(xiàn)rtsp的視頻播放控制功能,不但要有協(xié)議還要有專門的客戶端播放程序和視頻服務(wù)器05。rtsp在進行控制信息交互式是保證交付質(zhì)量的tcp連接,但在進行數(shù)據(jù)流傳輸時和反饋調(diào)整使用udp連接,會導(dǎo)致分組丟失

17、。如圖2-2所示。serverclient rtsp流控(tcp)rtp數(shù)據(jù)流(udp)rtcp分組(udp) 圖2-2 基于c/s模式的rtsprtp協(xié)議(real time protocol)提供實時的數(shù)據(jù)流傳輸。在數(shù)據(jù)包中封裝了發(fā)送數(shù)據(jù)的序列計數(shù)、標識符和時間戳等信息。rtp協(xié)議通常是用udp協(xié)議來封裝的,所以只提供實時的數(shù)據(jù)傳輸,但是不保證傳輸?shù)目煽啃浴K砸曨l播放時會出現(xiàn)視頻模糊,視頻質(zhì)量不佳的現(xiàn)象。隨著視頻解壓縮技術(shù)和網(wǎng)絡(luò)帶寬的不斷提高,客戶端的視頻質(zhì)量會越來越好。rtcp是rtp的實時傳輸控制協(xié)議,它用于監(jiān)視網(wǎng)絡(luò)的服務(wù)質(zhì)量和在正在進行的與會者會話中傳遞信息。通過質(zhì)量反饋來進行流量

18、的擁塞控制,利用這些反饋信息進行傳輸速度的相應(yīng)調(diào)整。rtcp是通過周期性地向會話的所有參加者進行通信來實現(xiàn)這樣的功能的,根據(jù)會話者的數(shù)量來調(diào)整發(fā)包率。2.5 交叉編譯嵌入式開發(fā)一般是基于一個資源受限的系統(tǒng),直接在目標板上進行相關(guān)軟件的編寫不僅困難而且調(diào)試麻煩,一般的解決方案是利用交叉開發(fā)模型。即先在計算機上編寫源程序,然后通過編譯工具交叉編譯,生成可以在目標平臺上運行的二進制代碼文件,下載到目標平臺上的相應(yīng)位置06。典型的嵌入式linux開發(fā)使用如圖所示的宿主機/目標板開發(fā)模式。開發(fā)模型如圖2-4所示。宿主機目標板網(wǎng)絡(luò)/串口/jtag圖2-3交叉開發(fā)模型交叉編譯就是在一個平臺上生成在另一個平臺

19、上執(zhí)行的代碼。本文的目標就是在x86平臺上交叉編譯,產(chǎn)生可以在arm開發(fā)板上運行的二進制文件。這需要在pc機上建立一個用于arm目標板的交叉編譯環(huán)境,本機使用交叉編譯器arm-linux-gcc-4.4.3配置如下:名 稱 嵌入式linux 點播系統(tǒng)開發(fā)cpuamd 2445內(nèi) 存2g虛擬機server2003下vmwearlinux 系統(tǒng)fedora 交叉編譯器arm-linux-gcc-4.4.3表2-1 x86主機配置3 系統(tǒng)的需求說明3.1多媒體點播系統(tǒng)功能需求首先系統(tǒng)是基于mini2440開發(fā)板進行設(shè)計的,所以在uboot、kerne移植時要進行定制,包括mini2440板級的定制和

20、和針對vod需求的定制。所以在移植時系統(tǒng)需要加入對網(wǎng)卡、觸摸屏等的支持。其次點播系統(tǒng)是通過客戶端/服務(wù)器模式實現(xiàn)的,所以系統(tǒng)的功能需求可以客戶端和服務(wù)器兩大部分來劃分??蛻舳酥饕獙崿F(xiàn)視頻播放功能,用戶啟動系統(tǒng)后進入視頻點播系統(tǒng)主界面,為用戶提供網(wǎng)絡(luò)點播和本地點播服務(wù),播放時用戶可以進行相關(guān)的交互式操作。服務(wù)器主要實現(xiàn)數(shù)據(jù)流的發(fā)送,使用戶可以觀看自己點播的視頻文件。嵌入式流媒體客戶端需要具備的基本功能如下:1) 提供有好的播放界面和交互式界面;1) 能讀取視頻文件,實現(xiàn)實時解碼及音視頻同步實時播放;2) 可以播放u盤中本地視頻文件;3) 可以撥號連接服務(wù)器,讀取服務(wù)器視頻文件;4) 能夠?qū)崿F(xiàn)交互

21、操作,實現(xiàn)對流媒體播放的暫停、快進、快退等功能;嵌入式流媒體服務(wù)器端需要具備的基本功能如下07:1)能夠提供種類豐富的視頻文件:如avi,rmvb等;2)以流式協(xié)議將視頻文件發(fā)送給客戶端,使用戶可以觀看其點播的視頻文件;3)實現(xiàn)和客戶端的同步交互式操作,比如實現(xiàn)同步的暫停、快進等操作。4 系統(tǒng)的總體設(shè)計該部分主要進行系統(tǒng)的整體設(shè)計,需要對系統(tǒng)進行總體劃分,一般將嵌入式流媒體播放器的系統(tǒng)體系結(jié)構(gòu)劃分為三層,包括硬件層、內(nèi)核層和應(yīng)用層。本文是以mini2440為開發(fā)板,論文的主要工作集中于系統(tǒng)的移植和應(yīng)用程序的開發(fā)。4.1 系統(tǒng)總體劃分 通常嵌入式linux視頻點播系統(tǒng)從軟件的角度看通??梢苑譃樗?/p>

22、個層次,即引導(dǎo)加載程序,嵌入式linux內(nèi)核,文件系統(tǒng)以及用戶應(yīng)用程序08。經(jīng)過嵌入式u-boot的移植、arm-linux內(nèi)核的配置與編譯以及嵌入式根文件系統(tǒng)的創(chuàng)建,基于arm處理器平臺的最小嵌入式系統(tǒng)就完成了。因為此時的系統(tǒng)還沒有任何的用戶應(yīng)用程序,但是下載到開發(fā)板可與看到自己的根文件系統(tǒng)目錄了。典型的bootloader、bootloader參數(shù)、內(nèi)核映像和嵌入式根文件系統(tǒng)在flash上的存儲如下圖所示。圖4-1嵌入式最小系統(tǒng)構(gòu)成 gui圖形用戶界面、通信協(xié)議棧和音視頻解碼器mppalyer三個主要模塊集成在一起就構(gòu)成了論文的嵌入式用戶應(yīng)用程序。與前面的最小嵌入式系統(tǒng)結(jié)合一起就構(gòu)成了視頻

23、點播系統(tǒng)體系。體系結(jié)構(gòu)如圖4-2所示。應(yīng)用層:內(nèi)核層:引導(dǎo)層:硬件層:通信協(xié)議棧音視頻解碼gui嵌入式應(yīng)用程序linux內(nèi)核根文件系統(tǒng)bootloader硬 件 平 臺嵌入式微處理器外 圍 設(shè) 備 圖4-2 嵌入式流媒體播放系統(tǒng)體系結(jié)構(gòu)4.2實現(xiàn)模式:c/s模型嵌入式視頻點播系統(tǒng)要實現(xiàn)本地播放和網(wǎng)絡(luò)播放的功能,本地播放是讀取u盤中預(yù)先存在的視頻文件進行播放。網(wǎng)絡(luò)播放時在播放時連接服務(wù)器,連接成功后,讀取服務(wù)器的視頻資源,更新網(wǎng)絡(luò)播放列表,點擊相應(yīng)的視頻文件后,qt視頻播放客戶端會調(diào)用開源軟件mplayer進行音視頻解碼將視頻顯示在播放器播放窗口,并且在播放的狀態(tài)下支持隨機訪問,可以進行暫停、快

24、進、快退等交互式操作。c/s工作模型如圖4-3所示。vodserverclient rtsp控制信息(tcp)rtp音、視頻(udp)rtcp分組(udp) http點播請求圖4-3 vod 服務(wù)模型在用戶進行播放點播的過程中,服務(wù)器必須要開啟http 服務(wù)和流媒體傳輸兩個服務(wù)10,通過 http 協(xié)議,用戶可以向服務(wù)器端發(fā)送視頻點播的請求,通過 rtp/rtsp進行視頻數(shù)據(jù)流的傳輸和控制。播放器的rtsp 服務(wù)器工作流程11主要步驟如圖4-4 所示。開始監(jiān)聽tcp端口等待客戶連接請求連接接受連接創(chuàng)建新連接接受客戶消息關(guān)閉連接執(zhí)行客戶消息響應(yīng)客戶消息結(jié)束nn圖4-4服務(wù)器工作流程5 系統(tǒng)的詳細

25、設(shè)計及實現(xiàn)該部分介紹了系統(tǒng)的實施細節(jié),包括嵌入式系統(tǒng)開發(fā)環(huán)境的搭建,uboot、kernel移植以及視頻播放主界面的設(shè)計。5.1 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建5.1.1 建立工作目錄mkdir -p /opt/friendltarm/mini2440 /mini2440工作目錄mkdie -p /tmp/linux /各種所需源文件都拷貝到該目錄下5.1.2 建立交叉編譯環(huán)境cd /opt/friendltarm/mini2440解壓安裝編譯器arm-linux-gcc-4.4.3tar xvzf /tmp/linux/arm-linux-gcc-4.4.3.tgz c /添加系統(tǒng)環(huán)境變量如下ge

26、dit /root/.bashrcexport path=$path: /opt/friendlyarm/toolschain/4.4.3/bin解壓安裝linux-內(nèi)核源代碼tar xvzf /tmp/linux/linux-.tar.gz解壓安裝嵌入式圖形系統(tǒng)arm-qtopia和x86-qtopia 源代碼tar xvzf /tmp/linux/x86-qtopia.tgztar xvzf /tmp/linux/arm-qtopia.tgz解壓安裝嵌入式圖形系統(tǒng)arm-qte-4.6.3 tar xvzf /tmp/linux/arm-qte-4.6.3-

27、20100802.tar.gz解壓安裝busybox-1.13.3 源代碼tar xvzf /tmp/linux/busybox-1.13.3-mini2440.tgz解壓安裝linux 示例程序tar xvzf /tmp/linux/examples-20100108.tgz解壓安裝uboot工作目錄tar xvzf /tmp/linux/vboot-src.tar.gz創(chuàng)建bootloader 工作目錄,里有vivi 和u-boot源代碼tar xvzf /tmp/linux/mkyaffs2image.tgz c /改變工作目錄后會被安裝到/usr/sbin 目錄下,自動生成mkyaff

28、s2image 和 mkyaffs2image-128m。解壓安裝logomaker開機啟動畫面制作工具tar xvzf /tmp/linux/logomaker.tgz c /在開發(fā)時經(jīng)常用到nfs、tftp和smb服務(wù),所以系統(tǒng)服務(wù)要事先配置好并且保證正常運行。所建立的mini2440工作目錄如5-1所示。圖5-1 虛擬機下工作目錄5.2 嵌入式linux 的uboot移植5.2.1 bootloader介紹嵌入式系統(tǒng)的引導(dǎo)加載程序是系統(tǒng)必不可少的一部分,引導(dǎo)加載程序是系統(tǒng)加電后運行的第一段軟件代碼。其作用類似于pc中的bios,bootloader就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程

29、序。這段程序主要作用就是初始化硬件設(shè)備、生成內(nèi)存映射圖等,為最后調(diào)用嵌入式內(nèi)核做好充足的前期準備。bootloader一般有兩種啟動模式即啟動加載模式和下載模式。下載模式主要是針對嵌入式開發(fā)人員的,因為嵌入式移植過程中的各種調(diào)試基本都是這種模式來實現(xiàn)的,下載模式可以通過串口、nfs、tftp等方式實現(xiàn)。在下載模式下,u-boot為用戶提供一個命令行接口,通過接口可以使用u-boot提供的一些命令進行相應(yīng)操作。啟動加載模式是產(chǎn)品發(fā)布時必須置為的模式,在這種模式下啟動系統(tǒng)不需要用戶的干涉,自動從目標主機的存儲設(shè)備上將操作系統(tǒng)加載到內(nèi)存中運行。5.2.2 在嵌入式 linux 中bootloader

30、 的重要性由于 bootloader 需要直接操作硬件,所以想在嵌入式世界建立一個通用的引導(dǎo)加載程序是很困難的,因為一般不同的硬件平臺不同的操作系統(tǒng)所需的加載引導(dǎo)程序不同。所能做的就是讓一種加載引導(dǎo)程序支持盡量多的平臺,賦予它良好的移植性。u-boot 就是支持多平臺多操作系統(tǒng)的優(yōu)秀引導(dǎo)加載程序,這也是u-boot 的優(yōu)勢。因而針對不同的嵌入式平臺要進行加載引導(dǎo)程序相關(guān)的修改以滿足項目需求。5.2.3 u-boot引導(dǎo)流程bootloader啟動流程大多經(jīng)過兩個階段,即啟動可以分為stage1和stage2。stage1完成初始化硬件的工作,為stage2準備足夠的內(nèi)存空間,并將stage2可

31、執(zhí)行映像復(fù)制到內(nèi)存中,設(shè)置堆棧,然后轉(zhuǎn)調(diào)到stage2的c入口。stage2一般包括以下幾個步驟,初始化本階段要用到的硬件設(shè)備,將制作好的內(nèi)核映像和根文件系統(tǒng)從flash讀到ram中,調(diào)用內(nèi)核,跳轉(zhuǎn)到 memstart+0x8000地址處,一般是使用x030008000地址。啟動的stagel一般用匯編語言來實現(xiàn),匯編語言能更加高效的實現(xiàn)對底層硬件的操作且代碼量小,對應(yīng)的是start.s文件。而stage2則一般用c語言來實現(xiàn),這樣做不僅可以實現(xiàn)更加復(fù)雜的功能,而且具有良好的可讀性和移植性。啟動代碼中c語言的主函數(shù)是在lib_arm/board.c中的start_armboot。兩個階段的引導(dǎo)

32、的主要流程如下所示。設(shè)置cpu為svc關(guān)閉看門狗/禁所有中斷/設(shè)置cpu頻率復(fù)制stage2可執(zhí)行映像到sdram中設(shè)置堆棧指針跳轉(zhuǎn)stage2 c入口stage2:加載內(nèi)核和根文件設(shè)置內(nèi)核的啟動參數(shù)。調(diào)用內(nèi)核stage1:檢測內(nèi)存映射圖5-2 兩個階段啟動流程圖5.2.4 u-boot移植步驟移植就是根據(jù)開發(fā)板和系統(tǒng)需求做相應(yīng)的修改。u-boot 還沒有支持三星s3c2440微處理器,移植仍是用u-boot 支持的友善之臂sbc2410 的文件作藍本來移植,因為sbc2410和mini2440硬件配置最為接近,使用一個模板可以加快移植的速度和效率。所以移植所要做的就是針s3c2440 和sb

33、c2410 的不同,以及sbc2410 和mini2440 開發(fā)板的外設(shè)不同作相應(yīng)的修改,并增加新的功能。s3c2440 和s3c2410 的區(qū)別主要是s3c2440的主頻更高,其他內(nèi)部寄存器基本都是兼容的。本系統(tǒng)中,使用mini2440開發(fā)板,采用u-boot作為s3c2440處理器的bootloader。5.2.5 建立開發(fā)板文件并測試編譯環(huán)境修改頂層 makefile目的:定義交叉編譯工具鏈和開發(fā)板配置選項。約定:代碼中+和-號表示增刪vi makefile+cross_compile = arm-none-linux-gnueabi-+mini2440_config : unconfi

34、g+$(mkconfig) $(:_config=) arm arm920t mini2440 andywsg s3c24x05.2.6 在/board 中建立mini2440 目錄和文件在/board 目錄中建立開發(fā)板mini2440 的目錄,并復(fù)制sbc2410x 的文件到此,做適當修改。目的:以sbc2410x 為藍本,因為sbc2410和mini2440配置最接近,代碼復(fù)用,這樣可以加快移植進度。cd boardmkdir andywsg/mini2440cp -arf sbc2410x/* andywsg/mini2440/cd andywsg/mini2440/mv sbc2410

35、x.c mini2440.c5.2.7 在 include/configs/中建立開發(fā)板配置文件目的:制作mini2440所需頭文件cp include/configs/sbc2410x.h include/configs/mini2440.h測試編譯環(huán)境在uboot頂層目錄執(zhí)行make mini2440_configmake編譯通過如圖5-3所示。以上測試通過后,說明編譯環(huán)境和基本的開發(fā)板代碼創(chuàng)建都沒有問題。下面所做工作就是針對mini2440進行修改,以滿足項目需求。uboot修改主要經(jīng)歷四個階段,第一階段修改啟動代碼,包括初始化cpu頻率,代碼重定向等。第二階段修改初始化代碼,主要是mi

36、ni2440平臺初始化。第三階段是初始化外設(shè),包括lcd、網(wǎng)卡和yaffs2文件系統(tǒng)支持等。第四階段修改編譯配置文件,在所有有編譯條件的地方加入對mini2440的編譯支持,這樣前面修改的代碼才會在編譯時編譯進來。下面是對u-boot源碼修改后編譯的結(jié)果。 圖5-3 uboot編譯結(jié)果5.3 linux內(nèi)核配置與編譯5.3.1 內(nèi)核簡介內(nèi)核是所有l(wèi)inux系統(tǒng)的核心軟件組件,其性能很大程度上決定了整個系統(tǒng)的性能。本系統(tǒng)中,嵌入式linux內(nèi)核選擇。linux-本身已經(jīng)提供了對mini2440的部分支持。內(nèi)核移植就是根據(jù)開發(fā)系統(tǒng)的需要對已有的系統(tǒng)進行裁減,保留需要

37、的模塊去掉不需要的模塊,生成一個適合目標嵌入式系統(tǒng)的過程。5.3.2 建立目標平臺指定平臺交叉編譯變量cd linux-vi makefile-arch ?= $(subarch)-cross_compile ?=+arch ?= arm+cross_compile ?= arm-linux-這里面的arch ?= arm 是指定目標平臺為arm平臺,cross_compile ?= arm-linux-是指定交叉編譯器是arm-linux-gcc-4.4.3。添加自己的開發(fā)板信息cd linux-rm -rf arch/arm/mach-s3c2440/mac

38、h-mini2440.ccp -arf arch/arm/mach-s3c2440/mach-smdk2440.c arch/arm/mach-s3c2440/mach-mini2440.cvi arch/arm/mach-s3c2440/mach-mini2440.c把machine_start(s3c2440, smdk2440) , 修改成machine_start(mini2440, friendlyarm mini2440 development board)。修定開發(fā)板時鐘源頻率在 mach-mini2440.c( 就是剛剛通過復(fù)制mach-smdk2440.c 得到的)stati

39、c void _init smdk2440_map_io(void)函數(shù)中,把原來的16934400(代表原smdk2440 目標板上的晶振是16.9344mhz)改為mini2440 開發(fā)板上實際使用的12000000(代表mini2440 開發(fā)板上的晶振12mhz)。克隆smdk2440 成mini2440平臺克隆自己的mini2440 平臺,需要把mach-mini2440.c 中所有的smdk2440字符串改為mini2440。這里使用批處理命令在命令模式下輸入:%s/smdk2440/mini2440/g。編譯測試cd linux-make mini2440_defc

40、onfig /使用linux 官方自帶的mini2440 配置make zimage /編譯內(nèi)核,生成的內(nèi)核映像zimage位于arch/arm/boot編譯通過,以上測試通過后,說明編譯環(huán)境和基本的開發(fā)板的代碼創(chuàng)建都沒有問題。下載到內(nèi)核,從串口可以看到可以啟動信息,但是大部分的定制的驅(qū)動還沒有添加,根文件系統(tǒng)也沒有制作。下面進行的是主要硬件驅(qū)動文件的移植。5.3.3 移植nand 驅(qū)動并修改分區(qū)信息雖然比較新的內(nèi)核linux在nand_ids.c 文件中自帶了部分nand flash驅(qū)動,但是系統(tǒng)默認的分區(qū)不是該項目所需的。為了適合系統(tǒng)自帶的nand flash 驅(qū)動接口,在

41、nand flash的結(jié)構(gòu)信息中還要添加相關(guān)信息,參考/arch/arm/plat-24xx/common-smdk.c上結(jié)構(gòu)信息,在mach-mini2440.c添加如下信息。cd linux-vi arch/arm/mach-s3c2440/mach-mini2440.c /編輯平臺初始化文件/創(chuàng)建mtd分區(qū)表static struct mtd_partition mini2440_default_nand_part = 0 = .name = supervivi, /bootloader分區(qū),對應(yīng)設(shè)備塊/dev/mtdblock0.size = 0x00040000, /

42、大小256k.offset = 0, /起始地址0x000000001 = .name = param, / supervivi 的參數(shù)區(qū),對應(yīng)塊設(shè)備/dev/mtdblock1.offset = 0x00040000, .size = 0x00020000, /大小128k2 = .name = kernel, /內(nèi)核分區(qū),大小為5m,對應(yīng)/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000, /大小5m3 = .name = root, /根文件系統(tǒng)分區(qū),對應(yīng)/dev/mtdblock3.offset = 0x00560000,.siz

43、e = 1024 * 1024 * 1024, ,4 = .name = nand, /表示整片的nand flash.offset = 0x00000000,.size = 1024 * 1024 * 1024, ;/下面是開發(fā)板的nand flash 設(shè)置表,一塊板對應(yīng)一個表static struct s3c2410_nand_set mini2440_nand_sets = 0 = .name = nand,.nr_chips = 1,.nr_partitions = array_size(mini2440_default_nand_part),.partitions = mini244

44、0_default_nand_part,;/構(gòu)建一個s3c2410_platform_nand類型的mini2440_nand_info結(jié)構(gòu)體static struct s3c2410_platform_nand mini2440_nand_info = .tacls = 20, /nand電平nwe開始時間.twrph0 = 60, / nwe持續(xù)時間.twrph1 = 20, /nwe結(jié)束時間.nr_sets = array_size(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1,;/平臺設(shè)備結(jié)構(gòu)體

45、數(shù)組,把nand flash 設(shè)備添加到目標平臺設(shè)備集中static struct platform_device *mini2440_devices _initdata = &s3c_device_usb,&s3c_device_lcd,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_nand, ;把nand flash 設(shè)備添加到開發(fā)板的設(shè)備列表結(jié)構(gòu);5.3.4 為內(nèi)核打補丁支持yaffs2linux支持的文件系統(tǒng)很多,論文采用的是yaffs2文件作為根文件系統(tǒng)。進入 yaffs2 源代碼目錄執(zhí)行如下操作:cd yaffs2./patch-ker.

46、sh c /opt/friendlyarm/mini2440/linux-再進入linux-/fs 目錄,看到如果已經(jīng)多了一個yaffs2 目錄,說明yaffs2 補丁已經(jīng)成功打上。5.3.5 移植dm9000 網(wǎng)卡驅(qū)動網(wǎng)卡是一個平臺設(shè)備,在目標平臺初始化代碼中/arch/arm/mach-s3c2440/mach-mini2440.c填寫相應(yīng)的結(jié)構(gòu)表,具體添加如下:添加網(wǎng)卡設(shè)備的資源設(shè)置,才能夠和dm9000 網(wǎng)卡驅(qū)動接口配合使用:static struct resource mini2440_dm9k_resource = /片選信息0 = .start =

47、 mach_mini2440_dm9k_base,.end = mach_mini2440_dm9k_base + 3,.flags = ioresource_mem,1 = .start = mach_mini2440_dm9k_base + 4,.end = mach_mini2440_dm9k_base + 7,.flags = ioresource_mem,2 = .start = irq_eint7,.end = irq_eint7, /說明中斷管腳接在eint7,上升沿觸發(fā)中斷.flags = ioresource_irq | ioresource_irq_highedge,;st

48、atic struct dm9000_plat_data mini2440_dm9k_pdata = /向驅(qū)動傳入flags參數(shù)(使用16位數(shù)據(jù)線,沒有eeprom)和dev_addr(mac地址).flags = (dm9000_platf_16bitonly | dm9000_platf_no_eeprom),;static struct platform_device mini2440_device_eth = .name = dm9000,.id = -1,.num_resources = array_size(mini2440_dm9k_resource),.resource = m

49、ini2440_dm9k_resource,.dev = .platform_data = &mini2440_dm9k_pdata,;把上面做好的網(wǎng)卡平臺添加設(shè)備設(shè)備集中static struct platform_device *mini2440_devices _initdata = &s3c_device_usb,&s3c_device_lcd,&s3c_device_iis,&s3c_device_nand,&mini2440_device_eth,;5.3.6 移植lcd 顯示驅(qū)動由于linux- 內(nèi)核已經(jīng)支持s3c2440 的lcd 控制器驅(qū)動,lcd工作中最關(guān)鍵

50、的就是取決于時鐘頻率(clock frequency)參數(shù)的設(shè)置, linux- 內(nèi)核是通過一個稱為“pixclock”的參數(shù)來調(diào)節(jié)。這里實際設(shè)置數(shù)值為170000,單位是ps(picoseconds)。cd linux-vi arch/arm/mach-s3c2440/mach-mini2440.cmini2440開發(fā)板使用的是統(tǒng)寶3.5lcd,把友善之臂已經(jīng)移植好的代碼加入,統(tǒng)寶3.5lcd 的配置和參數(shù)設(shè)置如下。static struct s3c2410fb_display mini2440_lcd_cfg _initdata = if !defined

51、(lcd_con5).lcdcon5 = s3c2410_lcdcon5_frm565 |s3c2410_lcdcon5_invvline |s3c2410_lcdcon5_invvframe |s3c2410_lcdcon5_pwren |s3c2410_lcdcon5_hwswp,else.lcdcon5 = lcd_con5,endif.type = s3c2410_lcdcon1_tft,.width = lcd_width,.height = lcd_height,.pixclock = lcd_pixclock,.xres = lcd_width,.yres = lcd_heigh

52、t,.bpp = 16,.left_margin = lcd_left_margin + 1,.right_margin = lcd_right_margin + 1,.hsync_len = lcd_hsync_len + 1,.upper_margin = lcd_upper_margin + 1,.lower_margin = lcd_lower_margin + 1,.vsync_len = lcd_vsync_len + 1,;/構(gòu)建lcd配置結(jié)構(gòu)體mini2440_fb_infostatic struct s3c2410fb_mach_info mini2440_fb_info _

53、initdata = .displays = &mini2440_lcd_cfg,.num_displays = 1,.default_display = 0,.gpccon = 0xaa955699,.gpccon_mask = 0xffc003cc,.gpcup_mask = 0xffffffff,.gpdcon = 0xaa95aaa1,.gpdcon_mask = 0xffc0fff0,.gpdup = 0x0000faff,.gpdup_mask = 0xffffffff,.lpcsel = 0xf82,;5.3.7 添加觸摸屏驅(qū)動由于linux- 內(nèi)核沒有包含支持s3c2440 的觸摸屏驅(qū)動,因此需要添加設(shè)計一個觸摸屏驅(qū)動文件,放置于linux-src/drivers/input/touchscreen 目錄下,增加一個友善之臂提供的s3c2410_ts.c 文件。然后在 linux-/drivers/input/touchscreen/makefile 文件中添加該源代碼的目標模塊。vi linux-/drivers/input/touchscreen/makefile+o

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論