基于linux的嵌入式無線可視門鈴系統(tǒng)的設計(軟件部分)_第1頁
基于linux的嵌入式無線可視門鈴系統(tǒng)的設計(軟件部分)_第2頁
基于linux的嵌入式無線可視門鈴系統(tǒng)的設計(軟件部分)_第3頁
基于linux的嵌入式無線可視門鈴系統(tǒng)的設計(軟件部分)_第4頁
基于linux的嵌入式無線可視門鈴系統(tǒng)的設計(軟件部分)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 武漢工業(yè)學院2007年畢業(yè)論文 目錄摘要3abstract4第1章 緒論51.1課題背景51.1.1 嵌入式系統(tǒng)定義51.1.2 嵌入式系統(tǒng)的特點51.1.3 嵌入式系統(tǒng)現(xiàn)狀51.1.4 嵌入式系統(tǒng)的發(fā)展趨勢61.1.5 嵌入式操作系統(tǒng)介紹61.1.6 嵌入式系統(tǒng)的開發(fā)流程7第2章 系統(tǒng)總體設計方案92.1可視門鈴系統(tǒng)簡介92.2可視門鈴系統(tǒng)的工作原理92.3可視門鈴系統(tǒng)方案設計102.4核心處理器選型122.5 usb攝像頭的選擇122.6是否采用硬件壓縮12第3 章 開發(fā)環(huán)境的建立133.1嵌入式開發(fā)環(huán)境概述133.2 安裝交叉編譯工具鏈133.3設置tftp 服務器143.4設置min

2、icom153.5使用 u-boot163.5.1 bootloader概述163.5.2 燒寫u-boot183.5.2設置u-boot 的參數(shù)193.5.3宿主機和目標板的連接19第4章 linux 內(nèi)核移植204.1 linux操作系統(tǒng)介紹204.2 裁剪內(nèi)核204.3測試編譯完畢的內(nèi)核22第5章 linux設備驅(qū)動程序開發(fā)255.1 linux 設備驅(qū)動程序基礎255.1.1 驅(qū)動程序分類255.1.2 設備驅(qū)動中的關鍵數(shù)據(jù)結(jié)構(gòu)265.1.3 主設備號和從設備號275.1.4 設備節(jié)點,節(jié)點文件和設備文件275.2加載linux 驅(qū)動的方法275.3按鍵驅(qū)動程序的編寫285.4添加按鍵

3、驅(qū)動程序到內(nèi)核34第6 章 服務器端圖像的采集356.1 video4linux 編程概述356.2 圖像采集366.3 圖像的壓縮376.3.1 jpeg 簡介及 jpeglib 安裝376.3.2 jpeg 壓縮具體實現(xiàn)38第7章 客戶端圖像的顯示397.1 minigui 概述397.2 minigui 的移植397.2.1 minigui運行環(huán)境的搭建407.2.2交叉編譯minigui407.3 用minigui 顯示jpeg 圖片43總結(jié)與體會47致謝48主要參考文獻49 摘要 linux 是近年來發(fā)展較快的一種操作系統(tǒng),而且它在嵌入式領域的應用越來越廣泛。本次畢業(yè)設計的課題就是“

4、基于linux的嵌入式無線可視門鈴系統(tǒng)的設計”。該可視門鈴系統(tǒng)是一個基于高性能嵌入式處理器,結(jié)合 linux操作系統(tǒng),由服務器端和客戶端兩部分組成的系統(tǒng)。在服務器端,當訪客將按下門鈴時,通過一個usb 攝像頭來采集訪客的圖像,然后用jpeg算法對獲取的圖像進行壓縮,最后以無線的方式發(fā)送.客戶端則負責圖像的接收,然后通過minigui 顯示jpeg 圖像。 本文只討論服務器端訪客的圖像數(shù)據(jù)的采集和壓縮,客戶端圖象的顯示,不討論圖象的無線傳輸。主要內(nèi)容包括嵌入式開發(fā)環(huán)境的建立,linux 操作系統(tǒng)的移植,minigui 的移植,linux 操作系統(tǒng)下驅(qū)動程序的編寫和應用程序的編寫。關鍵字: 嵌入式

5、 linux 驅(qū)動程序 v4l 圖像采集 minigui abstractin recent years, linux operating system developed very fast, and in the field of embedded applications it becomes more extensive. my graduation design topic is wireless doorbell visualization system designment based on embedded linux a high-performance embedded p

6、rocessor was used in the doorbell visualization system which combined linux operating system and consisted of the server and client. on the server end, the visitors will press the doorbell, we can obtain visitorss images through a usb camera. then compress these images using jpeg algorithm. finally,

7、 the wireless dispatch. the client is responsible for the image receiving. then minigui system display jpeg images. this article will only discuss the visitorss images data collection and compression at server end, images display at client, not to discuss the wireless transmission of images. main co

