秋霞电影网午夜鲁丝片无码,真人h视频免费观看视频,囯产av无码片毛片一级,免费夜色私人影院在线观看,亚洲美女综合香蕉片,亚洲aⅴ天堂av在线电影猫咪,日韩三级片网址入口

第八章 uclinux及應(yīng)用開發(fā)ok

上傳人:少*** 文檔編號:253228632 上傳時(shí)間:2024-12-09 格式:PPT 頁數(shù):75 大小:294KB
收藏 版權(quán)申訴 舉報(bào) 下載
第八章 uclinux及應(yīng)用開發(fā)ok_第1頁
第1頁 / 共75頁
第八章 uclinux及應(yīng)用開發(fā)ok_第2頁
第2頁 / 共75頁
第八章 uclinux及應(yīng)用開發(fā)ok_第3頁
第3頁 / 共75頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《第八章 uclinux及應(yīng)用開發(fā)ok》由會員分享,可在線閱讀,更多相關(guān)《第八章 uclinux及應(yīng)用開發(fā)ok(75頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、單擊此處編輯母版標(biāo)題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,*,*,*,嵌入式系統(tǒng)開發(fā)與應(yīng)用,第八章,uclinux,及應(yīng)用開發(fā),主要內(nèi)容,8.1,,linux,介紹,,8.2,,μ,Clinux,簡介,,8.3,μ,Clinux,中的應(yīng)用程序開發(fā),,8.4,如何,構(gòu)造嵌入式,linux,系統(tǒng),,,8.5,實(shí)驗(yàn)理論部分,8.1,,linux,介紹,8.1.1,linux,簡介,,8.1.2,linux,特點(diǎn),,8.1.3,linux,作為嵌入式操作系統(tǒng)的優(yōu)點(diǎn),,,8.1.4,嵌入式,linux,的版本,,主要內(nèi)容,8.1.1,簡介,Linux,是個(gè)和,Uni

2、x,相似、以內(nèi)核為基礎(chǔ)的、完全內(nèi)存保護(hù)、多任務(wù)多進(jìn)程的操作系統(tǒng)。,Linux,最初是在,1991,年由一名芬蘭學(xué)生,Linus,,Torvalds,開發(fā)的,至今不過,14,個(gè)年頭,它是一個(gè)年輕的操作系統(tǒng),最初開發(fā)的,Linux,不成熟、性能較低,但是,由于,Linux,具有開放性,任何人只要遵守,GNU,組織的,GPL,(,GNU Public License,),標(biāo)準(zhǔn),都可對其源碼進(jìn)行修改。所以,Linux,在短短的時(shí)間內(nèi)就成了一個(gè)穩(wěn)定、成熟的操作系統(tǒng)。,,8.1.2,linux,特點(diǎn),,1.,符合,POSIX 1003.1,標(biāo)準(zhǔn),,,POSIX 1003.1,標(biāo)準(zhǔn)定義了一個(gè)最小,的,Uni

3、x,操作系統(tǒng)接口,只有符合這一標(biāo)準(zhǔn),才可以運(yùn)行,Unix,程序。由于,Unix,具有豐富的應(yīng)用程序,當(dāng)今絕大多數(shù)操作系統(tǒng)都把滿足,POSIX 1003.1,標(biāo)準(zhǔn)作為實(shí)現(xiàn)目標(biāo),,Linux,完全支持,POSIX 1003.1,標(biāo)準(zhǔn)。另外,,,Linux,還增加了部分,System V,和,BSD,的系統(tǒng)接口使得,Unix System V,和,BSD,上的程序能直接在,,Linux,上運(yùn)行,從而使,Linux,成為一個(gè)完善,的,Unix,程序開發(fā)系統(tǒng)。,,linux,特點(diǎn),2.,,支持多用戶訪問和多任務(wù)編程,,,Linux,是一個(gè)真正的多用戶、多任務(wù)操作系統(tǒng),它允許多個(gè)用戶同時(shí)訪問系統(tǒng)且不會造成

4、用戶之間的相互干擾。而且,每一個(gè)用戶可以創(chuàng)建多個(gè)進(jìn)程,并使各個(gè)進(jìn)程協(xié)同工作來完成用戶的需求。,,3.,,采用頁式存儲管理,,,與大多數(shù)操作系統(tǒng)一樣,,Linux,支持頁式存儲管理。它能使,Linux,更有效地利用物理存儲空間,頁面的換入換出為用戶提供了更大的存儲空間。,linux,特點(diǎn),4.,,支持動態(tài)鏈接,,,用戶程序的執(zhí)行往往離不開標(biāo)準(zhǔn)庫的支持,運(yùn)行程序前,需要將標(biāo)準(zhǔn)庫與程序鏈接好。按照鏈接方式的不同有靜態(tài)與動態(tài)兩種。一般的系統(tǒng)往往采用靜態(tài)鏈接方式,即在裝配階段就已將用戶程序和標(biāo)準(zhǔn)庫鏈接好,這樣,當(dāng)多個(gè)進(jìn)程運(yùn)行時(shí),可能會出現(xiàn)庫代碼在內(nèi)存中有多個(gè)副本而浪費(fèi)存儲空間的情況;,Linux,支持動

5、態(tài)鏈接方式,當(dāng)運(yùn)行時(shí)才進(jìn)行庫鏈接,如果所需要的庫已被其它進(jìn)程裝入內(nèi)存,則不必再裝入,否則才從硬盤中將庫調(diào)入。這樣能保證內(nèi)存中的庫程序代碼是唯一的,也節(jié)省了內(nèi)存,提高了程序的運(yùn)行效率。,,linux,特點(diǎn),5.,,支持多種文件系統(tǒng),,,Linux,能支持多種文件系統(tǒng)。常見的有:,EXT,、,EXT2,、,HPFS,、,MSDOS,、,UMSDOS,、,PROC,、,NFS,、,SYSV,、,MINIX,、,SMB,、,UFS,、,NCP,、,VFAT,、,JFFS,。,Linux,最常用的文件系統(tǒng)是,EXT2/3,,,它是,EXT,文件的改進(jìn)版本。,,6.,,支持,TCP/IP,、,SLIP,和

6、,PPP,,,在,Linux,中,用戶可以使用所有的網(wǎng)絡(luò)服務(wù)。,,8.1.3linux,作為嵌入式操作系統(tǒng)的優(yōu)點(diǎn),1.,,可應(yīng)用于多種硬件平臺,。,Linux,已經(jīng)被移植到多種硬件平臺,這對受成本、時(shí)間限制的研究與開發(fā)項(xiàng)目是很有吸引力的。可以在標(biāo)準(zhǔn)平臺上開發(fā)然后移植到具體的硬件上,加快了軟件與硬件的開發(fā)過程并降低了開發(fā)成本。,,2.,,Linux,可以隨意地配置而不需要任何的許可證或商家的合作關(guān)系。,,3.,,它是免費(fèi)的,源代碼可以得到。這是最吸引人的。毫無疑問,這會節(jié)省大量的開發(fā),,費(fèi)用。,linux,作為嵌入式操作系統(tǒng)的優(yōu)點(diǎn),4.,,它本身內(nèi)置網(wǎng)絡(luò)支持,具有公認(rèn)的強(qiáng)大的網(wǎng)絡(luò)功能。,,5.,

7、,Linux,的高度模塊化使添加部件非常容易。,,6. Linux,在臺式機(jī)上的成功,使大家看到了,linux,在嵌入式系統(tǒng)中的輝煌前景,。,8.1.4,嵌入式,linux,的版本,,,Linux,應(yīng)用于嵌入式領(lǐng)域雖然時(shí)間不長,但已形成了許多版本,按照其實(shí)際應(yīng)用的場合及特殊的功能需求,基本上可以分為以下,3,類:,,1.,將,Linux,改進(jìn)以滿足實(shí)時(shí)要求的實(shí)時(shí)操作系統(tǒng),應(yīng)用于一些關(guān)鍵的控制場合,,如,RT,-,Linux,,,Hard Hat Linux,。,,2.,盡可能保留,Linux,的強(qiáng)大功能,盡可能地減少其體積,以滿足許多嵌入式系統(tǒng)對體積的要求,如,μClinux,。,,3.,針對

8、特定嵌入式領(lǐng)域采用的整合方案,,如,Lineo,,,TimeSys,,,合肥華恒等,8.2μClinux,簡介,,8.2.1 μ,Clinux,特色,,,8.2.2 μ,Clinux,的設(shè)計(jì)特征,,,主要內(nèi)容,,,μClinux,是保留,Linux,的強(qiáng)大功能,但體積大大減少,是主要針對沒有,MMU,的微處理器開發(fā)的一個(gè)嵌入式,Linux,版本。,μClinux,是,Linux2.0,版本的一個(gè)分支,被設(shè)計(jì)用來微型控制應(yīng)用領(lǐng)域。,μClinux,單詞中,μ,代表微型,,C,代表控制器,,μClinux,的含義就是,",針對微控制領(lǐng)域而設(shè)計(jì)的,Linux,系統(tǒng),",,通常讀,作“,you s

9、ee,linux,”,8.2.1μClinux,特色,,通用,的,Linux API,,μ,Ckernel,<512 KB,,μ,Ckernel,+,工具,<900KB,,完整的,TCP/IP,協(xié)議堆棧,,,支持大量其它的網(wǎng)絡(luò)協(xié)議,,,支持各種文件系統(tǒng),包括,NFS,、,EXT2,、,ROMfs,、,JFFS,、,MS-DOS,以及,FAT16/32,,只支持沒有,MMU,的微控制器,,8.2.2μClinux,的設(shè)計(jì)特征,,,1,、,μClinux,的內(nèi)存管理,,,2,、,μClinux,的多進(jìn)程處理,,3,、,μClinux,的實(shí)時(shí)性,,4,、執(zhí)行程序的格式,,5,、文件系統(tǒng),,6,、,標(biāo)

10、準(zhǔn),C,函數(shù)庫,1,、,μClinux,的內(nèi)存管理,,μClinux,同標(biāo)準(zhǔn),Linux,的最大區(qū)別就在于內(nèi)存管理。標(biāo)準(zhǔn),Linux,是針對,有,MMU,的處理器設(shè)計(jì)的。在這種處理器上,虛擬地址被送到,MMU,,,MMU,把虛擬地址映射為物理地址。通過賦予每個(gè)任務(wù)不同的虛擬,—,物理地址轉(zhuǎn)換映射,支持不同任務(wù)之間的保護(hù)。其,優(yōu)點(diǎn),是提供了比計(jì)算機(jī)系統(tǒng)實(shí)際物理內(nèi)存大得多的內(nèi)存空間,這樣編程人員在編程時(shí)勿需考慮計(jì)算機(jī)中物理內(nèi)存的實(shí)際容量。,缺點(diǎn):,地址轉(zhuǎn)換表和其他一些數(shù)據(jù)結(jié)構(gòu)占據(jù)了內(nèi)存空間,這樣留給程序員的內(nèi)存空間就減少了;同時(shí)地址轉(zhuǎn)換增加了每一條指令的執(zhí)行時(shí)間。,。,,μClinux,不使用虛擬

11、內(nèi)存管理技術(shù),采用的是,實(shí)存儲器管理策略,。也就是,μClinux,系統(tǒng)對于內(nèi)存的訪問是直接的,(它對地址的訪問不需要經(jīng)過,MMU,,,而是直接送到地址線上輸出),分析,從易用性這一點(diǎn)來說,,,μClinux,的內(nèi)存管理實(shí)際上是一種倒退,,退回到了,UNIX,早期或是,Dos,系統(tǒng)時(shí)代。開發(fā)人員必須參與系統(tǒng)的內(nèi)存管理。從編譯內(nèi)核開始,開發(fā)人員就必須告訴系統(tǒng)這塊開發(fā)板到底擁有多少的內(nèi)存(假如你欺騙了系統(tǒng),那將在后面運(yùn)行程序時(shí)受到懲罰),從而系統(tǒng)將在啟動的初始化階段對內(nèi)存進(jìn)行分頁,并且標(biāo)記已使用的和未使用的內(nèi)存。系統(tǒng)將在運(yùn)行應(yīng)用程序時(shí)使用這些分頁內(nèi)存。,分析,從,內(nèi)存的訪問角度來看,,由于采用實(shí)存

12、儲器管理策略,,用戶程序同內(nèi)核在一個(gè)地址空間,操作系統(tǒng)對內(nèi)存空間沒有保護(hù),。因此,開發(fā)人員的,權(quán)利增大了,(開發(fā)人員在編程時(shí)可以訪問任意的地址空間),但與此同時(shí)系統(tǒng)的,安全性也大為下降,。,,總結(jié),,μClinux,的內(nèi)存管理與標(biāo)準(zhǔn),Linux,系統(tǒng)相比功能相差很多,但當(dāng)前這種不帶有,MMU,的處理器在嵌入式設(shè)備中相當(dāng)普遍。原因是系統(tǒng)中實(shí)現(xiàn),MMU,需要在軟件及硬件上有些開銷,比如說需要有一個(gè),MMU,芯片,而大多數(shù)嵌入式應(yīng)用對成本很敏感。同時(shí),地址轉(zhuǎn)換表和其他一些數(shù)據(jù)結(jié)構(gòu)占據(jù)了內(nèi)存空間,這樣留給程序員的內(nèi)存空間就減少了;同時(shí)地址轉(zhuǎn)換增加了每一條指令的執(zhí)行時(shí)間。,,而嵌入式設(shè)備通常運(yùn)行在某一特

13、定的環(huán)境下,只需實(shí)現(xiàn)特定的功能即可,功能相對也簡單,這樣就可以不使用,MMU,,,以減小生產(chǎn)成本及系統(tǒng)開銷,。,,linux,中創(chuàng)建進(jìn)程是由,fork,調(diào)用實(shí)現(xiàn)的,但由于,μClinux,在存儲管理方面的特點(diǎn),在實(shí)現(xiàn)多進(jìn)程時(shí)是通過,vfork,來實(shí)現(xiàn),,在,μClinux,中,vfork,等于,fork,。,2,、,μClinux,的多進(jìn)程處理,,3,、,μClinux,的實(shí)時(shí),性,,,μClinux,本身并沒有關(guān)注實(shí)時(shí)問題,它并不是為了,Linux,的實(shí)時(shí)性而提出的,,因此若將,μClinux,用于實(shí)時(shí)性要求較高的場合時(shí),需要對其內(nèi)核做必要的改進(jìn)。如:為,μClinux,添加,RT-Linu

14、x,的,patch,,,從而增強(qiáng),μClinux,的實(shí)時(shí)性,使得,μClinux,可以應(yīng)用于工業(yè)控制、進(jìn)程控制等一些實(shí)時(shí)性要求較高的場合。,,4,、執(zhí)行程序的格式,,不管是內(nèi)核還是應(yīng)用程序,,μClinux,均使用,flat,可執(zhí)行文件格式替代,elf,格式,,,elf,格式有比較大的文件頭,,flat,文件格式簡化了文件頭和部分段信息。,,5,、文件系統(tǒng),,,μClinux,是,Linux,的擴(kuò)展,因此,所有,Linux,支持的文件系統(tǒng),,μ,Cinux,,都支持,。,為節(jié)省資源,,μClinux,一般使用專門為嵌入式系統(tǒng)設(shè)計(jì)的文件系統(tǒng)如,Romfs,,,JFFS,等,,這些文件系統(tǒng)較常用,

15、的,ext2/3,占用更少資源,,,更支持壓縮,,同時(shí)在內(nèi)核中支持,romfs,文件系統(tǒng)相對來說只需要更少的代碼,。,,6,、,標(biāo)準(zhǔn),C,函數(shù)庫,,μClinux,使用嵌入式標(biāo)準(zhǔn),C,函數(shù)庫,μ,Clibc,或,μC-,libC,替代,libc,,,Linux,下使用的標(biāo)準(zhǔn),C,函數(shù)庫,libc,需要非常多的資源,,μ,Clibc,對,libc,做了精簡,在,μClinux,中的應(yīng)用程序均采用,靜態(tài)連接的方式鏈接標(biāo)準(zhǔn),C,函數(shù),庫,。,,μC-,libc,是,μClinux,最初的函數(shù)庫,,是,libc,的不完全的嵌入式實(shí)現(xiàn),,部分函數(shù)接口不標(biāo)準(zhǔn),,,還有部分函數(shù)未實(shí)現(xiàn),。目前主要使用在,Co

16、ldfire,和,ARM,結(jié)構(gòu)。,,μ,Clibc,函數(shù)庫彌補(bǔ)了,μC-,libc,的一些問題,,如:使所有的函數(shù)接口標(biāo)準(zhǔn)化,填補(bǔ)未實(shí)現(xiàn)的函數(shù),,μ,Clibc,目前已支持相當(dāng)多的處理器結(jié)構(gòu),使用,μ,Clibc,能夠?qū)?yīng)用程序的移植提供更好的兼容性。,μ,Clibc,正在逐步的取代,μC-,libc,。,,8.3μClinux,中的應(yīng)用程序開發(fā),,8.3.1,程序開發(fā)的基本流程,,,8.3.2,交叉開發(fā)環(huán)境,,,8.3.3,uCLinux,應(yīng)用程序開發(fā),,主要內(nèi)容,8.3.1,程序開發(fā)的基本流程,建立開發(fā)環(huán)境,源文件,編譯,下載,鏈接,C,語言程序*,.c,匯編源程序*,.s,目標(biāo)文件,可,

