九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

應(yīng)用程序設(shè)計(jì)

  • 資源ID:247451761       資源大小:2.17MB        全文頁(yè)數(shù):75頁(yè)
  • 資源格式: PPT        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

應(yīng)用程序設(shè)計(jì)

單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,*,1,1,3,2,4,5,嵌入式,Linux,交叉編譯環(huán)境的建立,Linux,開發(fā)環(huán)境的建立,6,7,嵌入式,Linux,應(yīng)用程序設(shè)計(jì),Linux,開發(fā)步驟,Linux,開發(fā)環(huán)境的選擇,交叉編譯過(guò)程,GNU,工具的使用及開發(fā)流程,Linux,常用命令,2,開發(fā)環(huán)境的建立,在進(jìn)行項(xiàng)目開發(fā)前,首先要做的就是搭建一套基于,Linux,操作系統(tǒng)的應(yīng)用開發(fā)環(huán)境,一般由,目標(biāo)板,和,宿主機(jī),所構(gòu)成。目標(biāo)板用于運(yùn)行操作系統(tǒng)和系統(tǒng)應(yīng)用軟件,而目標(biāo)板所用到的操作系統(tǒng)的內(nèi)核編譯、應(yīng)用程序的開發(fā)和調(diào)試則需要通過(guò)宿主機(jī)來(lái)完成。,開發(fā)環(huán)境對(duì)硬件沒(méi)有特殊的要求,但是為了雙方之間建立連接關(guān)系,關(guān)鍵的幾種接口電路如,串口、以太網(wǎng)接口,和,USB,接口,是必不可少的。,用于開發(fā)和調(diào)試目標(biāo)板上所用到的操作系統(tǒng)、應(yīng)用程序等所有軟件。,這種在宿主機(jī)上開發(fā)程序、在目標(biāo)板上運(yùn)行程序的方式,通常就叫做交叉開發(fā)。,3,開發(fā)環(huán)境的建立,4,目標(biāo)板,(Target),可以是嵌入式應(yīng)用軟件的實(shí)際運(yùn)行環(huán)境,當(dāng)然也可以是替代實(shí)際環(huán)境的仿真系統(tǒng)(如軟件模擬器)。,宿主機(jī),(Host),通過(guò)串口、網(wǎng)絡(luò)連接或調(diào)試接口,(,如,JTAG,仿真器,),與目標(biāo)機(jī)通信。宿主機(jī)的軟硬件資源比較豐富,其操作系統(tǒng)主要有,Windows,和,Linux,兩種,其上用于開發(fā)程序的那套軟件工具,通常叫做開發(fā)工具鏈。,開發(fā)環(huán)境的建立,5,嵌入式,Linux,的組成,最基本的嵌入式,Linux,系統(tǒng)需要,3,個(gè)基本元素:,系統(tǒng)引導(dǎo)程序,:用于完成機(jī)器加電后的系統(tǒng)定位引導(dǎo);,Linux,系統(tǒng)內(nèi)核,:為嵌入式應(yīng)用提供一個(gè)軟件環(huán)境,為應(yīng)用程序完成基本的底層資源管理工作;,初始化過(guò)程,:完成基本的初始化。,為使這個(gè)最小嵌入式系統(tǒng)具有一定的實(shí)用性,還需加上硬件的,驅(qū)動(dòng)程序,及,個(gè)或幾個(gè),應(yīng)用進(jìn)程,以提供必要的應(yīng)用功能支持。如果應(yīng)用比較復(fù)雜,可能還需要添加一個(gè)可以在,ROM,或,RAM,中使用的,文件系統(tǒng),、,TCP/IP,網(wǎng)絡(luò)協(xié)議棧,等。在,PDA,領(lǐng)域,還需要加上,個(gè),GUl,支持,。,6,Linux,開發(fā)步驟,Linux,操作系統(tǒng)作為一種多任務(wù)、穩(wěn)定可靠、內(nèi)核可裁剪的系統(tǒng),是開發(fā)嵌入式軟硬件產(chǎn)品的優(yōu)秀軟件平臺(tái)。,嵌入式,Linux,是一種開放源碼、軟實(shí)時(shí)、多任務(wù)的嵌入式操作系統(tǒng)。通常它是在標(biāo)準(zhǔn),Linux,的基礎(chǔ)上針對(duì)嵌入式系統(tǒng)進(jìn)行裁剪和優(yōu)化后形成的。裁剪和優(yōu)化后的,Linux,體積更小,性能更加穩(wěn)定,而且源代碼本身是免費(fèi)的。這將大大減少開發(fā)商的成本,更具市場(chǎng)競(jìng)爭(zhēng)力,具體進(jìn)行,Linux,開發(fā)的步驟如下:,BOOTLOADER,開發(fā);,Linux,開發(fā)環(huán)境建立;,Linux,內(nèi)核移植;,應(yīng)用程序開發(fā)。,7,嵌入式,Linux,的開發(fā)環(huán)境,個(gè)人用,Linux,開發(fā)嵌入式應(yīng)用程序,可以在自己的,PC,機(jī)上安裝一套,Linux,操作系統(tǒng),使用,Linux,中的,X Windows,打開若干個(gè)窗口進(jìn)行編譯、下載和調(diào)試等。,當(dāng)多名工程師共同來(lái)開發(fā)一個(gè)系統(tǒng)時(shí),可以用,1,臺(tái),PC,機(jī)運(yùn)行,Linux,作為服務(wù)器,每個(gè)開發(fā)工程師都通過(guò)局域網(wǎng)用,Telnet,登錄到這臺(tái)服務(wù)器上,被開發(fā)的目標(biāo)板也掛在網(wǎng)上。然后在服務(wù)器的,Linux,環(huán)境下用,GNU gcc,編譯成生目標(biāo)代碼,再用,FTP,傳回到自己的,PC,機(jī)上,最后通過(guò)串口或網(wǎng)絡(luò)下載到目標(biāo)機(jī)上即可完成整個(gè)嵌入式系統(tǒng)的開發(fā)。,8,交叉編譯環(huán)境的建立,所謂,交叉編譯,,就是在一個(gè)平臺(tái)上生成可以在另一個(gè)平臺(tái)上執(zhí)行的代碼。,采用交叉編譯的主要原因,在于,多數(shù)嵌入式目標(biāo)機(jī)不能提供足夠的資源供編譯過(guò)程使用,因而只好將編譯工作轉(zhuǎn)移到高性能的宿主機(jī)中進(jìn)行。,交叉編譯環(huán)境,是一個(gè)由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境。交叉編譯工具主要包括針對(duì)目標(biāo)系統(tǒng)的,編譯器,gcc,、目標(biāo)系統(tǒng)的,二進(jìn)制工具,binutils,、目標(biāo)系統(tǒng)的,標(biāo)準(zhǔn),c,庫(kù),glibc,和目標(biāo)系統(tǒng)的,Linux,內(nèi)核頭文件,。,9,GNU,交叉編譯,Linux,采用,GNU,交叉編譯器。,GNU,的交叉編譯器,包括以下組件:,1.gcc,交叉編譯器,即在宿主機(jī)上開發(fā)編譯目標(biāo)上可運(yùn)行的二進(jìn)制文件;,2.binutils,輔助工具,包括,objdump,、,objcopy,等;,3.gdb,調(diào)試器。,對(duì)于,ARM,可以采用如下兩個(gè)版本的編譯器:,arm-elf-,arm-linux-,10,arm-elf-,交叉編譯器,arm-elf-gcc,arm-elf-ld,arm-elf-as,arm-elf-objdump,arm-elf-objcopy,arm-elf-gdb,11,arm-linux-,交叉編譯器,arm-linux-gcc,arm-linux-ld,arm-linux-as,arm-linux-objdump,arm-linux-objcopy,arm-linux-gdb,12,選擇,Linux,開發(fā)環(huán)境,Windows,環(huán)境,+ Cygwin,;,Windows,環(huán)境,+ VMWare,虛擬機(jī)(安裝,RedHat 9.0,),。,Linux,環(huán)境,推薦,RedHat 9.0,;,單機(jī)模式(一臺(tái)計(jì)算機(jī)),雙機(jī)模式(兩臺(tái)計(jì)算機(jī)),Windows + Linux,。,13,在,linux,環(huán)境下進(jìn)行,Linux,開發(fā),必須采用支持,GDB,的調(diào)試器(如,ADT1000A,)才能進(jìn)行調(diào)試,否則只能通過(guò),BOOTLOADER,進(jìn)行簡(jiǎn)單的程序燒寫運(yùn)行等。,調(diào)試信息的打印可以通過(guò)串口完成,使用,linux,下的,minicom,超級(jí)終端程序,(類似于,Windows,上的超級(jí)終端工具)接收并顯示目標(biāo)板傳送的打印信息。,Linux,程序的編輯、編譯和調(diào)試都是在,Linux,環(huán)境下進(jìn)行的。,Linux,串口驅(qū)動(dòng)完成后,可以通過(guò)內(nèi)核打印函數(shù),printk,向串口打印信息,這是,Linux,內(nèi)核調(diào)試過(guò)程中最有效的手段。,14,在,Windows + Cygwin,環(huán)境下進(jìn)行,Linux,開發(fā),Linux,內(nèi)核配置和編譯等在,Cygwin,環(huán)境下運(yùn)行,程序編輯和調(diào)試都在,Windows,環(huán)境下進(jìn)行,,必須采用支持,Windows,下進(jìn)行,linux,調(diào)試的調(diào)試器(如,ADT1000A,)才能進(jìn)行調(diào)試,否則只能通過(guò),BOOTLOADER,進(jìn)行簡(jiǎn)單的程序燒寫運(yùn)行等,調(diào)試信息的打印可以通過(guò)串口完成,使用,Windows,上的超級(jí)終端工具接收并顯示目標(biāo)板傳送的打印信息。,Cygwin,是運(yùn)行于,Windows,中的一個(gè)應(yīng)用程序,它可以使得,Linux,環(huán)境下的應(yīng)用程序可以在,Cygwin,環(huán)境下進(jìn)行編譯,即可以在,Windows,進(jìn)行編譯。,15,在,Windows + VMWare,虛擬機(jī)環(huán)境下進(jìn)行,Linux,開發(fā),如果需要使用只支持,Windows,環(huán)境下調(diào)試的調(diào)試器,可以通過(guò)在,VMWare,中安裝,linux,虛擬機(jī),在該虛擬機(jī)中進(jìn)行編輯、編譯,Linux,,然后通過(guò)網(wǎng)絡(luò)(,ftp,、,nfs,、,ssh,)等手段傳送到,Windows,中,進(jìn)行調(diào)試,,這樣編譯和調(diào)試可以分別在,linux,和,windows,環(huán)境下但是是在一臺(tái)電腦中完成,,它的缺點(diǎn)是系統(tǒng)要求較高,運(yùn)行速度慢。,也可以在兩臺(tái)電腦中分別安裝,linux,和,windows,,分別實(shí)現(xiàn)編譯和調(diào)試。,VMWare,是運(yùn)行于,Windows,中的一個(gè)應(yīng)用程序,是一個(gè)虛擬機(jī),可以在其上安裝多個(gè)操作系統(tǒng),相當(dāng)于在,Windows,上安裝一個(gè)虛擬的操作系統(tǒng)。,16,17,交叉編譯過(guò)程,在,Linux,交叉編譯環(huán)境下,整個(gè)編譯過(guò)程大體上可以分為以下幾個(gè)步驟:,編譯,binutils,運(yùn)行,configure,文件,并使用,-prefix=$PREFIX,參數(shù)指定安裝路徑,使用,-target=arm-linux,參數(shù)指定目標(biāo)機(jī)類型,然后執(zhí)行,make install,。,配置,Linux,內(nèi)核頭文件,執(zhí)行,make mrproper,進(jìn)行清理工作,然后執(zhí)行,make config ARCH=arm,(或,make menuconfig/xconfig ARCH=arm,)進(jìn)行配置。一定要在命令行中使用,ARCH=arm,指定,CPU,架構(gòu),因?yàn)槟J(rèn)架構(gòu)為主機(jī)的,CPU,架構(gòu)。,18,交叉編譯過(guò)程,第一次編譯,gcc,這一步執(zhí)行,make install,,生成一個(gè)最簡(jiǎn)單的,gcc,。由于編譯整個(gè),gcc,需要目標(biāo)機(jī)的,glibc,庫(kù),而它在剛開始時(shí)還不存在,因此需要首先生成一個(gè)最簡(jiǎn)單的,gcc,,它只需要具備編譯目標(biāo)機(jī),glibc,庫(kù)的能力即可。,交叉編譯,glibc,這一步通過(guò)執(zhí)行,configure,和,make install,來(lái)對(duì),glibc,庫(kù)進(jìn)行交叉編譯。,configure,的運(yùn)行參數(shù)如下:,CC,arm-linux-gcc ./configure,-prefix=$PREFIX/arm-linux,-host=arm-linux,-enable-add-ons,19,交叉編譯過(guò)程,第二編譯,gcc,首先運(yùn)行,configure,,參數(shù)設(shè)置為,-prefix=$PREFIX,-target=arm-linux,-enable-languages=c,c+,接著運(yùn)行,make install,。這樣整個(gè)交叉編譯環(huán)境就生成了。,建立一個(gè)交叉編譯工具鏈?zhǔn)且粋€(gè)相當(dāng)復(fù)雜的過(guò)程,為了節(jié)省時(shí)間,可以直接從網(wǎng)上下載一些已編譯好的交叉編譯工具鏈,如,arm-linux-toolchains.tgz,。,20,Linux,開發(fā)工具的使用,運(yùn)行于,Linux,操作系統(tǒng)下的自由軟件,GNU gcc,編譯器,不僅可以編譯,Linux,操作系統(tǒng)下運(yùn)行的應(yīng)用程序,還可以編譯,Linux,內(nèi)核本身,甚至可以交叉編譯運(yùn)行于其他,CPU,上的程序。因此,在進(jìn)行嵌入式系統(tǒng)應(yīng)用程序開發(fā)時(shí),GNU gcc,得到了廣泛的應(yīng)用。,GNU,開發(fā)工具的主要缺點(diǎn)是采用命令行方式,用戶掌握和使用起來(lái)比較困難,不如基于,Windows,系統(tǒng)的開發(fā)工具易用,可一旦掌握了其用法就可以非常方便地進(jìn)行項(xiàng)目開發(fā)。,GNU,的操作系統(tǒng)和開發(fā)工具都是免費(fèi)的,只要遵循,GPL,協(xié)議,任何人都可以隨意獲取并使用。,21,Linux,開發(fā)工具,GNU,的使用,GNU,提供的,編譯工具,包括,匯編器,as,、,C,編譯器,gcc,、,C+,編譯器,g+,、,鏈接器,ld,和,二進(jìn)制轉(zhuǎn)換工具,objcopy,等。其中基于,ARM,平臺(tái)的工具分別為:,arm-linux-as,、,arm-linux-gcc,、,arm-linux-g+,、,arm-linux-ld,和,arm-linux-objcopy,。,Linux,下的,GNU,調(diào)試工具,主要有,gdb,、,gdbserver,和,kgdb,。其中,gdb,和,gdbserver,可完成對(duì)目標(biāo)板上,Linux,應(yīng)用程序的遠(yuǎn)程調(diào)試。,22,GNU,工具的開發(fā)流程,在,Linux,操作系統(tǒng)下使用,GNU,工具開發(fā)程序的流程主要有以下幾個(gè)步驟:,編寫,C,、,C+,語(yǔ)言或匯編語(yǔ)言源程序;,用,gcc,或,g+,生成目標(biāo)文件;,編寫鏈接腳本文件;,用鏈接器生成最終目標(biāo)文件(,elf,格式);,用二進(jìn)制轉(zhuǎn)換工具生成可下載的二進(jìn)制代碼。,23,gcc,編譯器的使用,最初,gcc,的意思是,GNU C Compiler,,即只作為,C,程序語(yǔ)言的編譯器;現(xiàn)在,經(jīng)過(guò)多年的發(fā)展,,gcc,已經(jīng)變成了,GNU Compiler Collection,,即,GNU,編譯器家族的意思,除支持,C,語(yǔ)言以外,還支持,Ada,語(yǔ)言、,C+,語(yǔ)言、,Java,語(yǔ)言等多種語(yǔ)言。,gcc,是,GNU,組織提供的免費(fèi),C,編譯器,大多數(shù),Linux,版本都默認(rèn)安裝了這種編譯器。,24,gcc,編譯器的用法,Gcc,的使用格式為:,gcc option file,其中,option,是以“,-”,開始的各種選項(xiàng),,file,是要編譯的文件名。,在使用,gcc,進(jìn)行編譯時(shí),必須要給出必要的選項(xiàng)和文件名。,Gcc,的整個(gè)編譯過(guò)程分為預(yù)處理、編譯、匯編和鏈接四個(gè)過(guò)程,。,25,gcc,編譯器的用法,gcc,編譯器的常用選項(xiàng)有:, -o ,:表示要求編譯器生成指定文件名的可執(zhí)行文件;, -c ,:表示只要求編譯器進(jìn)行編譯,而不要進(jìn)行鏈接,生成以源文件的文件名命名但把其后綴由,.c,或,.cc,變成,.o,的目標(biāo)文件。, -g ,:要求編譯器在編譯的時(shí)候提供以后對(duì)程序進(jìn)行調(diào)試的信息。, -E ,:表示編譯器對(duì)源文件只進(jìn)行預(yù)處理就停止,而不做編譯、匯編和鏈接。, -S ,:表示編譯器只進(jìn)行編譯,而不做匯編和鏈接。, -O ,:是編譯器對(duì)程序提供的編譯優(yōu)化選項(xiàng),以提高執(zhí)行效率。, -Wall ,:指定產(chǎn)生全部的警告信息。,26,gcc,編譯器的用法,例:給出以下,Hello,源程序,void main( ),printf(“Hello the worldn”),要編譯這個(gè)程序,只需輸入以下命令即可完成,$ gcc o hello hello.c,其中,gcc,表示用,gcc,來(lái)編譯源程序,,-o,選項(xiàng)表示要求編譯器生成可執(zhí)行文件的文件名,,hello.c,是要編譯的源程序文件。,27,Makefile,文件和,Make,命令,Linux,內(nèi)核的配置系統(tǒng)由以下三個(gè)部分組成:,Makefile,:,用于定義,Linux,內(nèi)核的編譯規(guī)則;,配置文件(,config.in,):給用戶提供配置選擇的功能;,配置工具:包括配置命令解釋器和配置用戶界面等。,其中,,Makefile,文件描述了目標(biāo)文件之間的依賴關(guān)系,以及指定編譯過(guò)程中使用的工具,即根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標(biāo)代碼鏈接到一起,最終形成,Linux,內(nèi)核的二進(jìn)制文件。,Makefile,帶來(lái)的好處就是自動(dòng)化編譯(批處理),在需要編譯時(shí)只需要一個(gè),Make,命令即可自動(dòng)完成,極大的提高了軟件開發(fā)的效率。,28,Makefile,文件和,Make,命令,在,Linux,內(nèi)核中,與,Makefile,直接相關(guān)的文件有:,Makefile,:頂層,Makefile,,是整個(gè)內(nèi)核配置、編譯的總體控制文件。,Config,:內(nèi)核配置文件,包含由用戶選擇的配置選項(xiàng),用來(lái)存放內(nèi)核配置后的結(jié)果。,Arch/*/Makefile,:位于各,CPU,體系目錄下的,Makefile,。,各子目錄下的,Makefile,:負(fù)責(zé)所在子目錄下源代碼的管理。,Rules.make,:規(guī)則文件,被所有的,Makefile,使用。,頂層,Makefile,有兩個(gè)主要任務(wù):一是產(chǎn)生,vmlinux,文件;二是產(chǎn)生內(nèi)核模塊(,module,)。,29,Makefile,文件和,Make,命令,Makefile,中的變量,頂層,Makefile,定義并向環(huán)境中輸出了很多變量,為各個(gè)子目錄下的,Makefile,傳遞一些信息。具體常用變量如下:,版本信息:用來(lái)定義當(dāng)前內(nèi)核的版本;,CPU,體系結(jié)構(gòu):用于定義目標(biāo),CPU,的體系結(jié)構(gòu);,路徑信息:用于定義內(nèi)核等源代碼所在的目錄;,內(nèi)核組成信息:包括頭文件、內(nèi)核文件等;,編譯信息:用于定義交叉編譯的環(huán)境;,配置變量,config_,:用來(lái)說(shuō)明用戶配置的結(jié)果。,30,Makefile,文件和,Make,命令,Rules.make,變量,Rules.make,定義了所有,Makefile,共用的編譯規(guī)則。,Linux,把所有共用的編譯規(guī)則統(tǒng)一放置到,Rules.make,中,并在各自的,Makefile,中通過(guò)語(yǔ)句“,include Rules.make”,包含,Rules.make,,這樣可避免多個(gè),Makefile,中重復(fù)這些規(guī)則。,子目錄,Makefile,用來(lái)控制本級(jí)目錄下源代碼的編譯規(guī)則。,Make,Make,是一個(gè)解釋,Makefile,中指令的命令工具。,Make,命令執(zhí)行時(shí),需要一個(gè),Makefile,文件,以告訴,make,命令怎么去編譯和鏈接程序。,31,配置文件,除了,Makefile,的編寫,另外一個(gè)重要的工作就是把新功能加入到,Linux,的配置選項(xiàng)中,并提供此項(xiàng)功能的說(shuō)明,讓用戶有機(jī)會(huì)選擇此項(xiàng)功能。這些工作需要在,config.in,文件中用配置語(yǔ)言編寫配置腳本來(lái)實(shí)現(xiàn)。,在,Linux,內(nèi)核中,配置命令有多種方式:,Make config(,配置命令,) scripts/configure(,解釋腳本,),Make oldconfig scripts/configure,Make menuconfig scripts/menuconfig,Make xconfig scripts/tkparse,以字符界面配置,Make config,為例,其配置過(guò)程為頂層,Makefile,調(diào)用,scripts/configure,按照,arch/arm/config.in,來(lái)進(jìn)行配置,命令執(zhí)行完后產(chǎn)生配置文件,.config,,其中保存著有關(guān)配置信息。,32,配置文件,配置語(yǔ)言,頂層菜單,mainmenu_name /prompt/ /prompt/,用于指定本,CONFIG,語(yǔ)言文件頂層的名字,其中,/prompt/,是一串提示符。,詢問(wèn)語(yǔ)句,Bool /prompt/ /symbol/,hex /prompt/ /symbol/ /word/,int /prompt/ /symbol/ /word/,string /prompt/ /symbol/ /word/,tristate /prompt/ /symbol/,詢問(wèn)語(yǔ)句首先顯示一串提示符,/prompt/,等待用戶輸入,并把輸入的結(jié)果賦給,/symbol/,所代表的配置變量。,33,配置文件,定義語(yǔ)句,define_bool /symbol/ /word/,定義語(yǔ)句顯式的給配置變量,/symbol/,賦值,/word/,。,依賴語(yǔ)句,dep_bool /prompt/ /symbol/ /dep/,依賴語(yǔ)句與詢問(wèn)語(yǔ)句一樣,也是定義新的變量。不同的是,,/symbol/,的取值將依賴于配置變量列表,/dep/,。,選擇語(yǔ)句,choice /prompt/ /work/ /word/,選擇語(yǔ)句主要用于給出一串選擇列表,以供用戶選擇。,If,語(yǔ)句,菜單塊,Source,語(yǔ)句,34,啟動(dòng)加載程序,bootloader,SRAM,、,SDRAM,等存儲(chǔ)設(shè)備屬于易失性的存儲(chǔ)器,掉電以后其中的內(nèi)容會(huì)全部丟失,所以必須把操作系統(tǒng)的內(nèi)核鏡像存放在,Flash,等不易失性的存儲(chǔ)介質(zhì)上。而操作系統(tǒng)在運(yùn)行時(shí),需要?jiǎng)討B(tài)的創(chuàng)建一些如數(shù)據(jù)段、堆棧、頁(yè)表(針對(duì)使用虛擬地址的操作系統(tǒng))等內(nèi)容,所以需要在,RAM,中運(yùn)行操作系統(tǒng)。,因此,這就需要一個(gè)引導(dǎo)程序把操作系統(tǒng)的內(nèi)核鏡像從,Flash,存儲(chǔ)器拷貝到,RAM,中,然后再?gòu)?RAM,中執(zhí)行操作系統(tǒng)的內(nèi)核。,Bootloader,就是可以完成這樣一種功能的程序。,35,啟動(dòng)加載程序,bootloader,從本質(zhì)上來(lái)講,,bootloader,不屬于操作系統(tǒng)內(nèi)核。它采用,匯編語(yǔ)言,編寫,因此針對(duì)不同的,CPU,體系結(jié)構(gòu),這一部分代碼,不具有可移植性,。,在移植操作系統(tǒng)時(shí),這部分代碼必須加以改寫。具體來(lái)講,,bootloader,在系統(tǒng)啟動(dòng)時(shí)主要完成以下幾項(xiàng)工作:,將操作系統(tǒng)內(nèi)核從,Flash,拷貝到,SDRAM,中,如果是壓縮格式的內(nèi)核,還要將之解壓縮。,改寫系統(tǒng)的,memory map,,原先,flash,起始地址映射為,0,地址,這時(shí)需要將,RAM,的起始地址映射為,0,。,設(shè)置堆棧指針并將,bss,段清零。將來(lái)執(zhí)行,C,語(yǔ)言程序和調(diào)用子函數(shù)時(shí)要用到。,改變,pc,值,使得,CPU,開始執(zhí)行真正的操作系統(tǒng)內(nèi)核。,36,運(yùn)行操作系統(tǒng)內(nèi)核,bootloader,程序執(zhí)行完上述的各項(xiàng)工作后,通過(guò)一條跳轉(zhuǎn)指令,轉(zhuǎn)而執(zhí)行,init,目錄下,C,語(yǔ)言源文件,main.c,中的函數(shù),start_kernel( ),。因?yàn)樵诖酥?bootloader,已經(jīng)創(chuàng)建好一個(gè)初始化環(huán)境,,C,函數(shù)可以開始執(zhí)行了。,37,Linux,操作系統(tǒng)移植,在交叉編譯環(huán)境和,BootLoader,建立后,下面的工作就是對(duì)操作系統(tǒng)的移植。,對(duì)于系統(tǒng)移植,,Linux,系統(tǒng)實(shí)際上是由兩個(gè)比較獨(dú)立的部分組成,即,內(nèi)核部分,和,系統(tǒng)部分,具體過(guò)程如下,。,系統(tǒng)啟動(dòng)時(shí),加載程序(,BootLoader,)首先將,Linux,的,部分內(nèi)核,調(diào)入內(nèi)存,并將控制權(quán)交給內(nèi)存中,Linux,內(nèi)核的第一行代碼,加載程序的工作就算完成了,然后,Linux,內(nèi)核再將剩余的部分全部加載到內(nèi)存,初始化所有的設(shè)備,在內(nèi)存中建立好所需的數(shù)據(jù)結(jié)構(gòu)。這部分工作屬于,內(nèi)核部分,。,內(nèi)核加載設(shè)備并啟動(dòng),init,守護(hù)進(jìn)程,,init,守護(hù)進(jìn)程再根據(jù)配置文件加載文件系統(tǒng)、配置網(wǎng)絡(luò)、服務(wù)進(jìn)程等。這部分工作屬于,系統(tǒng)部分,。,即,內(nèi)核部分,的工作是初始化并控制大部分硬件設(shè)備,為內(nèi)存管理、進(jìn)程管理等工作作好準(zhǔn)備;而,系統(tǒng)部分,的工作是加載必需的設(shè)備,配置各種環(huán)境以便用戶可以使用整個(gè)系統(tǒng)。,38,Linux,內(nèi)核移植,Linux,內(nèi)核的移植可以分為,板級(jí)移植,和,片級(jí)移植,。,對(duì)于,Linux,發(fā)行版本中已經(jīng)支持的,CPU,通常只需要針對(duì)板級(jí)硬件進(jìn)行適當(dāng)?shù)男薷募纯?,這種移植叫做,板級(jí)移植,。,而對(duì)于,Linux,發(fā)行版本中沒(méi)有支持的,CPU,則需要添加相應(yīng),CPU,的內(nèi)核移植,這種移植叫做,片級(jí)移植,。,片級(jí)移植相對(duì)板級(jí)移植來(lái)說(shuō)要復(fù)雜許多,本系統(tǒng)采用的,Linux,發(fā)行版本中已經(jīng)包含,S3C2410X ARM920T,處理器的移植包,因此,只需要在其上進(jìn)行,Linux,板級(jí)移植的基本過(guò)程和方法。,39,Linux,內(nèi)核的目錄結(jié)構(gòu),linux,Documentation,arch,drivers,fs,include,init,mmnommu,lib,net,script,幫助文檔,體系結(jié)構(gòu)相關(guān)源代碼,驅(qū)動(dòng)程序,文件系統(tǒng),頭文件,kernel,初始化,Linux,內(nèi)存管理,常用函數(shù),網(wǎng)絡(luò)協(xié)議源代碼,腳本文件,40,Linux,內(nèi)核的,arch,目錄,armnommu,boot,kernel,lib,mach-s3c2410,vmlinux.lds,壓縮內(nèi)核啟動(dòng)引導(dǎo)代碼,內(nèi)核起始代碼,常用函數(shù),s3c2410,平臺(tái)相關(guān)代碼,核心的連接腳本文件,與架構(gòu)和平臺(tái)相關(guān)的源代碼都放在,arch,目錄下,對(duì)于,ARM,的,Linux,,包含于,arch,目錄下的,arm,子目錄中。,41,Linux,內(nèi)核的,arch,目錄,當(dāng)使用壓縮核心時(shí),,boot,目錄下包含壓縮和解壓核心的源代碼和,Makefile,文件。,kernel,目錄的,entry-armv.S,中為未壓縮內(nèi)核的起始執(zhí)行文件,內(nèi)核從其第一條指令處執(zhí)行。,vmlinux.lds,文件為核心的連接腳本文件,,壓縮核心解壓后必須解壓縮到該文件指定的地址。,42,Linux,內(nèi)核移植,配置內(nèi)核;,編譯內(nèi)核;,下載、運(yùn)行、調(diào)試內(nèi)核。,43,配置,Linux,內(nèi)核,make config,;,make menuconfig,;,make xconfig,;,44,make config,45,make menuconfig,46,make xconfig,47,Linux,常用配置選項(xiàng),系統(tǒng)及其存儲(chǔ)器配置;,網(wǎng)絡(luò)支持;,顯示器支持;,觸摸屏支持。,48,系統(tǒng)及其存儲(chǔ)器配置,在,System Type,菜單中,中進(jìn)行配置,選擇系統(tǒng)類型,處理器型號(hào),選擇處理器其它特性(,USB,支持等),49,網(wǎng)絡(luò)支持,在,Networking options,以及,Network device support,中進(jìn)行配置,選擇支持,TCP/IP,協(xié)議,50,網(wǎng)絡(luò)支持,在,Network device support,配置中,添加選項(xiàng),Network device support,,并在,Ethernet(10 or 100Mbit),中選擇,Other ISA cards,,如下圖所示,選擇,NE2000/NE1000 support,采用,RTL8019,網(wǎng)卡芯片,為,NE2000,兼容網(wǎng)卡芯片,因此,選擇該網(wǎng)卡,51,顯示器支持,在,Character devices,以及,Console drivers,中進(jìn)行配置。,在,Character devices,配置中,添加選項(xiàng),Virtual terminal,配置,如下圖所示。,Virtual terminal,支持,52,顯示器支持,在,Console drivers,中添加,Support Frame buffer devices,配置,采用,256,色,STN,顯示器,因此必須選擇,8bpp,支持,53,觸摸屏支持,在,Character devices,的,Support S3C2410 TouchScreen,子菜單中進(jìn)行配置,選擇,s3c2410,觸摸屏支持,54,編譯,Linux,內(nèi)核,建立依賴關(guān)系;,make dep,編譯內(nèi)核;,make,編譯內(nèi)核,make zImage,編譯壓縮核心(,zImage,),編譯生成地,Linux,映像文件,zImage,通常保存在,arch/arm/boot/,目錄下。,創(chuàng)建內(nèi)核模塊;,編譯,Linux,內(nèi)核大體上需要三個(gè)步驟:即建立內(nèi)核依賴關(guān)系、創(chuàng)建內(nèi)核鏡像和創(chuàng)建內(nèi)核模塊。,55,下載、運(yùn)行和調(diào)試內(nèi)核,通過(guò)調(diào)試器下載內(nèi)核并運(yùn)行;,通過(guò),BOOTLOADER,下載內(nèi)核到,SDRAM,中運(yùn)行;,通過(guò),BOOTLOADER,將內(nèi)核燒寫到,FLASH,中,然后運(yùn)行,Linux,。,56,Linux,調(diào)試手段,在,Linux,開發(fā)中,由于可能沒(méi)有標(biāo)準(zhǔn)鍵盤和顯示器支持,因此,通常通過(guò)串口將顯示信息發(fā)送到主機(jī),由主機(jī)端超級(jí)終端工具接收,以完成顯示功能。同時(shí)在超級(jí)終端中可以輸入數(shù)據(jù),然后由,Linux,接收,以完成標(biāo)準(zhǔn)鍵盤功能。,調(diào)試過(guò)程中也可以通過(guò)串口將調(diào)試信息打印到超級(jí)終端,這是,Linux,最有效和最簡(jiǎn)單的方法。,57,Linux,內(nèi)核移植主要過(guò)程,1,對(duì)于板級(jí)移植,內(nèi)核移植主要包括如下幾個(gè)部分:,內(nèi)核配置,包括板級(jí)包配置,如,S3C44B0X-MBA44,體系結(jié)構(gòu)相關(guān)代碼修改,根據(jù)板級(jí)包的配置,修改相應(yīng)的體系結(jié)構(gòu)相關(guān)代碼,包括:,壓縮核心啟動(dòng)代碼:,linux/arch/arm/boot/,內(nèi)核啟動(dòng)代碼:,linux/arch/arm/kernel/,板級(jí)相關(guān)代碼:,linux/arch/arm/mach-s3c2410/,連接腳本,核心連接腳本:,linux/arch/arm/vmlinux.lds,壓縮核心連接腳本:,linux/arch/arm/boot/compressed/linux.lds,58,Linux,內(nèi)核移植主要過(guò)程,2,加載文件系統(tǒng),ramdisk,編寫驅(qū)動(dòng)程序,驅(qū)動(dòng)程序目錄:,linux/drivers/,網(wǎng)卡驅(qū)動(dòng)程序:,linux/drivers/net/ne.c,LCD,驅(qū)動(dòng)程序:,linux/drivers/video/s3c2410fb.c,觸摸屏驅(qū)動(dòng)程序:,linux/drivers/char/s3c2410-ts.c,59,Linux,啟動(dòng)過(guò)程,1,解壓縮核心,核心打印,信息,內(nèi)核命令行,存儲(chǔ)器,60,Linux,啟動(dòng)過(guò)程,2,IIC,總線初始化,Frame Buffer,顯示初始化,61,Linux,啟動(dòng)過(guò)程,3,Linux,控制臺(tái),62,Linux,內(nèi)核移植的若干問(wèn)題,源程序閱讀問(wèn)題,1,Linux,內(nèi)核源代碼非常多,且結(jié)構(gòu)復(fù)雜,,Linux,內(nèi)核有接近,10000,個(gè)文件,,4000000,行代碼。,因此,閱讀,Linux,時(shí)必須借助一些工具:,Source insight,、,Ultraedit,等,Linux,內(nèi)核使用,GNU C,,它在,ANSI C,基礎(chǔ)上進(jìn)行了一些擴(kuò)充,因此在許多編程習(xí)慣上與,ANSI C,不同。,大量使用,宏定義,,且許多宏定義非常復(fù)雜,這也在一定程度上增加了難度。,63,Linux,內(nèi)核移植的若干問(wèn)題,源程序閱讀問(wèn)題,2,Linux,中并不是所有代碼都編譯進(jìn)去,對(duì)于一個(gè)體系結(jié)構(gòu),只有很少部分的代碼參與編譯,因此,必須掌握,Linux,發(fā)布中各目錄的意義才能進(jìn)一步清楚是否參與編譯。,還可以通過(guò)查看,.o,文件的方式查看當(dāng)前參與編譯的是哪個(gè)文件,通常,xxx.c,文件生成的目標(biāo)文件為,xxx.o,,只有生成了,.o,的文件才參與編譯,,注意:這適合于大部分情況,但是不是絕對(duì)的,。,Linux,中大量使用,條件編譯,,閱讀代碼時(shí)需要弄清楚,到底哪部分代碼參與編譯。,#ifdef xxx,#elif,#endif,64,Linux,內(nèi)核移植的若干問(wèn)題,GNU C,結(jié)構(gòu)體初始化,結(jié)構(gòu)體聲明,ANSI C,結(jié)構(gòu)體初始化,必須按順序,GNU C,結(jié)構(gòu)體初始化,無(wú)需按順序,65,Linux,應(yīng)用程序設(shè)計(jì),編寫程序;,編寫,Makefile,文件;,編譯;,運(yùn)行;,66,編寫應(yīng)用程序,在編寫應(yīng)用程序之前,應(yīng)首先建立一個(gè)工作目錄,如,/tmp,;,選用文本編輯器,Vi,編寫源程序代碼,hello.c,如下:,#include ,int main(void),printf(“Hello the world! n”);,return 0;,若在宿主機(jī)中編譯并運(yùn)行,hello,程序,則使用如下命令,gcc o hello hello.c,若編譯在目標(biāo)機(jī)上運(yùn)行的,hello,程序,則使用如下命令,arm-linux-gcc o hello hello.c,67,編寫,Makefile,文件,指定編譯器,生成的執(zhí)行文件和鏈接過(guò)程中的目標(biāo)文件,編譯和鏈接的參數(shù),編譯命令,拷貝,helloworld,映像文件到,/tftpboot/examples,中,清除,68,Linux,應(yīng)用程序的運(yùn)行,應(yīng)用程序運(yùn)行可以采用如下兩種方式:,在,Linux,內(nèi)核啟動(dòng)起來(lái),并且有辦法從主機(jī)獲取文件時(shí),可以在,Linux,控制臺(tái)直接從主機(jī)獲取編譯后的應(yīng)用程序??梢酝ㄟ^(guò),ftp,等方式傳輸。,也可以在編譯應(yīng)用程序后將該應(yīng)用程序拷貝到,ramdisk,中,然后重新制作,ramdisk,,并更新,ramdisk,文件系統(tǒng),此時(shí)新的程序?qū)⒃谖募到y(tǒng)中。,69,Linux,應(yīng)用程序的運(yùn)行,重新編譯內(nèi)核時(shí),通常將應(yīng)用程序添加到,Linux,文件系統(tǒng)的,bin,目錄,該目錄有全局路徑。且該文件,應(yīng)該具有執(zhí)行屬性,,可以通過(guò)如下命令修改:,chmod 777 leddemo,在新內(nèi)核啟動(dòng)后,直接在命令行輸入文件名即可運(yùn)行。,當(dāng)直接在,Linux,控制臺(tái)中從主機(jī)上獲取應(yīng)用程序時(shí),必須保存到可寫的位置,且通過(guò)如下命令執(zhí)行該程序:,./leddemo,70,配置,Linux,應(yīng)用程序啟動(dòng)后自動(dòng)運(yùn)行,如果需要在系統(tǒng)啟動(dòng)以后自動(dòng)運(yùn)行,helloworld,程序,需要編輯,ramdisk,中的啟動(dòng)腳本文件,該文件為,root/rd/etc/init.d/rcS,使用,vi,編輯器編輯,在該文件最后添加如下腳本:,/bin/helloworld,該腳本將啟動(dòng)后運(yùn)行,helloworld,,直到程序退出。,或,/bin/ helloworld &,它將在,后臺(tái)運(yùn)行,helloworld,,不影響其他的程序運(yùn)行。,71,Linux,應(yīng)用程序的調(diào)試,建立連接,應(yīng)用程序的開發(fā)一般是先在宿主機(jī)上調(diào)試完成,然后再下載到目標(biāo)板上運(yùn)行。因此,為了保證正常下載程序,必須建立可靠的連接。具體連接方式主要有,串口連接,、,網(wǎng)絡(luò)連接,和,JTAG,連接,三種。,串口連接,在,Linux,下使用的串口通信程序?yàn)?minicom,,它類似于,Windows,系統(tǒng)下的超級(jí)終端工具。,Minicom,的具體用法參見實(shí)驗(yàn)手冊(cè)的,附錄,D,,由于實(shí)驗(yàn)中用的是虛擬機(jī)的方式,因此直接使用超級(jí)終端工具。,網(wǎng)絡(luò)連接,網(wǎng)絡(luò)連接使用廣泛流傳的,FTP,協(xié)議來(lái)實(shí)現(xiàn),使用時(shí)需要進(jìn)行,FTP,服務(wù)器的配置并設(shè)定好相應(yīng)的,IP,地址。,JTAG,連接,72,Linux,應(yīng)用程序的調(diào)試,編寫應(yīng)用程序,前面已進(jìn)行說(shuō)明。,下載應(yīng)用程序,與連接方式相關(guān),下載應(yīng)用程序主要有串口下載和網(wǎng)絡(luò)下載兩種方式,對(duì)于支持,USB,的目標(biāo)板,還可以借助,U,盤復(fù)制生成的可執(zhí)行文件。,調(diào)試應(yīng)用程序,主要使用,Linux,自帶的,gdb,調(diào)試程序來(lái)完成。通過(guò),gdb,,可以在程序運(yùn)行過(guò)程中實(shí)時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存使用情況。,需注意的是,要想使用,gdb,就必須在對(duì)源碼進(jìn)行編譯的時(shí)候使用,“,-g”,編譯選項(xiàng),開關(guān)來(lái)通知編譯器,這樣程序在編譯時(shí)就會(huì)包含調(diào)試信息并保存在目標(biāo)文件中。,73,Vi,編輯器的使用,我們?cè)谑褂糜?jì)算機(jī)的時(shí)候,往往需要建立一些自己的文件,如文本文件、數(shù)據(jù)文件、源程序文件等,這些工作都離不開編輯器的支持。,Linux,系統(tǒng)中的編輯器有很多,例如行編輯器,Ed,、,Ex,,全屏幕編輯器,Vi,、,Emacs,等。,Vi,是,Linux,系統(tǒng)的第一個(gè)全屏幕交互式編輯程序,也是現(xiàn)在人們使用最廣泛的一種編輯工具。,74,Vi,編輯器的使用,Vi,是“,Visual interface”,的簡(jiǎn)稱,它有三種基本的工作模式:,命令行模式,,在,shell,環(huán)境下(提示符為,$,)輸入啟動(dòng)命令“,Vi”,進(jìn)入編輯器時(shí)就處于命令行模式。在該模式下,用戶可輸入各種合法的,Vi,命令來(lái)進(jìn)行操作,,需注意的是所輸入的命令并不在屏幕上顯示出來(lái)。,文本輸入模式,,在命令模式下輸入插入命令,i,、附加命令,a,、打開命令,o,、修改命令,c,、取代命令,r,或替換命令,s,都可以進(jìn)入文本輸入模式。按,Esc,鍵則回到命令模式。,末行模式,,在命令模式下,用戶按“:”鍵即可進(jìn)入末行模式,此時(shí),Vi,在顯示窗口的最后一行顯示“:”作為提示符。末行命令執(zhí)行完后,,Vi,會(huì)自動(dòng)回到命令模式。,75,Vi,編輯器的使用,Vi,編輯器的進(jìn)入,用戶在進(jìn)入,Linux,系統(tǒng)后,在提示符后鍵入,Vi,和想要編輯的文件名,便可進(jìn)入到,Vi,中。例如:,$ vi example.c,進(jìn)入,Vi,后,首先進(jìn)入的就是命令模式,這時(shí)輸入的所有字符都將作為命令來(lái)解釋。,Vi,編輯器的退出,在命令模式中,連續(xù)按兩次大寫字母,Z,,則,Vi,退出,返回到,shell,狀態(tài)。,在末行模式下,輸入命令“,:w”,則,Vi,保存當(dāng)前編輯的文件,然后輸入“,:q”,,則系統(tǒng)退出,Vi,返回到,shell,狀態(tài)。,

注意事項(xiàng)

本文(應(yīng)用程序設(shè)計(jì))為本站會(huì)員(dfg****19)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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