8、ntent including the establishment of embedded development environment, the linux operating systems porting , miniguis porting , linux device driver development, linux application programs development.keyword: embed linux driver v4l minigui 第1章 緒論1.1課題背景1.1.1 嵌入式系統(tǒng)定義 隨著后pc 時代的到來,網(wǎng)絡、通信、無線技術得以充分發(fā)展,把處理器

9、嵌入到各種個性化產(chǎn)品中去已是大勢所趨。嵌入式系統(tǒng)(embeded system)無疑是pc 時代最熱門的話題。但究竟什么是嵌入式系統(tǒng)?其確切定義一直在演變,而且仍在不斷討論之中。這里給出一個被廣泛采納的定義:嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,并且軟硬件可裁剪,適用于應用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)一般由嵌入式微處理器,外圍硬件設備,嵌入式操作系統(tǒng)以及用戶的應用程序4個部分組成。 下面是電氣工程師協(xié)會對嵌入式系統(tǒng)的定義:嵌入式系統(tǒng)是用來控制或者監(jiān)視機器、裝置,工廠等大規(guī)模系統(tǒng)的設備。 當然,還有很多對嵌入式系統(tǒng)的定義,盡管他們從不同的角度

10、去定義嵌入式系統(tǒng),但這些定義在本質(zhì)上是相同的。我們沒有必要搞清楚每一個對嵌入式系統(tǒng)的定義。1.1.2 嵌入式系統(tǒng)的特點(1)硬件平臺的多樣性。(2)嵌入式系統(tǒng)功耗低,體積小,專用性強。(3)嵌入式系統(tǒng)往往具有更少的存儲容量。(3)嵌入式系統(tǒng)的硬件和軟件都必須被高效率的設計,實時性要強。(4)開發(fā)嵌入式系統(tǒng)需要專門的開發(fā)工具和開發(fā)環(huán)境。1.1.3 嵌入式系統(tǒng)現(xiàn)狀 后pc 時代,嵌入式系統(tǒng)無疑擁有最大的市場。近年來微電子技術迅猛發(fā)展,處理器增長速度也隨之加快,特別是互聯(lián)網(wǎng)的普及,給嵌入式的發(fā)展帶來活力。嵌入式控制器的應用幾乎無處不在:移動電話、家用電器、汽車無不有它的蹤影。嵌入控制器因其體積小、可

11、靠性高、功能強、靈活方便等許多優(yōu)點,其 應用已深入到工業(yè)、農(nóng)業(yè)、教育、國防、科研以及日常生活等各個領域,對各行各業(yè)的技術改造、產(chǎn)品更新?lián)Q代、加速自動化化進程、提高生產(chǎn)率等方面起到了極其重要的推動作用。 嵌入式計算機在應用數(shù)量上遠遠超過了各種通用計算機,一臺通用計算機的外部設備 中就包含了5 - 10 個嵌入式微處理器。在制造工業(yè)、過程控制、網(wǎng)絡、通訊、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費類產(chǎn)品等方面均是嵌入式計算機的應用領域。1.1.4 嵌入式系統(tǒng)的發(fā)展趨勢互聯(lián)網(wǎng)的普及,不僅為嵌入式市場展現(xiàn)了美好前景,注入了新的生命;同時也對嵌入式系統(tǒng)技術,特別是軟件技術提出新的要求。這主要包括

12、:支持日趨增長的功能密度、靈活的網(wǎng)絡聯(lián)接、輕便的移動應用和多媒體的信息處理。在未來的嵌入式產(chǎn)品中,網(wǎng)絡功能已成為基本功能,未來的嵌入式產(chǎn)品將有更小的體積、更低的功耗、更低的成本,還會提供多媒體的支持,提供更友好的用戶界面。 1.1.5 嵌入式操作系統(tǒng)介紹 據(jù)調(diào)查,目前全世界的嵌入式操作系統(tǒng)已經(jīng)有兩百多種。隨著嵌入式領域的發(fā)展,各種各樣的嵌入式操作系統(tǒng)相繼問世。這其中有許多商業(yè)的嵌入式操作系統(tǒng),也有大量開放源碼的嵌入式操作系統(tǒng)。其中著名的嵌入式操作系統(tǒng)有:uc/os、 vxworks、neculeus、linux和windowsce等。下面介紹一下在國內(nèi)影響較大的一些嵌入式操作系統(tǒng): (1)li

13、nux 在所有的操作系統(tǒng)中,linux 是一個發(fā)展最快,應用最為廣泛的操作系統(tǒng),linux 本身的種種特性使其成為嵌入式開發(fā)中的首選。嵌入式linux 版本還有多種變體。例如: rtlinux 通過改造內(nèi)核實現(xiàn)了實時的linux;還有uclinux去掉了linux 的mmu(內(nèi)存管理單元),能夠支持沒有mmu 的處理器等。(2)uc/osuc/os 是一個典型的實時操作系統(tǒng)。它的特點是:公開源代碼,代碼結(jié)構(gòu)清晰,注釋詳盡,組織有條理??梢浦残院谩⒖刹眉?、可固化、搶占式內(nèi)核,最多可以管理60個任務。該系統(tǒng)短小精悍,是研究和學習實時操作系統(tǒng)的首選。(3)windowscewindowsce 是微軟