17、執(zhí)行文件,8.3.2,交叉開發(fā)環(huán)境,,先在通用,PC,機(jī)上編程,然后通過交叉編譯鏈接,將程序做成目標(biāo)平臺上可以運(yùn)行的二進(jìn)制代碼格式。最后將程序下載到目標(biāo)平臺上的特定位置由目標(biāo)板上啟動代碼運(yùn)行這段二進(jìn)制代碼。,,交叉開發(fā):我們把這種在一臺通用計(jì)算機(jī)上進(jìn)行軟件的編輯編譯,然后下載到嵌入式設(shè)備中運(yùn)行調(diào)試的開發(fā)方式。開發(fā)計(jì)算機(jī)一般稱宿主機(jī),嵌入式設(shè)備稱為目標(biāo)機(jī),在宿主機(jī)上編譯好的程序,下載到目標(biāo)機(jī)上運(yùn)行。,,交叉開發(fā)環(huán)境一般由運(yùn)行于宿主機(jī)上的交叉開發(fā)軟件、宿主機(jī)到目標(biāo)機(jī)的調(diào)試通道組成。如在,μClinux,的開發(fā)過程中,需要安裝交叉編譯工具,arm-elf-,gcc,,。,調(diào)試時(shí)還需要,gdb,軟件等

