版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、成都學(xué)院(成都大學(xué))CHENGDU UNIVERSITY嵌入式系統(tǒng)課程設(shè)計報告題 目 有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)學(xué)院電子信息工程學(xué)院專業(yè)電子信息工程(本)學(xué)生姓名周超學(xué) 號_年級2011級指導(dǎo)教師徐 職稱 副教授二一四年六月有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)摘要:嵌入式系統(tǒng)大規(guī)模的應(yīng)用于通信、測試、工控等多個領(lǐng)域,進入千家萬戶。本文基于嵌入 式硬件平臺,完成了有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)。文章從設(shè)計目的、設(shè)計要求、嵌入式系 統(tǒng)介紹、Linux操作系統(tǒng)介紹、uCIinux操作系統(tǒng)介紹、系統(tǒng)剪裁與編譯等多個方面介紹本系統(tǒng)。實現(xiàn)了在該操作系統(tǒng)下多任務(wù)程序開發(fā)應(yīng)用,并且進行編譯,能夠在超級終端顯示信
2、息,從而達 到課程設(shè)計要求。關(guān)鍵詞:嵌入式;操作系統(tǒng);Linux ; uCLinux ;目錄第1章緒論 01.1研究背景 01.2研究內(nèi)容 0第2章有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)概述 12.1有操作系統(tǒng)的軟件開發(fā)流程 12.2有操作系統(tǒng)的軟件運行模式 1第3章LINUX操作系統(tǒng)簡介 53.1 LINUX 操作系統(tǒng)介紹 53.2 LINUX 操作系統(tǒng)的 GCC編譯器 5第4章UCLINUX操作系統(tǒng)簡介 7第5章開發(fā)環(huán)境的建立 85.1 建立主機 LINUX平臺 85.2安裝交叉編譯工具 11第6章UCLINUX裁剪與編譯 12第7章操作系統(tǒng)下多任務(wù)應(yīng)用程序開發(fā) 157.1操作系統(tǒng)下多任務(wù)應(yīng)用程序
3、的開發(fā)流程 157.2操作系統(tǒng)下多任務(wù)應(yīng)用程序的開發(fā)環(huán)境 157.3操作系統(tǒng)下多任務(wù)應(yīng)用程序的開發(fā) 15編寫串口、 LED應(yīng)用程序 15添加應(yīng)用程序至內(nèi)核,使其隨內(nèi)核編譯 20結(jié)論 22參考文獻 24第1章緒論1.1研究背景隨著信息技術(shù)的迅猛發(fā)展,21世紀(jì)以來,人類已進入后PC時代。32位嵌入式系統(tǒng)作為以應(yīng)用為核心、軟硬件可裁剪,并能滿足實際系統(tǒng)對功能、可靠性、成本、體積和功耗有特殊要求的 專用計算機系統(tǒng),已被廣泛應(yīng)用于通信、雷達、測試、工業(yè)控制、消費電子等眾多領(lǐng)域,正進入 千家萬戶,成為后 PC時代的主力軍。最開始出現(xiàn)的嵌入式系統(tǒng)很多都不采用操作系統(tǒng),它們只是為了實現(xiàn)某個控制功能,使用一個簡
4、單的循環(huán)控制對外界的控制請求進行處理。當(dāng)應(yīng)用系統(tǒng)越來越復(fù)雜、利用的范圍越來越廣泛 的時候,每添加一項新的功能,都可能需要從頭開始設(shè)計。沒有操作系統(tǒng)已經(jīng)成為了一個最大的 缺點。目前低層系統(tǒng)和硬件平臺經(jīng)過若干年的研究,已經(jīng)相對比較成熟,實現(xiàn)各種功能的芯片應(yīng) 有盡有。而且巨大的市場需求給我們提供了學(xué)習(xí)研發(fā)的資金和技術(shù)力量。從軟件方面講,也有相 當(dāng)部分的成熟軟件系統(tǒng)。國外商品化的嵌入式實時操作系統(tǒng),已進入我國市場的有WindRiver、Microsoft 、QNX和 Nuclear等產(chǎn)品。如今,嵌入式系統(tǒng)的應(yīng)用前景非常廣泛,人們會無時無處不 接觸到嵌入式產(chǎn)品,從家里洗衣機、電冰箱,到作為交通工具的自行
5、車、小汽車,到辦公室里的 遠程會議系統(tǒng)等,特別是以藍牙為代表的小范圍無線接入?yún)f(xié)議的出現(xiàn),使嵌入式廣泛被接收。本文主要研究有操作系統(tǒng)的嵌入式軟件開發(fā),達到多功能應(yīng)用要求,拓寬和加深我們對已學(xué)過的理論知識的理解,從而掌握比較全面的專業(yè)知識,進一步熟悉嵌入式系統(tǒng)軟件開發(fā)流程,更 深刻地理解嵌入式系統(tǒng)原理和相關(guān)接口電路的實現(xiàn)等。1.2研究內(nèi)容(1)了解有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)流程;(2)了解Linux操作系統(tǒng)的基本知識;(3)熟悉Linux操作系統(tǒng)的常用命令;(4)掌握Linux操作系統(tǒng)的VI編輯器用法;(5)掌握Linux操作系統(tǒng)的gcc編譯器用法;(6)了解uCLinux操作系統(tǒng)的基本知識;
6、(7)掌握uCLinux操作系統(tǒng)內(nèi)核編譯環(huán)境的建立;(8)熟悉uCLinux內(nèi)核編譯步驟;(9)掌握將編譯好的內(nèi)核下載到系統(tǒng)運行的步驟;(10)掌握uCIinux多任務(wù)編程與自啟動第2章 有操作系統(tǒng)的嵌入式系統(tǒng)軟件開發(fā)概述2.1有操作系統(tǒng)的軟件開發(fā)流程在使用嵌入式操作系統(tǒng)能夠應(yīng)對更復(fù)雜的任務(wù),軟件也具有更好的可移植性和可重用性。在軟 件開發(fā)之前,應(yīng)首先建立交叉開發(fā)環(huán)境,主要需要如表2-1所示1。表2-1 建立uClinux交叉開發(fā)環(huán)境軟件功能VMware5.5虛擬機平臺Red Hat9Linux操作系統(tǒng)ADS 1.2用于通過JTAG接口燒寫映像文件至 FlashARM-elf-tools交叉編
7、譯工具鏈各個軟件之間的構(gòu)成關(guān)系如圖2-1所示。(1) 在PC上的Windows操作系統(tǒng)之上,使用 VMware5.5虛擬機軟件來建立虛擬硬件平臺;(2) 將虛擬機器操作系統(tǒng)Red Hat Linux安裝在此虛擬平臺上;(3) 用ADS軟件通過JTAG接口下載操作系統(tǒng)映像文件至實驗板的Flash存儲器;(4) 在虛擬機操作系統(tǒng)上安裝交叉編譯工具鏈ARM-elf-tools-20030314.sh。虛擬機操作系統(tǒng)Red Hat Linux圖2-1開發(fā)環(huán)境軟件構(gòu)成1軟件的開發(fā)流程如圖 2-2所示。由圖可見,在開發(fā)嵌入式操作系統(tǒng)及應(yīng)用軟件之前,應(yīng)首先將操作系統(tǒng)引導(dǎo)程序燒寫到Flash的起始地址0x0處
8、,此處的引導(dǎo)程序與無操作系統(tǒng)的引導(dǎo)程序唯一不同的是:系統(tǒng)初始化完畢之后應(yīng)當(dāng)跳轉(zhuǎn)到操作系統(tǒng)的起始地址0x1 0000處,而不是應(yīng)用程序的入口。2.2有操作系統(tǒng)的軟件運行模式在運行操作系統(tǒng)的嵌入式系統(tǒng)中,主要包含了 BootLoader引導(dǎo)程序、操作系統(tǒng)和應(yīng)用程序這三種類型的程序。其中引導(dǎo)程序是嵌入式軟件系統(tǒng)中必不可少的部分,在引導(dǎo)程序運行完成之后,嵌入式系統(tǒng)的硬件被設(shè)置的到合適的狀態(tài),從而引導(dǎo)操作系統(tǒng)的系統(tǒng)運行。操作系統(tǒng)啟動后,才能進步運行應(yīng)用程序2圖2-2有操作系統(tǒng)的軟件開發(fā)流程這三種程序的不能組成方式和運行方式就形成了不同的軟件運行模式,有操作系統(tǒng)的嵌入式軟件運行模式如表2-2所示。表2-2
9、有操作系統(tǒng)的嵌入式運行模式編號模式ABootLoader直接引導(dǎo)操作系統(tǒng),操作系統(tǒng)與應(yīng)用程序一起編譯,應(yīng)用程序不自啟動BBootLoader直接引導(dǎo)操作系統(tǒng),操作系統(tǒng)與應(yīng)用程序一起編譯,應(yīng)用程序自啟動CBootLoader直接引導(dǎo)操作系統(tǒng),操作系統(tǒng)與應(yīng)用程序分開編譯,應(yīng)用程序通過網(wǎng)口等下載至 SDRAM中DBootLoader啟動后顯示菜單,手動引導(dǎo)操作系統(tǒng)(1)BootLoader啟動之后直接引導(dǎo)操作系統(tǒng)運行,應(yīng)用程序編譯在操作系統(tǒng)的romfs文件系統(tǒng)中,操作系統(tǒng)啟動后并不自動運行應(yīng)用程序,而是根據(jù)需要手動運行或由其他程序調(diào)用。在該模式下,BootLoader在完成系統(tǒng)初始化工作后, 修改P
10、C指針,直接跳到操作系統(tǒng)image.rom 開始的地址處,引導(dǎo)操作系統(tǒng)運行。而應(yīng)用程序和操作系統(tǒng)是一起編譯在image.rom里面,操作系統(tǒng)啟動之后,應(yīng)用程序存放在 /BEN目錄下,但是應(yīng)用程序還是需要手動運行 3。(2)BootLoader啟動之后直接引導(dǎo)操作系統(tǒng)運行,應(yīng)用程序編譯在操作系統(tǒng)的romfs文件系統(tǒng)中,操作系統(tǒng)后自動運行應(yīng)用程序,如圖2-4所示。在該模式下,BootLoader在完成系統(tǒng)初始化工作后,修改PC指針,直接跳到操作系統(tǒng)image.rom開始的地址處,引導(dǎo)操作系統(tǒng)運行。操作系統(tǒng)啟動完畢之后,會自動執(zhí)行應(yīng)用程序,主要通過uCli nu x-dist/Ve ndors/Sa
11、ms un g/4510B/rc文件中添加系統(tǒng)啟動后自動執(zhí)行應(yīng)用程序的命令來實現(xiàn):./bin/led&./bin/uart &命令后面的&符號表示在后臺執(zhí)行程序。圖2-3有操作系統(tǒng)的運行模式A0x3FF FFFFBootLoader啟動后的編址空間0x3FF 00000x120 00000x100 00000x000 0000圖2-4有操作系統(tǒng)的運行模式B0x001 0000(3) BootLoader啟動之后直接引導(dǎo)操作系統(tǒng)運行,應(yīng)用程序和操作系統(tǒng)單獨編譯,操作系統(tǒng)啟動完畢之后,通過網(wǎng)絡(luò)等通信方式將應(yīng)用程序下載到操作系統(tǒng)文件夾中,如/var/tap ,在手動運行應(yīng)用程
12、序。該方式常用于調(diào)試應(yīng)用程序,如圖2-5所示。在該模式下,BootLoader在完成系統(tǒng)初始化工作之后,修改PC指針,直接跳到操作系統(tǒng)image.rom開始的地址處,引導(dǎo)操作系統(tǒng)運行。而image.rom映像文件里面并未包含應(yīng)用程序,操作系統(tǒng)啟動之后,通過網(wǎng)口、串口等方式單獨編譯生成的應(yīng)用程序下載至操作系統(tǒng)的可寫目錄(如/Var/tmp )中,在手動運行。這種方式適合應(yīng)用程序調(diào)試,不需要每次修改應(yīng)用程序都重新編譯和燒寫操作系統(tǒng)。BootLoader啟動后的編址空間BootLoader啟動后的編址空間圖2-5有操作系統(tǒng)的運行模式C圖2-6有操作系統(tǒng)的運行模式D(4)BootLoader初始化完畢
13、之后,并不是直接就引導(dǎo)操作系統(tǒng)執(zhí)行,而是進入到一個命令行U-Boot在初始化完畢之后,界面中,可以輸入相應(yīng)命令對系統(tǒng)進行操作,也可以引導(dǎo)操作系統(tǒng)。如進入命令行界面,用戶可通過相應(yīng)命令,來控制系統(tǒng)通過串口或網(wǎng)口下載文件、燒寫Flash存儲器、測試存儲器等操作,如圖 2-6所示。在該模式下,BootLoader的功能已經(jīng)不再限于系統(tǒng)的初始化程序。目前常用的幾種通用BootLoader均提供了復(fù)雜的命令接口,可在 BootLoader中對硬件進行大量操作,已經(jīng)相當(dāng)于一個 微型操作系統(tǒng)4。第3章Linux操作系統(tǒng)簡介3.1 Linux操作系統(tǒng)介紹Linux是由芬蘭赫爾辛基大學(xué)的一名學(xué)生Lin us B
14、.Torvolds 在1991年首次編寫的。Linux是一個免費的操作系統(tǒng),用戶可以免費獲得其源代碼,并能夠隨意修改。它是在共用許可證GPL(Ge neralPublic License)保護下的自由軟件,也是好幾種版本,女口 Red Hat Linux、Slackware,以及XteamLinux等。Linux具有多任務(wù)支持、多用戶支持、多處理器支持、跨平臺支持、按需調(diào)入執(zhí)行、開放性、設(shè)備獨立性以及可靠安全性等特點5。Linux的內(nèi)核精簡而高效,其內(nèi)核的核心部分小到一張軟盤就可以裝下,通過對不需要功能的裁剪,Linux內(nèi)核完全可以小到 100KB以下。在嵌入式環(huán)境下的資源是非常有限的,所以操
15、作系統(tǒng)的目錄樹中的所有文件都應(yīng)該是系統(tǒng)所必須的文件,避免浪費存儲空間。Linux的romfs文件系統(tǒng)的根目錄結(jié)構(gòu)如圖3-1所示。圖3-1 romfs 文件結(jié)構(gòu)3.2 Linux操作系統(tǒng)的gcc編譯器gcc是GNUfi織免費C編譯器,Linux的很多發(fā)布默認安裝的就是這種。很多流行的自由軟件源代碼基本都能在 gcc編譯器下編譯運行。例如,對于一個非常簡單的 hello.c 程序,只要在Linux的 bash提示符下輸入命令即可編譯它:$ gcc -o hello hello.cgcc編譯器就會生成一個 hello的可執(zhí)行文件。在hello.c 的當(dāng)前目錄下執(zhí)行./hello.c 就可以 看到程序
16、的輸出結(jié)果。Gcc編譯器有許多選項,但對于普通用戶來說只要知道其中常用的幾個就夠了。以下列出幾個常用的選項:-o選項表示要求編譯器生成的指定文件名的可執(zhí)行文件;-c選項表示只要求編譯器進行編譯,而不要進行銜接,生成源文件的文件名命名但把其后綴有.c或.cc變成.o的目標(biāo)文件;-g選項要求編譯器在編譯的時候提供以后對程序進行調(diào)試的信息;-E選項表示編譯器對源文件只進行預(yù)處理就停止,而不做編譯、匯編和銜接;-S選項表示編譯器只進行編譯,而不做匯編和銜接;可以使生成的可執(zhí)行-O選項是編譯器對程序提供的編譯優(yōu)化選項,在編譯的時候使用該選項,文件的執(zhí)行效率提高;-Wall選項制定產(chǎn)生全部的警告信息。第4
17、章uCIinux操作系統(tǒng)簡介uCIinux是一個完全符合 GNU/GPL公約的操作系統(tǒng),開放源代碼。是Lineo公司的主打產(chǎn)品。在uCIinux這個英文單詞中 u表示Micro,小的意思,C表示Control,控制的意思,所以uCIinux就是Micro-Control-Linux,字面上的理解就是”針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng)”。uCIinux從Linux 2.0/2.4內(nèi)核派生而來,沿襲了 Linux的絕大部分特性。它是專門針對沒有MM啲CPU并且為嵌入式系統(tǒng)做了許多小型化的工作。它通常用于具有很少內(nèi)存或Flash的嵌入式操作系統(tǒng)。它保留了操作系統(tǒng)的所有特性,為硬件平臺更好地運行各
18、種程序提供了保證。在GNU通用公共許可證(GNU3PL)的保證下,運行 uCIinux操作系統(tǒng)的用戶可以使用幾乎所有的Linux API函數(shù),不會因為沒有MMI而受到影響。uCIi nux的基本架構(gòu)如圖4-1所示。系統(tǒng)調(diào)用處理函數(shù)內(nèi) 核 初 始 化1!虛擬文件系統(tǒng)管理模塊1iSocket 驅(qū)動1:文件系統(tǒng)模塊1i網(wǎng)絡(luò)模塊1 - - - - 調(diào) 度 器網(wǎng)絡(luò)設(shè)備驅(qū)動字符塊設(shè)備驅(qū)動設(shè)備驅(qū)動Mass存儲設(shè)備驅(qū)動驅(qū)動進內(nèi)程存管管理理模模塊塊C庫 函 數(shù)BootLoader捕獲 Handler圖4-1 uCIinux的基本構(gòu)架uCIinux的架構(gòu)與標(biāo)準(zhǔn)Linux基本相同,只是對內(nèi)存管理和進程管理進行了改寫
19、,以滿足無MMI處理器的要求。uCIinux針對沒有MMU勺處理器進行設(shè)計,不能使用處理器的虛擬內(nèi)存管理技 術(shù),直接通過物理地址訪問存儲器,系統(tǒng)進程和用戶進程也是運行在同一存儲器空間。第5章開發(fā)環(huán)境的建立5.1建立主機Linux平臺建立交叉開發(fā)環(huán)境的第一步,是建立一個Linux平臺來對應(yīng)用程序和內(nèi)核進行編譯,這里使用虛擬機軟件 VMware和Red Hat Linux 來搭建一個在 Windows環(huán)境中運行的 Linux平臺。(1)在PC上安裝并運行 VMware選擇NEW Virtual Machine 命令新建虛擬機,選擇Custom自定義選項,如圖 5-1所示;(2)單擊"下一
20、步”按鈕,選擇 Linux版本為Red Hat Linux ,為操作系統(tǒng)選擇名字和安裝路徑,如圖5-2所示;(3)為系統(tǒng)選擇內(nèi)存,一般為 256MB網(wǎng)絡(luò)連接類型選擇第一種,如圖5-3所示;Man wa rtfcr ataiAJHM mill耳 力.naalri一匚taf-Ivy V-l£ lilMl lacfilM Viscid=耳rX|La C*.tiuilKpV vd*jl1 d. jmaLn 匕 口 kJ. l -it jf chj n«H ti t Muu.f9 cb i:Mrm itHS niM:BEpFwr -J如j uj-m怙EM'twIuty * r
21、wwff vf hr3a rdLkb*d *UJb UPb “百hl >wf 1'itarlnvtVrii'ii rri-iha wfi cm 曲:川:二:庁斤寸CrratT a i-ievm ihjalmacH上匾Thz ofTiaiDn devcea nrd :ct*igLialianae Ha附Thi Miiua m出治e ixil not b£ t疔口刖|卜世w忡冷恢沁住味皿2 K 丘石H g rrm 31 K £IE l K E Wnrkr niiDn d.jfC« EiudlonnChQi»etlMi mWocilydi
22、 n$d 修耳詢lual rnecHne W addiicnsl dt>irc5 dr sprolir cng-rafc*! orlinrr. m #R.hed scciMit i 匕二心 w廠“d E"hjg圖5-1虛擬機安裝過程(1)圖5-2虛擬機安裝過程(2)(4) 選擇SCSI,從硬盤分出4GB的容量給Linux使用,如圖5-4所示。圖5-3虛擬機安裝過程(3)圖5-4虛擬機安裝過程(4)(5)定義虛擬機文件名,此時一個新的 Virtual Machine就設(shè)定完成了,如圖5-5所示。Hn I |Pi.ir|B! - M u Vprb'irl i<vi匚-
23、衍'圖5-5虛擬機安裝過程(5)接下來開始安裝 Red Hat Linux,在虛擬機軟件中執(zhí)行 Start virtualmachine,系統(tǒng)啟動Linux安裝程序,如圖 5-6所示,按照提示安裝Linux,采用默認選項即可。由于Linux與Windows采用不同的文件系統(tǒng),一般在 Linux下無法直接訪問 Windows的硬盤區(qū)分,而以后的實驗需要在 Linux 和Windows之間進行文件交換,因此有必要在Linux虛擬機和 Windows主機之間建立一個共享文件夾。首先啟動虛擬機,進入系統(tǒng)后選擇菜單VMh in stall VMware tools,之后再Linux的桌面會出現(xiàn)一
24、個名為Vmware-Tools的文件夾,如圖5-7所示。如果沒有自動出現(xiàn)這樣的文件夾,可以采用U盤等途徑將 VMware安裝目錄里面的linux.iso文件復(fù)制到Linux系統(tǒng)下,掛載此文件即可。圖5-6 開始安裝 Red Hat Linux圖 5-7 安裝 VMware Tools這個文件夾中含有兩種格式的安裝文件:rpm和tar.gz,前者可以直接運行安裝,后者需要解壓縮后才能進行安裝。由于光驅(qū)文件夾是不可寫的,因此需將復(fù)制到可寫目錄里(如用戶主目錄),再輸入命令解壓到當(dāng)前目錄下的VMware-tool-distrib文件夾中,運行其中的VMware-insll.pl文件開始安裝。安裝完畢
25、后,在mnt目錄下會自動建立一個名為hgfs的文件夾,通過這個目錄,就可以在Linux下訪問對應(yīng)的 Windows文件夾。進入菜單 V setting ,在 Options選項卡下選擇 Share Folders ,單擊 Add指定一個Windows下的文件夾作為與Linux的共享文件,如圖5-8所示。這樣在 Linux下的mnthgfs 目錄中,就可以訪問到這里指定的Windows目錄,并可以進行讀寫操作。圖5-8設(shè)定共享目錄VMwareTool安裝之后,VMware能夠自動地判斷鼠標(biāo)位置是否超出虛擬機Linux的桌面范圍,如果超出了,就自動將鼠標(biāo)切換至Windows桌面。在安裝之前,按下C
26、trl加Alt鍵才能將鼠標(biāo)從虛擬機Linux中切換出來。如圖 5-9所示。5.2安裝交叉編譯工具交叉編譯是一個在平臺上生成另一個平臺上的可執(zhí)行代碼。使用交叉編譯編譯工具有多種原因,有時是因為目標(biāo)平臺上不允許或不能夠安裝所需要的編譯器;有時是因為目標(biāo)平臺資源貧乏,無法 運行所需要編譯器;有時是因為目的平臺還沒有建立,連操作系統(tǒng)都沒有,根本無法運行編譯器。要進行交叉編譯,需要在主機平臺上安裝對應(yīng)的交叉編譯工具鏈,然后用這個交叉編譯工具鏈 編譯原代碼。在Linux PC上,利用ARM-elf-tools 編譯器,可編譯出針對uCIinux平臺的可執(zhí)行代碼。從網(wǎng)上下載交叉編譯工具ARM-elf-too
27、ls-20030314.sh,并將其復(fù)制到 Linux文件夾中,使用root用戶登陸,在命令窗口中輸入#sh ARM-elf-tools-20030314.sh命令,程序會自動完成安裝過程。第6章uCIinux裁剪與編譯實驗板所用的內(nèi)核源代碼已經(jīng)針對硬件配置進行了相應(yīng)的修改,使用前需要執(zhí)行相應(yīng)的編譯命令,才能生成可執(zhí)行的內(nèi)核映像文件。uCI inux 是一個功能完善且高度可定制的嵌入操作系統(tǒng),并且具有圖形化的裁剪工具,使得裁 剪過程就像Windows下的軟件定制安裝一樣的簡單。如果只保留必需的模塊,編譯生成的壓縮內(nèi)核 image.rom只有240KB左右,不壓縮內(nèi)核image.rom也只有49
28、0KB左右,可以運行于只有512KBRAM的系統(tǒng)。uCl inux 的裁剪包括廠商產(chǎn)品選擇,內(nèi)核版本選擇,運行庫選擇,內(nèi)核配置和廠商用戶配置5步。配置的本質(zhì)是通過 make工具來設(shè)置源代碼包中各級目錄下的配置文件和make文件中的宏定義,為下一步的編譯提供前提。在Linux虛擬機下新建命令終端,進入uClinux內(nèi)核目錄/uCIinux-dist,在編譯之前首先檢查內(nèi)核的配置:輸入命令 #make menuconfig,輸入命令后會彈出界面如圖6-1所示。(1)uClinux提供了圖形界面下的操作剪裁定制選項,他們表示為:(2)Vendor/Product,選擇硬件系統(tǒng)的處理器型號,以適應(yīng)特定
29、硬件平臺的要求。這里選中Samsu ng/4510B。(3) Kernel Version ,這表明知道制定的核心來源于Linux核心的2.4版本。(4) Libc Version ,選擇特定的庫,這里選中uC-lib,該庫目前支持 ARM構(gòu)架的處理器,在它所支持的平臺上非常穩(wěn)定,體積更小。另一個選項是uClibc ,它提供更多的應(yīng)用程序接口( API),以及一些不常見的、不標(biāo)準(zhǔn)的庫程序。因此,如果有一些程序預(yù)期要用到一些少見的庫,那么需要選擇 uClibc 。(5) Default all Settings,所有選項采用默認設(shè)置。(6) Customize Kernel Settings,進
30、行內(nèi)核制定的選項。(7) Customize Ven dorseme nt/User Sett in gs,進行用戶程序的制定。(8) Update Default Ven dors Sett in gs,更新默認選項。以上選項中芯片配置、Linux內(nèi)核和庫函數(shù)選項與硬件平臺相關(guān),不需要進行修改,內(nèi)核設(shè)置 與用戶程序設(shè)置是可以進行裁剪的。對內(nèi)核進行剪裁,選中Customize Kernel Setti ngs選擇,保存并退出,內(nèi)核保存一些配置以后會進入到內(nèi)核定制菜單,如圖6-2所示。r in圖6-1內(nèi)核配置菜單BfFD-TuiirizBt rriiur<rid n| liiJilPia
31、( en kidH Writll ¥lI 4 UM lriifUd ill kmrge iion圖6-2定制用戶程序F面對一些主要的選項進行介紹,如表6-1所示。表6-1內(nèi)核定制選項選擇選項選擇內(nèi)容Loadale module support不選,調(diào)動驅(qū)動程序則需選中System TypeKernel executes from 選中 ROM; board Implementation選中S3C4510-SNDS100General setup選中Network Option,選中之后才會出現(xiàn)一下兩項,才能支持網(wǎng)絡(luò);Kernelcore format 選中 ELFNetworking
32、 options選擇 Packet socket、TCP/IP networkingNetworking device support選中 Ethernet ( 10 或 100Mb/s),并選擇子菜單內(nèi)的 Samsung4510B ethernet supportBlock devices選中 RAM disk support 、Rom disk memory block device(blkmem)File system選取 Rom file systerm suuportl;/proc file system supportCharacter devices選中 Samsung seri
33、al port support、Support for console onSamsung serial port 、 Non-standard serial port support對用戶程序進行剪裁,在界面中選中Customize Ven dors/User Sett ings選項,保存并退出,進入用戶程序定制菜單。這里一共有11個選項,每一個選項又有很多子選項。每個子選項都是個應(yīng)用程序,用戶可以根據(jù)系統(tǒng)的作用選擇相應(yīng)的應(yīng)用程序,如圖表6-2所示。表6-2用戶程序定制選項選項選擇情況Core Applications選擇 init 、enable console shell、expand
34、及子菜單的 expand should not write zerosFilesystem Applications不選Network Applications選擇 arp、boa、ifconfig 、inetd 、ping、ftpMiscellaneous Applications不選BusyBox選擇 basename insmod、hostname、post2.1Kerne modules完成內(nèi)核配置后,一次輸入下列所示命令,開始對內(nèi)核進行編譯,如表如表6-3所示表6-3內(nèi)核編譯命令步驟編號命令作用1make dep讀取配置過程生成的配置文件,創(chuàng)建對應(yīng)用配置的依賴關(guān)系時樹,從而決定哪些需
35、要編譯,哪些不需要編譯,并正確設(shè)置所需要的頭文件2make clean刪除以前內(nèi)核時留下的各種文件,以避免岀現(xiàn)一些錯誤3make lib-only編譯庫文件4make user-only編譯用戶應(yīng)用程序文件5make romfs建立romfs文件系統(tǒng)下的文件目錄6make image生成可以燒寫到 Flash并運行的image.rom內(nèi)核映像文件7make編譯完成后,在 uCIinux-dist/images下會生成三個文件,如表6-4所示。表6-4編譯生成的映像文件文件作用image.rom壓縮內(nèi)核映像文件,用于燒寫到Flash存儲器image.ram未壓縮內(nèi)核映像,可以加載到SDRAM存儲
36、器內(nèi)運行,體積較image.rom大Romfs,imgRom文件系統(tǒng),已經(jīng)包含至少兩個內(nèi)核映像中在uCIinux-dist中有一個批處理文件csc.sh,里面包含了以上內(nèi)核編譯的所有命令,用戶也可以直接執(zhí)行這個腳本文件,實現(xiàn)相同的編譯過程。#./csc.sh第7章操作系統(tǒng)下多任務(wù)應(yīng)用程序開發(fā)雖然在無操作系統(tǒng)時,也可以通過中斷、查詢等手段實現(xiàn)多個任務(wù)同時運行,但在操作系統(tǒng)下能更容易地實現(xiàn)和管理多個任務(wù),事實上,操作系統(tǒng)下的單任務(wù)和多任務(wù)程序的開發(fā)流程是相同的,而且有豐富的庫函數(shù)支持,開發(fā)難度更低,程序也具有更強的可移植性和可重用性。本課題的任務(wù)主要是實現(xiàn)閃燈程序和串口打印程序的開發(fā),以此掌握操作
37、系統(tǒng)下多任務(wù)軟件開 發(fā)的方法。7.1操作系統(tǒng)下多任務(wù)應(yīng)用程序的開發(fā)流程開發(fā)流程如表7-1所示。表7-1操作系統(tǒng)下應(yīng)用程序的開發(fā)步驟步驟1編寫程序源代碼步驟2添加應(yīng)用程序至內(nèi)核添加程序文件至內(nèi)核源代碼目錄中 為程序文件建立akefile 文件修改內(nèi)核Makefile文件 修改內(nèi)核配置文件 config.in修改內(nèi)核rc文件設(shè)置程序為自啟動步驟3編譯內(nèi)核步驟4下載內(nèi)核至Flash存儲器7.2操作系統(tǒng)下多任務(wù)應(yīng)用程序的開發(fā)環(huán)境(1) PC一臺(W indows XP/2000/98, 虛擬機L inux 系統(tǒng));(2) 實驗板一個;(3) 網(wǎng)線一根;(4) 串口線一根;(5) 超級終端程序;(6)
38、虛擬機運行 Linux操作系統(tǒng)(Red Hat Linux 8.0 以上);(7) 軟件資源為PCLinux操作系統(tǒng),uCIinux 內(nèi)核編譯工具 ARM-elf-tools-20030314.shuClinux 內(nèi)核源代碼 、ADS集成開發(fā)環(huán)境。7.3操作系統(tǒng)下多任務(wù)應(yīng)用程序的開發(fā)編寫串口、 LED應(yīng)用程序首先在Linux下編寫應(yīng)用程序源代碼led.c、uart.c,分別實現(xiàn)閃燈和向超級終端發(fā)送字符的功能。led.c源代碼如下:(*(volatile un sig ned *)0x03FF5008)#defi ne IOPMOD (*(volatile un sig ned *)0x03FF
39、5000)#defi ne IOPDATA void Delay(i nt i);int main( void)IOPMOD=OxOf;while(1)IOPDATA=OxOF;Delay(100000);IOPDATA=OxOO;Delay(500000);return 0;void Delay(i nt i) int j,k;for(j=0;j<i;j+) k=0;uart.c 的源代碼如下:#defi ne IOPMOD(*(volatile un sig ned *)0x03FF5000)#defi ne IOPCON(*(volatile un sig ned *)0x03FF
40、5004)#defi ne IOPDATA(*(volatile un sig ned *)0x03FF5008)#defi ne ULCON0(*(volatile un sig ned *)0x03FFD000)#defi ne UCONO(*(volatile un sig ned *)0x03FFD004)#defi ne USTAT0(*(volatile un sig ned *)0x03FFD008)#defi ne UTXBUF0(*(volatile un sig ned *)0x03FFD00c)#defi ne URXBUFO(*(volatile un sig ned
41、*)0x03FFD010)#defi ne UBRDIVO(*(volatile unsigned *)0x03FFD014)#defi ne ULCON1(*(volatile un sig ned *)0x03FFE000)#defi ne UCON1(*(volatile un sig ned *)0x03FFE004)#defi ne USTAT1(*(volatile un sig ned *)0x03FFE008)#defi ne UTXBUF1(*(volatile un sig ned *)0x03FFE00c)#defi ne URXBUF1(*(volatile un si
42、g ned *)0x03FFE010)#defi ne UBRDIV1(*(volatile unsigned *)0x03FFE014)void Delay (un sig ned in t);void InitUART(int Port,int Baudrate);void Prin tUART(i nt Port,char *s);int mai n()In itUART(0,0x500);Delay(10);for(;)Delay(10);PrintUART(0,"*威武呂蛟隊 *");Prin tUART(0, "*");Prin tUART(
43、0, "*");Prin tUART(0, "*");Prin tUART(0, "*");Prin tUART(0, "*");Prin tUART(0, "*、rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0,“*“電子信息工程");Prin tUART(O," 呂蛟 201110312308Prin tUART(0, "*");Prin
44、tUART(0,"”);Prin tUART(0,"rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0, "*");電子信息工程");Prin tUART(0," 何文藝 20111032317Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0,&quo
45、t;");Prin tUART(0,"");Prin tUART(0, "*");電子信息工程");Prin tUART(0," 鄧容 201110312316Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0,"");Prin tUART(0,"");Prin tUART(0, "*");PrintUA
46、RT(0," 劉俊彬 201110312313 電子信息工程");Prin tUART(0, "*");Prin tUART(0,"");Prin tUART(0,"rn");Delay(10);Prin tUART(0, "*");Prin tUART(O,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,“*“);Prin tUART(0,H*rn");return 0;void Prin
47、 tUART(i nt Port,char *s)if(Port=0)for(;*s!='0's+)for(;(!(USTAT 0&0 x40););UTXBUF0=*s;if(Port=1)for(;*s!='0's+)for(;(!(USTAT1 &0xx40););UTXBUF1=*s;void InitUART(int Port,int Baudrate) if(Port=0)ULCON0=0x03;UCON0=0x09; UBRDIVO=Baudrate;if(Port=1)ULCON 仁0x03;UBRDIV仁Baudrate;voi
48、d Delay (un sig ned int x)un sig ned int i,j,k;for(i=0;i<=x;i+)for(j=0;j<0xff;j+)for(k=0;k<0xff;k+);732添加應(yīng)用程序至內(nèi)核,使其隨內(nèi)核編譯在內(nèi)核源代碼目錄/uCIinux-dist/uesr下新建目錄new_ap。并將led.c、uart.c 文件復(fù)制到該目錄下。(1) 在new_ap目錄下新建 Makefile文件,添加如下代碼。EXEC = led uartOBJS = led.o uart.oall : $( EXEC$( EXEC : $( OBJS$( CC $ (
49、 LDFLAGS -o $.o $(LDLIBS)romfs:$(ROMFSINST) -e CONFIG_USER_NEW_AP_LED /b in/led$(ROMFSINST) -e CONFIG_USER_NEW_AP_UART/bi n/uartclea n:rm -f $(EXEC) *.gdb *.elf *.o為new_ap文件夾創(chuàng)建 Makefile文件,即為led.c和uart.c 的編譯提供了規(guī)則,在整個uClinux 內(nèi)核文件中,文件之間的組織是靠各個文件夾中的Makefile文件組織起來的,所以接下來還需把應(yīng)用程序的編譯規(guī)則進一步添加到上級目錄的 Makefile和系
50、統(tǒng)配置文件中去,如圖 7-1。單工煙byf曲” flif jl馬j/pjgMjjc普 主具也乳lh< 上1;厶讀 Jiru s dt -l/u .1? # 1 il魯 二讓*燉匕 輸陰出卜 fr(V 終希丄)啊御3帑腳出EJCTC - led0RJS - lad.oall;釈 KW|< DKG' j $ (KI 摯S<CC) $ LFFLUS) -O$ LRJronfs;穽 EKMZT /bin/S' FXEOc loani eJrm -f V 卜呂 *.f 11 * fdh * .n5tfKF) 綁© aCVJ 弊端轉(zhuǎn)蟲K©帝助01EXE
51、1. , = Uij r t(KJS = U4.rt .o I I; $f E:<HS' h-XfcCJ : $(<KIS>$(GC) $: LDFLCS) -o 5; -$ IMBSrurif 生;$ RCfSl>K: /hmZ$ FXE< -C IC4T13TTTl-r S 卜嚇、+.f If *.p<lb *.n|圖7-1添加應(yīng)用程序到uClinux(2) 編輯user目錄下的Makefile 文件,添加如下代碼。dir_$ (CONFIG_USER_NEW_AP_LED)+=n ew_apdir_$ (CONFIG_USER_NEW_AP_U
52、ART) +=n ew_ap(3) 編輯config目錄下的con fig. in 文件,添加如下代碼。mainmenu _opti on n ext_comme ntcomme nt ' Test Program 'bool ' Test led' CONFIG_USER_NEW_AP_LEDbool ' Test uart' CONFIG_USER_NEW_AP_UARTen dme nuConfig.in文件是整個系統(tǒng)內(nèi)核的配置文件,當(dāng)輸入 make menuconfig時,也是從這個文件讀取相關(guān)的配置信息,這一步向系統(tǒng)的配置菜單中添加了一項新的內(nèi)容Test program,而其子目錄中分別包含了 Test led 和Test uart 這兩個子選項。(4) 修改rc文件,設(shè)置程序為自啟動。修改/uCIinux-dist/Vendors/Samsung/4510B/rc文件,用vi編輯器打開該文件,在最后一行添加:./b in/led &./b in/uart &其中,./是運行命令,“ &”符號設(shè)置程序為后臺運行
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安裝工程合同的工程質(zhì)量保修3篇
- 文明遲到保證書樣本3篇
- 房屋買賣合同英文版深度解析3篇
- 房屋買賣合同被判無效后的維權(quán)途徑3篇
- 教育培訓(xùn)行業(yè)教育咨詢師聘用協(xié)議3篇
- 污水處理廠泵站維護合同
- 征收土地補償協(xié)議書
- 重慶市戶外廣告租賃合同
- 重慶川菜火鍋店裝修施工合同
- 體育館樓面信息化施工協(xié)議
- 2023年德化城建集團有限公司招聘筆試題庫及答案解析
- 一年級語文上冊百詞競賽(含答案)
- 集成電路板維修方法
- 小升初小學(xué)數(shù)學(xué)幾何圖形應(yīng)用題專題練習(xí)《巧算周長》
- 旅游學(xué)概論最新復(fù)習(xí)題庫與答案
- 水電站調(diào)速器系統(tǒng)最權(quán)威講義課件
- 膠合板生產(chǎn)工藝
- 課程設(shè)計--高位自卸汽車的設(shè)計
- 初中數(shù)學(xué)八年級上《整式的乘法及因式分解》知識點及經(jīng)典題型
- 天罡儀表CR40系列數(shù)據(jù)集中器用戶手冊
- 威尼斯狂歡節(jié)長笛鋼琴伴奏譜PierreAgricolaGeninC
評論
0/150
提交評論