14、的產(chǎn)品,它是從整體上為資源有限的平臺設計的多線程,完整優(yōu)先權(quán),多任務的操作系統(tǒng)。windowsce 采用模塊化設計,并允許它對于從掌上電腦到專用的工控電子設備進行定制。(4)vxworksvxworks 是windriver 公司專門為實時嵌入式系統(tǒng)開發(fā)的操作系統(tǒng)軟件。為程序員提供了高效的實時任務調(diào)度,中斷管理。實時的系統(tǒng)資源以及實時的任務通信。應用程序員可以將盡可能多的精力放在應用程序本身,而不必去關心系統(tǒng)資源的管理,該系統(tǒng)主要應用在單板機,數(shù)據(jù)網(wǎng)絡和通信等多方面。1.1.6 嵌入式系統(tǒng)的開發(fā)流程 對于一個嵌入式系統(tǒng),基本的處理器和核心電路是固定的,操作系統(tǒng)是已經(jīng)移植好的。我們所要做的工作就

15、是看看是否要添加外設,然后編寫所添加外設的驅(qū)動程序,最后就是編寫應用程序。其開發(fā)流程圖如1.1所示,也就是說,如果選擇了一個成熟的嵌入式系統(tǒng),則會避免重復勞動,縮短開發(fā)周期。用戶需求選擇嵌入式處理器及硬件平臺選擇合適的嵌入式操作系統(tǒng)在操作系統(tǒng)上開發(fā)應用程序整個系統(tǒng)測試應用程序測通試過?開發(fā)結(jié)束是否 圖1.1 嵌入式系統(tǒng)開發(fā)流程圖 第2章 系統(tǒng)總體設計方案2.1可視門鈴系統(tǒng)簡介 近幾年來, 隨著市場上智能化樓宇的不斷升溫, 門鈴系統(tǒng)已作為智能化辦公室和智能化住宅小區(qū)的一個重要組成部分,被各商家和用戶所接受。此外隨著居民住宅的不斷增加,小區(qū)的物業(yè)管理就顯得日趨重要。其中訪客登記及值班看門的管理方法

16、已不適合現(xiàn)代管理快捷、方便、安全的需求。人們已開始習慣用門鈴系統(tǒng)代替?zhèn)鹘y(tǒng)的鐵鑰匙去管理各通道門, 這使門鈴系統(tǒng)得到了飛躍性的發(fā)展。繼語音門鈴悄然走入尋常百姓的家庭,隨之而來的可視化門鈴也逐漸成為普及之勢。2.2可視門鈴系統(tǒng)的工作原理 當訪客將按下門鈴時,可視門鈴自動攝下訪客圖像。門鈴系統(tǒng)將訪客信息(這里指訪客圖像)傳到住戶的系統(tǒng)。住戶接到呼叫后,根據(jù)傳輸過來的訪客信息來確定是否允許該訪客進入。如果住戶不在,視頻信息將在住戶端保存;住戶回家后,就能知道有誰來訪過。住戶將確認信息(允進入或不允許進入)發(fā)送到門鈴系統(tǒng),訪客將得到住戶所確認的信息,即允許進入或不允許進入。系統(tǒng)整體結(jié)構(gòu)圖如圖2.1所示:

17、無線網(wǎng)絡服務器端客戶端 圖2.1 系統(tǒng)整體結(jié)構(gòu)圖2.3可視門鈴系統(tǒng)方案設計 本可視門鈴系統(tǒng)采用c-s模式,即有客戶端和服務器端兩部分組成,無線可視門鈴是一個基于高性能嵌入式處理器,結(jié)合 linux操作系統(tǒng),由服務器端和客戶端兩部分組成的系統(tǒng)。服務器端具體實現(xiàn)功能如下: 由攝像頭進來的輸入信號,經(jīng)過轉(zhuǎn)換后進行jpeg視頻編碼。編碼后的視頻碼流送到客戶端。具體功能如下:(1)基于高性能嵌入式處理器等硬件系統(tǒng)的加電自舉boot loader功能,具有系統(tǒng)硬件初始化和檢測,嵌入式操作系統(tǒng)或用戶程序的裝載啟動功能。(2)攝像頭驅(qū)動的加載。(3)獲取從攝像頭傳來的圖像數(shù)據(jù),并以jpeg的格式進行壓縮編碼。