18、。,,8.3.3,uCLinux,應(yīng)用程序開發(fā),,,uClinux,是由,Linux2.0,版本發(fā)展來的,主要是針對沒有內(nèi)存管理單元,(MMU),的處理器和控制器而設(shè)計(jì)的。部分標(biāo)準(zhǔn),C,函數(shù)在標(biāo)準(zhǔn),Linux,下可以使用而在,uClinux,下不能使用,因此,需要用戶編寫相應(yīng)的庫函數(shù),但是絕大多數(shù)的函數(shù)還是通用的。也就是說大多數(shù)函數(shù)不需要做太大的改動就可以編譯成可以,在,uClinux,上運(yùn)行的文件格式,。,,總結(jié),在嵌入,式,uClinux,中進(jìn)行應(yīng)用程序開發(fā)時(shí),首先是在主機(jī)上編程并編譯,然后經(jīng)修改后用主機(jī)上建立的交叉編譯環(huán)境生成,.elf,文件,,并用,elf2flat,工具將,.elf,

19、文件轉(zhuǎn)換為,.flat,文件,最后使用下載工具將文件下載到目標(biāo)板上,并運(yùn)行及調(diào)試。,,8.4,如何,構(gòu)造嵌入式,linux,系統(tǒng),,8.4.1,構(gòu)造嵌入式,Linux,系統(tǒng)的幾個(gè)關(guān)鍵問題,,8.4.2,構(gòu)造嵌入式,Linux,系統(tǒng)的關(guān)鍵步驟,,主要內(nèi)容,8.4.1,構(gòu)造嵌入,式,Linux,系統(tǒng)的幾個(gè)關(guān)鍵問題,一個(gè)小型的嵌入,式,Linux,系統(tǒng)需要三個(gè)基本元素:,,u,,引導(dǎo)工具,,u,,Linux,微內(nèi)核(由內(nèi)存管理、進(jìn)程管理和事務(wù)處理構(gòu)成),,u,,初始化進(jìn)程,,若想讓它干點(diǎn)什么且繼續(xù)保持小型化,還得加上,,u,,硬件驅(qū)動程序,,u,,提供所需功能的一個(gè)或多個(gè)應(yīng)用程序,,若再增加功能,需

20、要這些,,u,,一個(gè)文件系統(tǒng)(也許在,ROM,或,RAM,中),,u,,TCP/IP,網(wǎng)絡(luò)協(xié)議棧,,u,,一個(gè)磁盤用來存放半易失性數(shù)據(jù)和提供交換能力,8.4.2,構(gòu)造嵌入式,Linux,系統(tǒng)的關(guān)鍵步驟,,1,、建立交叉開發(fā)環(huán)境,,2,、安裝,μClinux,內(nèi)核,,3,、安裝應(yīng)用程序庫,,8.5,實(shí)驗(yàn)理論部分,8.5.1,內(nèi)核編譯,,8.5.2,,Boot Loader,編譯運(yùn)行,,8.5.3,,內(nèi)核啟動加載的方式,,,8.5.4,,uClinux,應(yīng)用程序開發(fā),,8.5.5,下載及調(diào)試應(yīng)用程序的方法,,8.5.6,,makefile,介紹,,8.5.7,將應(yīng)用程序添加到文件系統(tǒng)的方法,,主要

21、內(nèi)容,8.5.1,內(nèi)核編譯,8.5.1.1,實(shí)驗(yàn)前的準(zhǔn)備工作,,,8.5.1.2,配置及編譯,uClinux,,,8.5.1.3,下載并運(yùn)行,,主要內(nèi)容,8.5.1.1,實(shí)驗(yàn)前的準(zhǔn)備工作,,,1,、安裝,uClinux,,源代碼,,,cp /mnt/hda1/uClinux-s3cev40.tar.gz /root/,,,cd,/root,,,tar,zxvf,uClinux-s3cev40.tar.gz,2,、安裝編譯器,,cp /mnt/hda1/arm-elf-compiler.tar.gz /,usr,/local,,,tar,zxvf,arm-elf-,compiler.tar.