18、(4)將壓縮編碼后的數(shù)據(jù)流通過無線網(wǎng)絡進行轉(zhuǎn)發(fā)。 服務器端系統(tǒng)結(jié)構(gòu)圖如圖2.1所示: s3c2410cpujtag以太網(wǎng)控制器rs232sdramflashusb camera連宿主機連互聯(lián)網(wǎng) 圖2.2 服務器端系統(tǒng)結(jié)構(gòu)圖 在客戶端,由無線網(wǎng)絡接收的數(shù)據(jù),顯示jpeg 格式的圖象。 下面是客戶端系統(tǒng)結(jié)構(gòu)示意圖: s3c2410cpujtag以太網(wǎng)控制器rs232sdramflash連宿主機連互聯(lián)網(wǎng)lcd模塊 圖2.3 客戶端系統(tǒng)結(jié)構(gòu)圖 軟件主要包括嵌入式linux移植、minigui的移植、驅(qū)動的編寫和應用程序編寫。移植后的linux 系統(tǒng)從軟件的角度來看通??梢苑殖蓚€四個層次:引導加載程序程

19、序、kernel、文件系統(tǒng)和用戶應用程序。(1) 引導加載程序程序。包括固化在固件(firmware)中的啟動代碼和bootloader 兩大部分。(2) 內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及控制內(nèi)核引導系統(tǒng)的參數(shù)。(3) 文件系統(tǒng)。包括根文件系統(tǒng)和建立于flash內(nèi)存設備之上的文件系統(tǒng)。通常用ramdisk作為根文件系統(tǒng)。它是提供管理系統(tǒng)的各種配置文件以及系統(tǒng)執(zhí)行用戶應用程序的良好的運行環(huán)境的載體。(4) 用戶應用程序。特定于用戶的應用程序,有時在用戶應用程序和內(nèi)核層之間可能還會包括一個嵌入式圖形用戶界面。 下面是典型的固態(tài)存儲設備的空間分配結(jié)構(gòu)示意圖。 根文件系統(tǒng) 內(nèi)核 啟動參數(shù)bootl

20、oader2.4核心處理器選型 由于可視門鈴需要處理圖像,所以對處理器的要求比較高,故選用在國內(nèi)使用比較廣泛的s3c2410處理器。 s3c2410處理器是samsung公司基于arm公司的arm920t處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:(1)獨立的 16kb指令cache和16kb數(shù)據(jù)cache,mmu。(2)支持tft的lcd控制器,nand閃存控制器。(3)3路uart,4路dma,4路帶pwm的 timer ,i/o口,rtc,8路10位adc,touch screen接口,iic-bus 接口,iis-bus 接口,2個usb主機,1個usb設備,sd

21、主機和mmc接口,2路spi。(4)s3c2410處理器最高可運行在203mhz。2.5 usb攝像頭的選擇 由于目前支持linux 的硬件廠商還不是很多,導致linux可以使用的攝像頭也比較少,通常在linux 下能夠使用的攝像頭主要有基于ov511 芯片的攝像頭和基于中星微 zc301 芯片的攝像頭。其中l(wèi)inux 內(nèi)核很早就能夠支持基于ov511 芯片的攝像頭。如果要使用基于中星微 zc301 芯片的攝像頭的話,則必須下載該攝像頭的驅(qū)動,然后在內(nèi)核中編譯才能使用,而且在編譯的過程中可能會碰到問題。故我們選擇了基于ov511 芯片的攝像頭。2.6是否采用硬件壓縮 在嵌入式系統(tǒng)開發(fā)中,有些功

22、能可以由硬件來實現(xiàn),也可以由軟件來實現(xiàn)。這里我們的圖像還要通過網(wǎng)絡來傳輸。我們從攝像頭獲取的是原始的圖像數(shù)據(jù),數(shù)據(jù)容量很大,不適合直接拿來傳輸,因此我們需要對這些圖像數(shù)據(jù)進行壓縮。有很多的壓縮算法可供我們選擇,我們采用jpeg 方式。這可以交給專門的壓縮芯片來解決,也可以采用軟件壓縮。采用硬件壓縮成本較高,但可靠性高,效率高,而采用軟件壓縮則可以降低成本。由于可視門鈴在大多數(shù)時候都處于休眠狀態(tài),只有訪客到來時才會獲取圖像,且不是實時監(jiān)控,故對圖像的壓縮和傳輸要求不高,故這里采用軟件壓縮的方法。 第3 章 開發(fā)環(huán)境的建立3.1嵌入式開發(fā)環(huán)境概述 絕大多數(shù)linux的軟件開發(fā)都以native方式進

23、行,即本機開發(fā)、調(diào)試,本機運行的方式。這種方式通常不適于嵌入式系統(tǒng)的軟件開發(fā),因為對于嵌入式系統(tǒng)的開發(fā),它沒有足夠的資源在本機(即嵌入式系統(tǒng)平臺)運行開發(fā)工具和調(diào)試工具。通常的嵌入式系統(tǒng)軟件開發(fā)采用交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機主機上,對應的開發(fā)板叫做目標板。通常宿主機和目標板上的處理器不同,宿主機通常為intel處理器,而目標板為 samsung s3c2410,所以程序需要使用針對處理器特點的編譯器才能生成在相應平臺上可運行的代碼。gnu編譯器提供這樣的功能,在編譯時,可以選擇開發(fā)所需的宿主機和目標機,從而建立開發(fā)環(huán)境。在進行嵌入式開發(fā)前的第一步工作就是把一臺pc機作為宿