22、gz,,,PATH=”/,usr/local/bin:$PATH,”,8.5.1.2,配置及編譯,uClinux,1,、配置,uClinux,,,make,config,,,make,menuconfig,,,make,xconfig,,,,生成文件,.,config,,,保存配置信息。下次配置時(shí)產(chǎn)生新的,.,config,文件,原來的,.,config,被改名為,.,config.old,。,,配置及編譯,2,、編譯,uClinux,,,cd,/root/uclinux-s3cev40,,,make clean,,,make,xconfig,,,,make,dep,,,,make lib_o

23、nly,,,make user_only,,,make,romfs,,,make image,配置及編譯,最后,,在,images,目錄下生成,2,個(gè)文件,,zImage,:,uClinux,,內(nèi)核,2.4.x,的壓縮方式執(zhí)行映像文件,,,romfs.,img,:,文件系統(tǒng)的映像文件,。,,8.5.1.3,下載并運(yùn)行,1,、下載,,使用,Embest,S3CEV40,目標(biāo)板附帶的串口線連接目標(biāo)板上的,UART0,和,PC,機(jī)的串口,,,,用,Embest,燒寫工具軟件進(jìn)行燒寫,加載,EmbestS3CEV40.cfg,目標(biāo)板配置文件,將,bootloader.bin,燒寫至,FLASH,的,1

24、-16,扇區(qū),,zImage,燒寫至,17-192,扇區(qū),,,romfs.img,燒寫至,193-400,扇區(qū),。,,下載并運(yùn)行,2,、運(yùn)行,,,在,PC,機(jī)上運(yùn)行,Windows,自帶的超級終端串口通信程序(波特率,115200,、,1,位停止位、,8,位數(shù)據(jù)位、無校驗(yàn)位、無硬件流控制);或者使用其它串口通信程序。,,重新啟動目標(biāo)板,運(yùn)行,uclinux,。,,8.5.2,,Boot Loader,編譯運(yùn)行,,8.5.2.1,簡介,,,8.5.2.2,Boot Loader,設(shè)計(jì),,,8.5.2.3,實(shí)驗(yàn),例程,主要內(nèi)容,8.5.2.1,簡介,系統(tǒng)引導(dǎo)程序通常稱為,Boot Loader,,

25、,是在系統(tǒng)復(fù)位后執(zhí)行的第一段代碼,相當(dāng)于,PC,上的,BIOS,以及商業(yè)實(shí)時(shí)操作系統(tǒng)中的板級支持,包,BSP,,,Boot Loader,首先完成系統(tǒng)硬件的初始化,包括時(shí)鐘的設(shè)置、存儲區(qū)的映射等,設(shè)置堆棧指針,然后跳轉(zhuǎn)到操作系統(tǒng)內(nèi)核的入口,將系統(tǒng)控制權(quán)交給操作系統(tǒng),在此之后系統(tǒng)的運(yùn)行,和,Boot Loader,再無任何關(guān)系。,,,,Boot Loader,獨(dú)立于操作系統(tǒng),必須由用戶自己設(shè)計(jì)。,,,,Boot Loader,的實(shí)現(xiàn)高度依賴于硬件,包括處理器的體系結(jié)構(gòu)、具體型號、硬件電路板的設(shè)計(jì)。,,簡介,Boot Loader,、,內(nèi)核映像和文件系統(tǒng)映像在系統(tǒng)中的存儲的典型空間分配結(jié)構(gòu)圖如下:

26、,,,,,,,典型空間分配結(jié)構(gòu)圖,8.5.2.2 Boot Loader,設(shè)計(jì),,1,、最簡功能設(shè)計(jì)要求,禁止所有的中斷;,,設(shè)置處理器時(shí)鐘、運(yùn)行速度;,,存儲區(qū)初始化;,,設(shè)置堆棧指針將,bss,段清零;,,跳轉(zhuǎn)到內(nèi)核映像的入口,,Boot Loader,設(shè)計(jì),上電自檢;,,支持串口通訊方式,提供串口方式的命令控制臺;,,支持以太網(wǎng)通訊方式,提供以太網(wǎng)通訊方式的命令控制臺;,,可以通過串口或以太網(wǎng)下載并引導(dǎo)內(nèi)核和文件系統(tǒng)映像文件;,2,、完備功能設(shè)計(jì)要求,8.5.3,,內(nèi)核啟動加載的方式,8.5.3.1,內(nèi)核提供方式,,,8.5.3.2,內(nèi)核加載及啟動方式,,,主要內(nèi)容,8.5.3.1,內(nèi)核

27、提供方式,(,1,)壓縮形式內(nèi)核:固化,在,Flash,中,由,uClinux,提供的解壓復(fù)制程序?qū)?nèi)核解壓后復(fù)制到,RAM,中運(yùn)行;,,(,2,)正常未壓縮的內(nèi)核:可以先固化在,Flash,中,由,Boot Loader,復(fù)制到,RAM,中運(yùn)行,顯然這樣更浪費(fèi),Flash,存儲空間;故一般通過,Boot Loader,提供的串口、網(wǎng)絡(luò)下載功能直接,從,PC,機(jī)下載到系統(tǒng),的,RAM,中,然后由,Boot Loader,的啟動內(nèi)核功能啟動,這種方式主要用來工程師的內(nèi)核調(diào)試。,,8.5.3.2,內(nèi)核加載及啟動方式,(1,),Flash,本地運(yùn)行方式:內(nèi)核的未經(jīng)壓縮的可執(zhí)行映像固化在,Flash,

28、,,系統(tǒng)啟動時(shí)內(nèi)核在,Flash,中開始逐句執(zhí)行。,,(,2,)壓縮內(nèi)核加載方式:內(nèi)核的壓縮映像固化,在,Flash,上,系統(tǒng)啟動時(shí)由附加在壓縮映像前的解壓復(fù)制程序讀取壓縮映像,在內(nèi)存中解壓后執(zhí)行,這種方式相對復(fù)雜,但是運(yùn)行速度更快,(,RAM,的存取速率要,比,Flash,高)。,,8.5.4,,uClinux,應(yīng)用程序開發(fā),一、將,Linux,下的應(yīng)用程序移植到,uCLinux,,下,時(shí),需要注意的限制,,二、應(yīng)用程序開發(fā)步驟,主要內(nèi)容,一、將,Linux,下的應(yīng)用程序移植,到,uCLinux,下時(shí),需要注意有以下限制,,1,),uC-libc,中不帶有,pthread,庫,要進(jìn)行多線程編

29、程,只能選擇,select,函數(shù)。,,,2,),uClinux,系統(tǒng)中由于內(nèi)存管理的問題,沒有,fork,(),函數(shù),用,vfork,(),代替,因?yàn)?uClinux,,系統(tǒng)中沒有真正的,fork,,,多進(jìn)程實(shí)際是使用,vfork,實(shí)現(xiàn)的,子進(jìn)程執(zhí)行完后父進(jìn)程才繼續(xù)執(zhí)行。,,,,3,),uClinux,所用的,Libc,庫不是一個(gè)全功能的庫,而是一個(gè)適合嵌入式應(yīng)用的功能有限的庫,對于一些不太常用的函數(shù)可能庫里沒有,需要用戶自己編寫。,,,4,)堆棧有限制,現(xiàn)在堆棧大小限制在,4K,字節(jié),你可以用如下方法增加堆棧的大?。涸谑褂?elf2flt,工具軟件時(shí)加上,“,-s,”,參數(shù)。,,二、應(yīng)用程序

30、開發(fā)步驟,,1,、,在,Linux,下編寫源程序,example.c,,,確認(rèn)編譯生 成的程序,example,能在,Linux,下正確執(zhí)行。,,,,#,gcc,–o example example.c,,#,./example,,,2,、,按照移植注意事項(xiàng)改寫源代碼,example.c,,,改寫 以后的文件命名為,example_uc.c,。,,,3,、,使用交叉編譯工具編譯,example_uc.c,,,生成,,example_uc,執(zhí)行文件。編譯命令如下:,,,,$arm-elf-,gcc,–o,example_uc,,example_uc.c,–elf2flt,,,4,、,下載并執(zhí)行,

31、,對于下載方法我們介紹兩種最經(jīng)常使用的下載調(diào)試應(yīng)用程序的方法,:,8.5.5,下載及調(diào)試應(yīng)用程序的方法,,8.5.5.1,下載方法,FTP,與,TFTP,,8.5.5.2,uClinux,應(yīng)用程序調(diào)試方法,下載方法,FTP,與,TFTP,文件傳輸協(xié)議,FTP,是,Internet,上使用得最廣泛的文件傳輸協(xié)議。在嵌入式開發(fā)中使用,FTP,方式下載應(yīng)用程序時(shí),是,在,PC,即宿主機(jī)上建立,FTP,服務(wù)器,然后,在,uClinux,的超級終端窗口啟動,FTP,客戶程序,執(zhí)行,FTP,命令下載應(yīng)用程序到目標(biāo)板的指定目錄中。,,,簡單文件傳輸協(xié)議,TFTP,全稱,為,Trivial File Tran