24、主機開發(fā)并在其上安裝指定的操作系統(tǒng)。對于嵌入式 linux,宿主機pc上應安裝linux系統(tǒng)。之后,在宿主機上建立交叉編譯調(diào)試的開發(fā)環(huán)境。3.2 安裝交叉編譯工具鏈 在pc 機(宿主機)上,linux 已經(jīng)成為優(yōu)秀的計算機操作系統(tǒng),各種linux 發(fā)行版本,可以直接在pc 上安裝,功能十分強大。我們選用的 linux 發(fā)行版本,是redhat enterprise 3 as, 是基于2.6.9 版本的linux 內(nèi)核,它很容易上手,安裝它也很簡單,有和windows 一樣友好的安裝界面。這里就不再詳述了。 linux 使用gun 的工具,社區(qū)的開發(fā)者已經(jīng)編譯出了常用體系結(jié)構(gòu)的工具鏈,從inte

25、rnet 上就可以下載。我們可以下載這些工具,建立交叉開發(fā)環(huán)境,也可以自己手動編譯新的工具鏈。由于自己手動編譯新的工具鏈,有很多版本兼容的問題,現(xiàn)在網(wǎng)上很容易下載已經(jīng)作做好的工具鏈,在這項工作上浪費時間似乎已沒有任何意義。 這里我們直接采用已有的交叉工具鏈arm-elf-tools-20030314.sh 。在shell 下執(zhí)行如下命令:rootsunlife zhc#sh arm-elf-tools-20030314.sh 即可安裝。 交叉編譯器產(chǎn)生能夠運行在目標板上的代碼。 下面是交叉編譯的示意圖: 圖3.1 交叉編譯示意圖3.3設置tftp 服務器tftp協(xié)議是一個簡單的基于udp文件傳

26、輸協(xié)議,其實現(xiàn)比較簡單,使用方便。tftp服務在linu上有客戶端和服務器端兩個軟件包。可以先看看你的pc機器上是否已經(jīng)安裝了tftp客戶端和服務器端:rootsunlife # rpm -q tftptftp-0.39-1rootsunlife # rpm -q tftp-servertftp-server-0.39-1rootsunlife # 如果已經(jīng)安裝,就可以配置它了。tftp可以通過圖形化的界面來配置。也可以手工配置。當然操作要有root權(quán)限,手工修改tftp配置文件,可以定制tftp服務。其配置文件/etc/xintd.d/tftp內(nèi)容如下:rootsunlife # cat /

27、etc/xinetd.d/tftp#default: off#description: the tftp server serves files using the trivial file transfer# protocol. the tftp protocol is often used to boot diskless # workstations, download configuration files to network-aware printers,# and to start the installation process for some operating syste

28、ms.service tftp disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 1002 flags = ipv4rootsunlife #tftp服務器默認把/tftpboot作為輸出文件的根目錄,當然你也可以換成其他目錄。 tftp服務器默認是關閉的。所以要將disable設為no.server是指定tftp服務器的服務器程序為/usr/sbin

29、/in.tftpd(它是一個守護進程)。 修改配置以后,就要重新啟動tftp服務:rootsunlife # /etc/init.d/xinetd restart 停止 xinetd: 確定 啟動 xinetd: 確定 rootsunlife #即可。3.4設置minicomlinux系統(tǒng)下通常使用minicom串口通信工具,就像windows下的超級終端。由于minicom不是圖形窗口的工具,操作起來要麻煩一些。使用minicom串口終端之前,先要配置參數(shù)。minicom的配置界面是菜單方式。在shell命令下執(zhí)行“minicom -s”命令,注意minicom程序要訪問串口設備,需要以ro

30、ot 的權(quán)限操作。選擇“serial port setup”菜單項,根據(jù)目標板的串口通訊參數(shù)設置。這些配置項都有快捷鍵,可以通過相應的按鍵選擇進入子項.選擇要使用的串口設備,這里選擇/dev/ttys0,即串口1,設置波特率為115200, 8位有效數(shù)據(jù),無奇偶校驗,無數(shù)據(jù)流控制。保存配置,退出。minicom 的配置參數(shù)缺省保存在/etc/minirc.df1 文件中,內(nèi)容如下:rootsunlife etc# cat minirc.dfl# machine-generated file - use minicom -s to change parameters.pr port /dev/t

31、tys0pu baudrate 115200pr bits 8pr parity npr stopbits 1pu minitpu mresetpu rtscts norootsunlife etc#在shell命令下執(zhí)行“minicom ”命令,進入minicom 控制臺。3.5使用 u-boot 3.5.1 bootloader概述 前面宿主機上的開發(fā)環(huán)境已基本搭建起來,可是目標板上還什么都沒有。對于計算機系統(tǒng)來說,從開機上電到操作系統(tǒng)啟動需要一個引導過程。嵌入式linux系統(tǒng)同樣離不開引導程序,這個引導程序就叫做bootloader (引導加載程序)。 bootloader 是系統(tǒng)上電后