32、sfer Protocol,,,適合小型文件傳輸,比較小并且容易實(shí)現(xiàn)。在,uClinux,的相關(guān)開發(fā)過程中,更經(jīng)常地使用,TFTP,。,,下載方法,1,、在,Win2000,操作系統(tǒng)下建立,TFTP,服務(wù)器,,,運(yùn)行,TFTP,服務(wù)器程序,tftpd32.exe,,,進(jìn)行各種工作狀態(tài)、權(quán)限以及本地,tftp,工作目錄的設(shè)置,默認(rèn)狀態(tài)下可以直接進(jìn)行工作,本地,tftp,工作目錄即當(dāng)前目錄,,,2,、在,uClinux,的超級終端窗口執(zhí)行,TFTP,客戶端命令連接服務(wù)器程序,tftpd32,,,直接下載文件(如,LED,燈控制程序)到,var,目錄,修改權(quán)限后運(yùn)行:,,,,tftp,-g -l /

33、,var/example_uc,-r,example_uc,192.168.0.35,,,cd,/,var,,,/,var,>,chmod,777,example_uc,,,/,var,> ./,example_uc,,8.5.6,,makefile,介紹,程序大型化、復(fù)雜化是嵌入式軟件發(fā)展的必然趨勢。如何維護(hù)和管理程序就是個(gè)突出和緊迫的問題。高級語言編程所形成的模塊之間不可避免的存在著相互的聯(lián)系和制約,而且其關(guān)系也非常復(fù)雜。這樣,如果某個(gè)模塊需要改動、更換或者刪除,那么需要把與該程序相關(guān)的所有程序都重新編譯、鏈接。這樣不僅需要程序員找出與該程序相關(guān)的其它程序,并且需要使用長而復(fù)雜的命令對其逐

34、一進(jìn)行編譯、鏈接。這對程序員來講不僅費(fèi)時(shí)費(fèi)力而且易出錯(cuò)。針對以上問題,,GNU,為我們推出了,make,項(xiàng)目管理工具,。,,Make,項(xiàng)目管理工具能夠自動確定需要重新編譯的文件,并對它們進(jìn)行重新編譯,然后鏈接生成執(zhí)行文件。,Make,項(xiàng)目管理工具是通過,makefile,來完成這一工作的,它對大型項(xiàng)目軟件的開發(fā)是很有必要的。,Make,管理項(xiàng)目把所用的命令行保存到,Makefile,文件中,簡化了編譯工作。,Make,管理項(xiàng)目可以減少重新編譯所需要的時(shí)間,它可以識別出,makefile,中哪些文件已經(jīng)修改,并且在再次編譯時(shí)只編譯這些文件,這樣提高了編譯的效率。,,,,,Make,管理項(xiàng)目還在數(shù)

35、據(jù)庫中維護(hù)了當(dāng)前開發(fā)工程中各個(gè)文件的依賴關(guān)系,在編譯前就可以確定是否能找到所需文件。,,要完成,Make,管理項(xiàng)目的工作必須編寫,makefile,,,makefile,是一個(gè)文本形式的數(shù)據(jù)庫文件,其中包含一些規(guī)則來告訴,Make,編譯哪些文件以及怎樣編譯這些文件。每條規(guī)則包含以下內(nèi)容:,,,l,,一個(gè),target,,是,Make,最終要創(chuàng)建的文件,,l,,一個(gè)或多個(gè),dependencies,列表,是編譯生成目標(biāo)文件所需的其他文件,,l,,需要執(zhí)行的,commands,,,用于從指定的文件處生成目標(biāo)文件,,,一個(gè)簡單,的,makefile,規(guī)則可以使用如下代碼表示,:,target:dep

36、endency file1 dependency file2[…],,command1,,command1,,[…],注意:每一個(gè)命令的第一個(gè)字符必須是制表符,僅使用,8,個(gè)空格是不行的。否則,make,會顯示出錯(cuò)信息。,,其中:,target,是要創(chuàng)建的目標(biāo)文件或者,linux,系統(tǒng)支持格式的可執(zhí)行文件,。,dependency,fileN,是創(chuàng)建,target,需要的依賴文件列表。,CommandN,是創(chuàng)建,target,時(shí)使用的命令組,是包括,make,在內(nèi)的許多,shell,命令的集合。此外,除非特別指定,否則,make,的工作目錄就是當(dāng)前目錄。還要注意“,#,”,號以后的文字為注

37、釋。,,# a simple,makefile,,square,:,square.o Length.o width.o,,#,gcc,–o square square.o Length.o width.o,,square.o,:,square.c square.h Length.h width.h,,#,gcc,–c square.c,,Length.o,:,Length.c Length.h,,#,gcc,–c Length.c,,width.o,:,width.c,,#,gcc,–c width.c,,clean:,,,rm,,edito,*.o,一個(gè)簡單,的,ma

38、kefile,實(shí)例,。,,makefile,文件編寫好以后,,在,makefile,所在目錄下鍵入,make,就可編譯,square,。,這個(gè),makefile,有,5,條規(guī)則。第,1,條規(guī)則用于創(chuàng)建默認(rèn)的目標(biāo),square,,,,它有,3,個(gè)依賴文件:,square.o,、,Length.o,和,width.o,。,在編譯,square,時(shí)這些文件必須存在。第,2,行是,,make,為創(chuàng)建,square,所要執(zhí)行的命令,后面的三條規(guī)(,4,~,9,行)則告訴,make,如何逐個(gè)生成那些依賴文件。,Clean,用來清除編譯過程中的中間文件。,,通常情況下,如果試圖在依賴文件不存在的情況下使用第

39、二行所示的命令來編譯,square,,,gcc,將會出錯(cuò)并退出;,而,make,則在生成,square,前先檢查所需要的依賴文件是否存在,如果不存在,則先執(zhí)行別的規(guī)則以生成缺少的依賴文件,最后才編譯依賴性最強(qiáng)的目標(biāo)。如果,square.o,、,Length.o,和,width.o,已經(jīng)存在,則它不急于再次運(yùn)行后面的規(guī)則,而是比較這些依賴文件與其對應(yīng)的源文件的生成時(shí)間,如果判定有一個(gè)或者多個(gè)源文件新于這些依賴文件,,make,才重新編譯生成這些文件以反映相關(guān)源文件的最新變化,否則使用舊的依賴文件完成目標(biāo),square,的編譯。至此,這個(gè)小小的,makefile,顯示了它強(qiáng)有力的自動查找、比較、編

40、譯等功能,它的用處是顯而易見的。,,在編寫,makefile,時(shí)我們會使用一些常用的諸如,clean,、,install,、,dist,、,tags,、,depend,、,test,、,check,、,installtest,以及,installcheck,的目標(biāo)名。目標(biāo),名,clean,一般用來清除編譯過程中的中間文件,。,install,目標(biāo)名常會把最終的二進(jìn)制文件、所支持的庫文件,和,shell,腳本以及相關(guān)文檔移到文件系統(tǒng)中與它對應(yīng)的位置,同時(shí)設(shè)置文件的權(quán)限和所有者。,Uninstall,用來刪除,install,目標(biāo)安裝的文件,。,Dist,常常用于刪除編譯工作目錄中舊的二進(jìn)制文件和

41、目標(biāo)文件并且創(chuàng)建歸檔文件。,Tags,用來更新或創(chuàng)建程序的標(biāo)記表。,Depend,用來設(shè)置,makefile,文件中各個(gè)目標(biāo)所需要的依賴文件列表。,installtest,和,installcheck,一般用于驗(yàn)證,install,目標(biāo)的安裝過程,。,,5.2.4.7,將應(yīng)用程序添加到文件系統(tǒng)的方法,一、 編寫,Makefile,,,二、,,修改配置相關(guān)文件,,,三、 快速添加應(yīng)用程序,,一、編寫,Makefile,1,、使用,Vi,在,/user/app/,下編寫,,hello.c,文件,#include <,stdio.h,>,,int,main(void) {,,printf("Hell

42、o,world!\n");,,return 1;,,},2,、編寫,Makefile,,EXEC = hello,,OBJS = hello.o,,all: $(EXEC),,$(EXEC): $(OBJS),,$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS),,romfs,:,,$(ROMFSINST) /bin/$(EXEC),,clean:,,,,-,rm,-f $(EXEC) *.elf *.,gdb,*.o,二、,,修改配置相關(guān)文件,1,、,修改,./,config/config.in,,在最后面增加菜單:,,#####################

43、##########,,mainmenu_option,next_comment,,comment'User Application',,bool,'Hello‘CONFIG_USER_HELLO,,comment "User Application",,endmenu,,,##################################,,或者在合適的菜單塊中增加一行:,,bool,'Hello' CONFIG_USER_HELLO,二、,,修改配置相關(guān)文件,CONFIG_USER_HELLO,,This program print hello on screen.,注意:,,描述文本必

44、須縮進(jìn)兩空格,不能包括空行且必須少于,70,個(gè)字符,2,、修改,./,config/Configure.help,Configure.help,包含配置時(shí)顯示的描述文本,在文件中增加:,,修改配置相關(guān)文件,增加行,,,dir_$(CONFIG_USER_HELLO) += app,,3,、修改用戶程序工程管理文件,,user/,Makefile,三、,快速添加應(yīng)用程序,1,、編譯生成可執(zhí)行文件,,,輸入以下命令直接編譯程序源代碼文件,對于復(fù)雜一點(diǎn)的工程可以使用上節(jié)中的,Makefile,:,,,,2,、,復(fù)制可執(zhí)行文件到文件系統(tǒng),,,,在執(zhí)行,make,romfs,命令時(shí)會生成,romfs,文

45、件夾,它是生成的文件系統(tǒng)目錄,因此如果已經(jīng)執(zhí)行過,make,romfs,命令,用戶可將生成的可執(zhí)行文件,hello,復(fù)制到,romfs,/bin,目錄,不必重復(fù)該命令。,,注意,:如果用戶執(zhí)行了,make clean,命令,,romfs,下的全部內(nèi)容將被清除。,,arm-elf-,gcc,–Wall –O2 -Wl,-elf2flt –o hello hello.c,3,、,,生成文件系統(tǒng)映像,,,直接執(zhí)行下面的命令生成文件系統(tǒng)映像,romfs.img,:,,,genromfs,-v -V ",ROMdisk," –f,romfs.img,-d /root/uclinux-s3cev40/romfs,,,這里的文件系統(tǒng)映像,romfs.img,包含了新增的應(yīng)用程序,hello,。,,genromfs,-v -V ",ROMdisk," –f,romfs.img,-d /root/uclinux-s3cev40/romfs,

展開閱讀全文
溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  sobing.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!