32、運行的第一段代碼。一般它只在系統(tǒng)啟動的時運行非常短的時間,但對于嵌入式系統(tǒng)來說,這是一個非常重要的系統(tǒng)組成部分。構(gòu)建或移植一個bootloader 在嵌入式開發(fā)中是一個很普通的任務。在pc 中,引導加載程序有bios 和位于硬盤mbr 中的操作系統(tǒng)引導加載程序一起組成。bios 在完成硬件檢測和資源分配后,將硬盤mbr 中的引導加載程序讀到系統(tǒng)的ram 中,然后將控制權(quán)交給操作系統(tǒng)引導程序。引導加載程序的主要運行任務就是將內(nèi)核從硬盤上讀到ram 中,然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,即開始啟動操作系統(tǒng)。 在嵌入式系統(tǒng)中,通常并沒有像bios 那樣的固件程序。因此在一般典型的系統(tǒng)中,整個系統(tǒng)的加載啟

33、動任務就完全由bootloader 來完成。在一個基于arm 的嵌入式系統(tǒng)中,系統(tǒng)在上電復位時通常都從地址0x00000000 處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的bootloader 通過這段小程序可以初始化硬件設備,建立內(nèi)存的空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設置到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)準備好正確的環(huán)境。對于嵌入式系統(tǒng),bootloader是基于特定硬件平臺來實現(xiàn)的。因此,幾乎不可能為所有的嵌入式系統(tǒng)建立一個通用的bootloader ,不同的處理器架構(gòu)都有不同的bootloader 。bootloader不但依賴于cpu 的體系結(jié)構(gòu),而且依賴于嵌入式系統(tǒng)板極設

34、備的配置。對于2塊不同的嵌入式板而言。即使它們使用同一種處理器,要想讓運行在一塊板子的bootloader程序也運行在另一塊板子上,一般也都需要修改 bootloader的源程序。反過來,大部分bootloader 仍然具有很多共性,某些bootloader 也能夠支持多種體系結(jié)構(gòu)的嵌入式系統(tǒng)。例如: u-boot 就同時支持powerpc 、 arm、 mips 和x86 等體系結(jié)構(gòu),支持的板子有上百種。通常,它們都能夠自動從存儲介質(zhì)上啟動,都能夠引導操作系統(tǒng)啟動,并且大部分都可以支持串口和以太網(wǎng)口。主機和目標機之間一般都有串口可以連接, bootloader 軟件通常會通過串口來輸入輸出。

35、例如: 輸出出錯或者執(zhí)行結(jié)果到串口終端,從串口讀取用戶控制命令等。大多數(shù) bootloader 都包含兩種不同的模式:(1)啟動加載模式在這種模式下, bootloader 從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到ram 中運行,整個過程并沒有用戶的介入。這種模式是 bootloader 的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布時, bootloader 必須工作在這種方式下。(2)下載模式在這種模式下,目標機上的 bootloader 將通過串口或網(wǎng)絡等通信手段從開發(fā)主機上下載內(nèi)核映象和根文件系統(tǒng)等到ram 中,然后可以再被 bootloader 下載到目標機上的固態(tài)存儲媒介中,或者直接進

36、行系統(tǒng)的引導。前一種功能通常用于第一次燒寫內(nèi)核與根文件系統(tǒng)到固態(tài)存儲媒介中或者以后的系統(tǒng)更新時使用,后者多用于開發(fā)人員在前期開發(fā)的過程中,工作于這種模式下的 bootloader 通常都會向它的終端用戶提供一個簡單的命令行接口。bootloader 是嚴重依賴于硬件而實現(xiàn)的,每種不同體系結(jié)構(gòu)的處理器都有不同的 bootloader 。不過 bootloader 的發(fā)展也趨于支持多種體系結(jié)構(gòu),比如u-boot 從最初的只支持powerpc ,到目前同時支持powerpc 、arm、 mips、 x86 等多種體系結(jié)構(gòu)。除了依賴于處理器的體系結(jié)構(gòu)外,對于兩塊不同的嵌入式板而言,即使它們是基于同一種

37、處理器而構(gòu)建的,要想讓運行在一塊板子上的 bootloader 程序也能運行在另一塊板子上,通常也都需要對 bootloader 進行移植工作。所以在嵌入式世界里建立一個通用的 bootloader 幾乎是不可能的。于是出現(xiàn)多種引導加載程序,如 armboot、 blob、 redboot、 vivi 和u-boot 等。bootloader 的啟動流程。bootloader 啟動大多數(shù)都分為兩個階段。第一個階段主要包含依賴于cpu 的體系結(jié)構(gòu)硬件處始化的代碼,通常都用匯編語言來實現(xiàn)。這個階段的任務有:(1)基本的硬件設備初始化(屏蔽所有的中斷,關閉處理器內(nèi)部指令/數(shù)據(jù)cache 等)。(2)

38、為第二階段準備ram 空間。(3)如果是從某個固態(tài)存儲媒介中,則復制 bootloader 的第二階段代碼到 ram。(4)設置堆棧。(5)跳轉(zhuǎn)到第二階段的c 程序入口點。第二階段通常由c 語言來完成。以便實現(xiàn)更復雜的功能。也使程序有更好的可讀性和可移植性,這個階段的任務有:(1)初始化本階段要使用到的硬件設備。(2)檢測系統(tǒng)內(nèi)存映射。(3)將內(nèi)核映象和根文件系統(tǒng)從flash 讀到ram 。(4)為內(nèi)核設置啟動參數(shù)。(5)調(diào)用內(nèi)核。bootloader 調(diào)用linux 內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處。3.5.2 燒寫u-boot上面介紹了bootloader 的工作原理,在本設計中,

39、我們采用了已經(jīng)移植好的u-boot ,把u-boot 燒寫到開發(fā)板的flash 中去,最簡單的方式就是通過jtag 電纜,轉(zhuǎn)接到計算機并口聯(lián)接,也可以通過串口或仿真器來燒寫bootloader 。燒寫完畢后,把目標板和宿主機用串口線連起來,把目標板和hub 用網(wǎng)線連起來。在宿主機端打開minicom,給開發(fā)板上電,就會出現(xiàn)如下界面:u-boot 1.1.4 (feb 28 2007 - 21:28:24) u-boot code: 33f80000 - 33f9dc88 bss: - 33fa22f8 ram configuration: bank #0: 30000000 64 mb nor

40、 flash: 512 kb nand flash: 64 mbin: serial out: serial err: serial hit any key to stop autoboot: 03.5.2設置u-boot 的參數(shù)設置tftp服務器(即宿主機)的ip 地址:sunlife= setenv severip 35 設置目標板自己的ip 地址和子網(wǎng)掩碼:sunlife=setenv ipaddr 97 netmask 28保存設置的參數(shù):sunlife=saveenv獲取幫助:sunlife=help3.5.3

41、宿主機和目標板的連接一般來說,宿主機和目標板是通過串口或者網(wǎng)口的方式來連接的,或者兩者兼有。我們采用的是串口和網(wǎng)口連接的方式。把宿主機的串口1和目標板的串口1用串口線連接起來。然后把宿主機的網(wǎng)線和開發(fā)板的網(wǎng)線插在同一個hub 上即可。至此,嵌入式開發(fā)環(huán)境已經(jīng)搭建起來了。 宿主機與目標板的連接示意圖如下: 宿主機 ,linux 服務器,nfs,tftp 服務開發(fā)板hubhost局域網(wǎng)串口jtagtarget 圖3.2 宿主機與目標板的連接示意圖 第4章 linux 內(nèi)核移植4.1 linux操作系統(tǒng)介紹linux是一種很受歡迎的操作系統(tǒng),它與unix系統(tǒng)兼容,開放源代碼,它原本被設計為桌面系統(tǒng),

42、現(xiàn)在廣泛應用于服務器領域。而更大的影響在于它正 逐漸的應用于嵌入式設備。但是它仍保持了桌面linux操作系統(tǒng)的主要的優(yōu)點,如穩(wěn)定性、強大的網(wǎng)絡功能和出色的文件系統(tǒng)支持等。linux有一個完整的 tcp/ip協(xié)議棧,同時對其他許多的網(wǎng)絡協(xié)議都提供支持。這些網(wǎng)絡協(xié)議都在linux上得到了很好的實現(xiàn)。linux可以稱作是一個針對嵌入式系統(tǒng)的優(yōu)秀網(wǎng)絡操作系統(tǒng)。linux以其優(yōu)異的性能、免費開放的代碼等優(yōu)點,博得眾多嵌入式開發(fā)者的青睞,和過去基于簡單rtos甚至沒有使用任何操作系統(tǒng)的嵌入式程序設計相比,基于linux這樣的成熟的、高效的、健壯 的、可靠的、模塊化的、易于配置的操作系統(tǒng)來開發(fā)自己的應用程序

43、,無疑能進一步提高效率,并具有很好的可移植性。4.2 裁剪內(nèi)核 嵌入式linux一般是指對標準linux發(fā)行版本進行小型化裁剪處理之后,適合于特定嵌入式應用場合的專用linux操作系統(tǒng)。在前面我們已經(jīng)提到嵌入式系統(tǒng)通常是資源受限的系統(tǒng),無論是處理器計算能力還是ram或其他存儲器容量都比較“小”。但是一般的linux發(fā)行版都非常龐大,很難用于只有有限存儲空間的嵌入式設備。因此,如何創(chuàng)建一個小型化的linux作為操作系統(tǒng)開發(fā)成為首先需要考慮的問題。所以我們必須對linux系統(tǒng)進行裁剪。linux系統(tǒng)大致有以下4種主要的裁剪技術,使用這些技術可以有效地減小系統(tǒng)的尺寸且不會影響系統(tǒng)的性能。(1)刪除冗

44、余文件。一般的linux發(fā)行版中都包含很多幫助文檔、輔助程序、配置文件和數(shù)據(jù)模板,在嵌入式系統(tǒng)中這些文件都是不必要的,完全可以刪除。甚至連 配置文件中的大量注釋也都可以被去掉。(2)共享庫裁剪。嵌入式系統(tǒng)的應用程序是有限的,共享庫中就可能有很多永遠不會被用到的冗余代碼,這些代碼就可以被刪除。(3)采用具有同樣功能的替代軟件包。linux上有許多具有相似功能的軟件包,可以選擇其中占存儲空間較小的軟件包并其移植到嵌入式設備上,用來代替原來占空 間較大那些的軟件包。(4)修改源碼。包括重新配置、編譯軟件包,去掉不需要的功能;增加軟件的模塊性,從而有利于提高裁剪效率;重新配置內(nèi)核,去掉不需要的驅(qū)動和模

45、塊。 在嵌入式開發(fā)中普遍采用的辦法是第4種,即重新配置、編譯軟件包,去掉不需要的功能。 配置內(nèi)核的命令有以下幾個:(1)make config(2)make oldconfig(3)make menuconfig(4)make xconfigmake config 是文本配置方式;make menuconfig 是菜單配置方式;make xconfig 是圖形界面配置方式。make menuconfig 命令可以在現(xiàn)有內(nèi)核設置文件的基礎上建立一個新的內(nèi)核設置文件。無論上面哪個命令都將產(chǎn)生 .config 文件,并在每一個c 源文件中加上,使define 的宏config_xxx 起全局性的作用

46、。 在這里,我們需要根據(jù)可視門鈴系統(tǒng)的要求來配置內(nèi)核,在我們的可視門鈴系統(tǒng)使用到了usb攝像頭,因此在linux 配置過程中,需要選中對usb 的支持,對ov511 驅(qū)動的支持,由于要進行圖像采集,因此需要支持vedio4linux ,最后我們使用了minigui , 故我們還需要選中對framebuffer 的支持。下面說明配置內(nèi)核的步驟:rootsunlife zhc#make menuconfig 選擇如下兩項:*customize kernel settings*customize vendor/user settings 根據(jù)需要配置內(nèi)核: 選擇對usb 的支持* support f

47、or usb - usb host controller drivers ehci hcd (usb 2.0) support (experimental)* uhci (intel piix4, via, .) support * uhci alternate driver (je) support * ohci (compaq, imacs, opti, sis, ali, .) support 選擇對 ov511 的支持- usb multimedia devices * usb ov511 camera support 由于我們需要移植minigui,故需要選擇 frame buffe

48、r 的支持。* support frame buffer devices (new) * support for frame buffer devices (experimental) (new) 選擇對 v4l 的支持*multimedia devices*video for linux 創(chuàng)建內(nèi)核依賴關系:rootsunlife zhc#make dep 下面是編譯內(nèi)核:rootsunlife zhc#make 執(zhí)行以上步驟后,我們將在images 目錄找到已生成的內(nèi)核文件。4.3測試編譯完畢的內(nèi)核 經(jīng)過上面的步驟后,我們就得到了內(nèi)核映象。接下來就可以運行它了。在宿主機上的shell 中鍵入

49、minicom 。給開發(fā)板上電,你將在minicom中看到如下啟動信息:u-boot 1.1.4 (feb 28 2007 - 21:28:24) u-boot code: 33f80000 - 33f9dc88 bss: - 33fa22f8 ram configuration: bank #0: 30000000 64 mb nor flash: 512 kb nand flash: 64 mbin: serial out: serial err: serial hit any key to stop autoboot: 0 將內(nèi)核從tftp服務器的根目錄下載到開發(fā)板上:sunlife=

50、tftp tftp from server 35; our ip address is 97filename zimage. load address: 0x30008000 loading: # # # done bytes transferred = 1263260 (13469c hex) 啟動內(nèi)核:sunlife= go 0xc008000# starting application at 0x30008000 . uncompressing linux. done, booting the kernel. linux version 2

51、.6.14 (rootsunlife) (gcc version 3.4.1) #21 fri oct 20 17:20:39 cst 2006 cpu: arm920tid(wb) 41129200 revision 0 (armv4t) machine: smdk2410 atag_initrd is deprecated; please update your bootloader. memory policy: ecc disabled, data cache writeback cpu s3c2410a (id 0x32410002) s3c2410: core 202.800 mhz, memory 101.400 mhz, peripheral 50.700 mhz s3c2410 clocks, (c) 2004 simtec electronics clock: slow mode (1.500 mhz), fast, mpll on, upll on . inode-cache hash table entries: 8192 (order: 3, 32768 bytes) memory: 64mb = 64mb total memory: 62208kb available (1924k code, 529k data, 108k init) mount-c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論