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

應用程序設計

上傳人:dfg****19 文檔編號:247451761 上傳時間:2024-10-18 格式:PPT 頁數(shù):75 大?。?.17MB
收藏 版權申訴 舉報 下載
應用程序設計_第1頁
第1頁 / 共75頁
應用程序設計_第2頁
第2頁 / 共75頁
應用程序設計_第3頁
第3頁 / 共75頁

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

15 積分

下載資源

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

資源描述:

《應用程序設計》由會員分享,可在線閱讀,更多相關《應用程序設計(75頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,1,1,3,2,4,5,嵌入式,Linux,交叉編譯環(huán)境的建立,Linux,開發(fā)環(huán)境的建立,6,7,嵌入式,Linux,應用程序設計,Linux,開發(fā)步驟,Linux,開發(fā)環(huán)境的選擇,交叉編譯過程,GNU,工具的使用及開發(fā)流程,Linux,常用命令,2,開發(fā)環(huán)境的建立,在進行項目開發(fā)前,首先要做的就是搭建一套基于,Linux,操作系統(tǒng)的應用開發(fā)環(huán)境,一般由,目標板,和,宿主機,所構成。目標板用于運行操作系統(tǒng)和系統(tǒng)應用軟件,而目標板所用到的操作系統(tǒng)的內(nèi)核編譯、應用程序的開發(fā)和調(diào)試則需要通過宿主機來完成。,

2、開發(fā)環(huán)境對硬件沒有特殊的要求,但是為了雙方之間建立連接關系,關鍵的幾種接口電路如,串口、以太網(wǎng)接口,和,USB,接口,是必不可少的。,用于開發(fā)和調(diào)試目標板上所用到的操作系統(tǒng)、應用程序等所有軟件。,這種在宿主機上開發(fā)程序、在目標板上運行程序的方式,通常就叫做交叉開發(fā)。,3,開發(fā)環(huán)境的建立,4,目標板,(Target),可以是嵌入式應用軟件的實際運行環(huán)境,當然也可以是替代實際環(huán)境的仿真系統(tǒng)(如軟件模擬器)。,宿主機,(Host),通過串口、網(wǎng)絡連接或調(diào)試接口,(,如,JTAG,仿真器,),與目標機通信。宿主機的軟硬件資源比較豐富,其操作系統(tǒng)主要有,Windows,和,Linux,兩種,其上用于開發(fā)

3、程序的那套軟件工具,通常叫做開發(fā)工具鏈。,開發(fā)環(huán)境的建立,5,嵌入式,Linux,的組成,最基本的嵌入式,Linux,系統(tǒng)需要,3,個基本元素:,系統(tǒng)引導程序,:用于完成機器加電后的系統(tǒng)定位引導;,Linux,系統(tǒng)內(nèi)核,:為嵌入式應用提供一個軟件環(huán)境,為應用程序完成基本的底層資源管理工作;,初始化過程,:完成基本的初始化。,為使這個最小嵌入式系統(tǒng)具有一定的實用性,還需加上硬件的,驅(qū)動程序,及,個或幾個,應用進程,以提供必要的應用功能支持。如果應用比較復雜,可能還需要添加一個可以在,ROM,或,RAM,中使用的,文件系統(tǒng),、,TCP/IP,網(wǎng)絡協(xié)議棧,等。在,PDA,領域,還需要加上,個,GUl

4、,支持,。,6,Linux,開發(fā)步驟,Linux,操作系統(tǒng)作為一種多任務、穩(wěn)定可靠、內(nèi)核可裁剪的系統(tǒng),是開發(fā)嵌入式軟硬件產(chǎn)品的優(yōu)秀軟件平臺。,嵌入式,Linux,是一種開放源碼、軟實時、多任務的嵌入式操作系統(tǒng)。通常它是在標準,Linux,的基礎上針對嵌入式系統(tǒng)進行裁剪和優(yōu)化后形成的。裁剪和優(yōu)化后的,Linux,體積更小,性能更加穩(wěn)定,而且源代碼本身是免費的。這將大大減少開發(fā)商的成本,更具市場競爭力,具體進行,Linux,開發(fā)的步驟如下:,BOOTLOADER,開發(fā);,Linux,開發(fā)環(huán)境建立;,Linux,內(nèi)核移植;,應用程序開發(fā)。,7,嵌入式,Linux,的開發(fā)環(huán)境,個人用,Linux,開發(fā)

5、嵌入式應用程序,可以在自己的,PC,機上安裝一套,Linux,操作系統(tǒng),使用,Linux,中的,X Windows,打開若干個窗口進行編譯、下載和調(diào)試等。,當多名工程師共同來開發(fā)一個系統(tǒng)時,可以用,1,臺,PC,機運行,Linux,作為服務器,每個開發(fā)工程師都通過局域網(wǎng)用,Telnet,登錄到這臺服務器上,被開發(fā)的目標板也掛在網(wǎng)上。然后在服務器的,Linux,環(huán)境下用,GNU gcc,編譯成生目標代碼,再用,FTP,傳回到自己的,PC,機上,最后通過串口或網(wǎng)絡下載到目標機上即可完成整個嵌入式系統(tǒng)的開發(fā)。,8,交叉編譯環(huán)境的建立,所謂,交叉編譯,,就是在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼

6、。,采用交叉編譯的主要原因,在于,多數(shù)嵌入式目標機不能提供足夠的資源供編譯過程使用,因而只好將編譯工作轉移到高性能的宿主機中進行。,交叉編譯環(huán)境,是一個由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境。交叉編譯工具主要包括針對目標系統(tǒng)的,編譯器,gcc,、目標系統(tǒng)的,二進制工具,binutils,、目標系統(tǒng)的,標準,c,庫,glibc,和目標系統(tǒng)的,Linux,內(nèi)核頭文件,。,9,GNU,交叉編譯,Linux,采用,GNU,交叉編譯器。,GNU,的交叉編譯器,包括以下組件:,1.gcc,交叉編譯器,即在宿主機上開發(fā)編譯目標上可運行的二進制文件;,2.binutils,輔助工具,包括,objdump,

7、、,objcopy,等;,3.gdb,調(diào)試器。,對于,ARM,可以采用如下兩個版本的編譯器:,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)境

8、,+ Cygwin,;,Windows,環(huán)境,+ VMWare,虛擬機(安裝,RedHat 9.0,),。,Linux,環(huán)境,推薦,RedHat 9.0,;,單機模式(一臺計算機),雙機模式(兩臺計算機),Windows + Linux,。,13,在,linux,環(huán)境下進行,Linux,開發(fā),必須采用支持,GDB,的調(diào)試器(如,ADT1000A,)才能進行調(diào)試,否則只能通過,BOOTLOADER,進行簡單的程序燒寫運行等。,調(diào)試信息的打印可以通過串口完成,使用,linux,下的,minicom,超級終端程序,(類似于,Windows,上的超級終端工具)接收并顯示目標板傳送的打印信息。,Linu

9、x,程序的編輯、編譯和調(diào)試都是在,Linux,環(huán)境下進行的。,Linux,串口驅(qū)動完成后,可以通過內(nèi)核打印函數(shù),printk,向串口打印信息,這是,Linux,內(nèi)核調(diào)試過程中最有效的手段。,14,在,Windows + Cygwin,環(huán)境下進行,Linux,開發(fā),Linux,內(nèi)核配置和編譯等在,Cygwin,環(huán)境下運行,程序編輯和調(diào)試都在,Windows,環(huán)境下進行,,必須采用支持,Windows,下進行,linux,調(diào)試的調(diào)試器(如,ADT1000A,)才能進行調(diào)試,否則只能通過,BOOTLOADER,進行簡單的程序燒寫運行等,調(diào)試信息的打印可以通過串口完成,使用,Windows,上的超級終

10、端工具接收并顯示目標板傳送的打印信息。,Cygwin,是運行于,Windows,中的一個應用程序,它可以使得,Linux,環(huán)境下的應用程序可以在,Cygwin,環(huán)境下進行編譯,即可以在,Windows,進行編譯。,15,在,Windows + VMWare,虛擬機環(huán)境下進行,Linux,開發(fā),如果需要使用只支持,Windows,環(huán)境下調(diào)試的調(diào)試器,可以通過在,VMWare,中安裝,linux,虛擬機,在該虛擬機中進行編輯、編譯,Linux,,然后通過網(wǎng)絡(,ftp,、,nfs,、,ssh,)等手段傳送到,Windows,中,進行調(diào)試,,這樣編譯和調(diào)試可以分別在,linux,和,windows,

11、環(huán)境下但是是在一臺電腦中完成,,它的缺點是系統(tǒng)要求較高,運行速度慢。,也可以在兩臺電腦中分別安裝,linux,和,windows,,分別實現(xiàn)編譯和調(diào)試。,VMWare,是運行于,Windows,中的一個應用程序,是一個虛擬機,可以在其上安裝多個操作系統(tǒng),相當于在,Windows,上安裝一個虛擬的操作系統(tǒng)。,16,17,交叉編譯過程,在,Linux,交叉編譯環(huán)境下,整個編譯過程大體上可以分為以下幾個步驟:,編譯,binutils,運行,configure,文件,并使用,-prefix=$PREFIX,參數(shù)指定安裝路徑,使用,-target=arm-linux,參數(shù)指定目標機類型,然后執(zhí)行,mak

12、e install,。,配置,Linux,內(nèi)核頭文件,執(zhí)行,make mrproper,進行清理工作,然后執(zhí)行,make config ARCH=arm,(或,make menuconfig/xconfig ARCH=arm,)進行配置。一定要在命令行中使用,ARCH=arm,指定,CPU,架構,因為默認架構為主機的,CPU,架構。,18,交叉編譯過程,第一次編譯,gcc,這一步執(zhí)行,make install,,生成一個最簡單的,gcc,。由于編譯整個,gcc,需要目標機的,glibc,庫,而它在剛開始時還不存在,因此需要首先生成一個最簡單的,gcc,,它只需要具備編譯目標機,glibc,庫的

13、能力即可。,交叉編譯,glibc,這一步通過執(zhí)行,configure,和,make install,來對,glibc,庫進行交叉編譯。,configure,的運行參數(shù)如下:,CC,arm-linux-gcc ./configure,-prefix=$PREFIX/arm-linux,-host=arm-linux,-enable-add-ons,19,交叉編譯過程,第二編譯,gcc,首先運行,configure,,參數(shù)設置為,-prefix=$PREFIX,-target=arm-linux,-enable-languages=c,c+,接著運行,make install,。這樣整個交叉編譯環(huán)

14、境就生成了。,建立一個交叉編譯工具鏈是一個相當復雜的過程,為了節(jié)省時間,可以直接從網(wǎng)上下載一些已編譯好的交叉編譯工具鏈,如,arm-linux-toolchains.tgz,。,20,Linux,開發(fā)工具的使用,運行于,Linux,操作系統(tǒng)下的自由軟件,GNU gcc,編譯器,不僅可以編譯,Linux,操作系統(tǒng)下運行的應用程序,還可以編譯,Linux,內(nèi)核本身,甚至可以交叉編譯運行于其他,CPU,上的程序。因此,在進行嵌入式系統(tǒng)應用程序開發(fā)時,GNU gcc,得到了廣泛的應用。,GNU,開發(fā)工具的主要缺點是采用命令行方式,用戶掌握和使用起來比較困難,不如基于,Windows,系統(tǒng)的開發(fā)工具易用

15、,可一旦掌握了其用法就可以非常方便地進行項目開發(fā)。,GNU,的操作系統(tǒng)和開發(fā)工具都是免費的,只要遵循,GPL,協(xié)議,任何人都可以隨意獲取并使用。,21,Linux,開發(fā)工具,GNU,的使用,GNU,提供的,編譯工具,包括,匯編器,as,、,C,編譯器,gcc,、,C+,編譯器,g+,、,鏈接器,ld,和,二進制轉換工具,objcopy,等。其中基于,ARM,平臺的工具分別為:,arm-linux-as,、,arm-linux-gcc,、,arm-linux-g+,、,arm-linux-ld,和,arm-linux-objcopy,。,Linux,下的,GNU,調(diào)試工具,主要有,gdb,、,g

16、dbserver,和,kgdb,。其中,gdb,和,gdbserver,可完成對目標板上,Linux,應用程序的遠程調(diào)試。,22,GNU,工具的開發(fā)流程,在,Linux,操作系統(tǒng)下使用,GNU,工具開發(fā)程序的流程主要有以下幾個步驟:,編寫,C,、,C+,語言或匯編語言源程序;,用,gcc,或,g+,生成目標文件;,編寫鏈接腳本文件;,用鏈接器生成最終目標文件(,elf,格式);,用二進制轉換工具生成可下載的二進制代碼。,23,gcc,編譯器的使用,最初,gcc,的意思是,GNU C Compiler,,即只作為,C,程序語言的編譯器;現(xiàn)在,經(jīng)過多年的發(fā)展,,gcc,已經(jīng)變成了,GNU Comp

17、iler Collection,,即,GNU,編譯器家族的意思,除支持,C,語言以外,還支持,Ada,語言、,C+,語言、,Java,語言等多種語言。,gcc,是,GNU,組織提供的免費,C,編譯器,大多數(shù),Linux,版本都默認安裝了這種編譯器。,24,gcc,編譯器的用法,Gcc,的使用格式為:,gcc option file,其中,option,是以“,-”,開始的各種選項,,file,是要編譯的文件名。,在使用,gcc,進行編譯時,必須要給出必要的選項和文件名。,Gcc,的整個編譯過程分為預處理、編譯、匯編和鏈接四個過程,。,25,gcc,編譯器的用法,gcc,編譯器的常用選項有:,

18、-o ,:表示要求編譯器生成指定文件名的可執(zhí)行文件;, -c ,:表示只要求編譯器進行編譯,而不要進行鏈接,生成以源文件的文件名命名但把其后綴由,.c,或,.cc,變成,.o,的目標文件。, -g ,:要求編譯器在編譯的時候提供以后對程序進行調(diào)試的信息。, -E ,:表示編譯器對源文件只進行預處理就停止,而不做編譯、匯編和鏈接。, -S ,:表示編譯器只進行編譯,而不做匯編和鏈接。, -O ,:是編譯器對程序提供的編譯優(yōu)化選項,以提高執(zhí)行效率。, -Wall ,:指定產(chǎn)生全部的警告信息。,26,gcc,編譯器的用法,例:給出以下,Hello,源程序,void main( ),printf(“H

19、ello the worldn”),要編譯這個程序,只需輸入以下命令即可完成,$ gcc o hello hello.c,其中,gcc,表示用,gcc,來編譯源程序,,-o,選項表示要求編譯器生成可執(zhí)行文件的文件名,,hello.c,是要編譯的源程序文件。,27,Makefile,文件和,Make,命令,Linux,內(nèi)核的配置系統(tǒng)由以下三個部分組成:,Makefile,:,用于定義,Linux,內(nèi)核的編譯規(guī)則;,配置文件(,config.in,):給用戶提供配置選擇的功能;,配置工具:包括配置命令解釋器和配置用戶界面等。,其中,,Makefile,文件描述了目標文件之間的依賴關系,以及指定編譯

20、過程中使用的工具,即根據(jù)配置的情況,構造出需要編譯的源文件列表,然后分別編譯,并把目標代碼鏈接到一起,最終形成,Linux,內(nèi)核的二進制文件。,Makefile,帶來的好處就是自動化編譯(批處理),在需要編譯時只需要一個,Make,命令即可自動完成,極大的提高了軟件開發(fā)的效率。,28,Makefile,文件和,Make,命令,在,Linux,內(nèi)核中,與,Makefile,直接相關的文件有:,Makefile,:頂層,Makefile,,是整個內(nèi)核配置、編譯的總體控制文件。,Config,:內(nèi)核配置文件,包含由用戶選擇的配置選項,用來存放內(nèi)核配置后的結果。,Arch/*/Makefile,:位于

21、各,CPU,體系目錄下的,Makefile,。,各子目錄下的,Makefile,:負責所在子目錄下源代碼的管理。,Rules.make,:規(guī)則文件,被所有的,Makefile,使用。,頂層,Makefile,有兩個主要任務:一是產(chǎn)生,vmlinux,文件;二是產(chǎn)生內(nèi)核模塊(,module,)。,29,Makefile,文件和,Make,命令,Makefile,中的變量,頂層,Makefile,定義并向環(huán)境中輸出了很多變量,為各個子目錄下的,Makefile,傳遞一些信息。具體常用變量如下:,版本信息:用來定義當前內(nèi)核的版本;,CPU,體系結構:用于定義目標,CPU,的體系結構;,路徑信息:用于

22、定義內(nèi)核等源代碼所在的目錄;,內(nèi)核組成信息:包括頭文件、內(nèi)核文件等;,編譯信息:用于定義交叉編譯的環(huán)境;,配置變量,config_,:用來說明用戶配置的結果。,30,Makefile,文件和,Make,命令,Rules.make,變量,Rules.make,定義了所有,Makefile,共用的編譯規(guī)則。,Linux,把所有共用的編譯規(guī)則統(tǒng)一放置到,Rules.make,中,并在各自的,Makefile,中通過語句“,include Rules.make”,包含,Rules.make,,這樣可避免多個,Makefile,中重復這些規(guī)則。,子目錄,Makefile,用來控制本級目錄下源代碼的編譯規(guī)

23、則。,Make,Make,是一個解釋,Makefile,中指令的命令工具。,Make,命令執(zhí)行時,需要一個,Makefile,文件,以告訴,make,命令怎么去編譯和鏈接程序。,31,配置文件,除了,Makefile,的編寫,另外一個重要的工作就是把新功能加入到,Linux,的配置選項中,并提供此項功能的說明,讓用戶有機會選擇此項功能。這些工作需要在,config.in,文件中用配置語言編寫配置腳本來實現(xiàn)。,在,Linux,內(nèi)核中,配置命令有多種方式:,Make config(,配置命令,) scripts/configure(,解釋腳本,),Make oldconfig scripts/co

24、nfigure,Make menuconfig scripts/menuconfig,Make xconfig scripts/tkparse,以字符界面配置,Make config,為例,其配置過程為頂層,Makefile,調(diào)用,scripts/configure,按照,arch/arm/config.in,來進行配置,命令執(zhí)行完后產(chǎn)生配置文件,.config,,其中保存著有關配置信息。,32,配置文件,配置語言,頂層菜單,mainmenu_name /prompt/ /prompt/,用于指定本,CONFIG,語言文件頂層的名字,其中,/prompt/,是一串提示符。,詢問語句,Bool

25、/prompt/ /symbol/,hex /prompt/ /symbol/ /word/,int /prompt/ /symbol/ /word/,string /prompt/ /symbol/ /word/,tristate /prompt/ /symbol/,詢問語句首先顯示一串提示符,/prompt/,等待用戶輸入,并把輸入的結果賦給,/symbol/,所代表的配置變量。,33,配置文件,定義語句,define_bool /symbol/ /word/,定義語句顯式的給配置變量,/symbol/,賦值,/word/,。,依賴語句,dep_bool /prompt/ /symbol/

26、 /dep/,依賴語句與詢問語句一樣,也是定義新的變量。不同的是,,/symbol/,的取值將依賴于配置變量列表,/dep/,。,選擇語句,choice /prompt/ /work/ /word/,選擇語句主要用于給出一串選擇列表,以供用戶選擇。,If,語句,菜單塊,Source,語句,34,啟動加載程序,bootloader,SRAM,、,SDRAM,等存儲設備屬于易失性的存儲器,掉電以后其中的內(nèi)容會全部丟失,所以必須把操作系統(tǒng)的內(nèi)核鏡像存放在,Flash,等不易失性的存儲介質(zhì)上。而操作系統(tǒng)在運行時,需要動態(tài)的創(chuàng)建一些如數(shù)據(jù)段、堆棧、頁表(針對使用虛擬地址的操作系統(tǒng))等內(nèi)容,所以需要在,R

27、AM,中運行操作系統(tǒng)。,因此,這就需要一個引導程序把操作系統(tǒng)的內(nèi)核鏡像從,Flash,存儲器拷貝到,RAM,中,然后再從,RAM,中執(zhí)行操作系統(tǒng)的內(nèi)核。,Bootloader,就是可以完成這樣一種功能的程序。,35,啟動加載程序,bootloader,從本質(zhì)上來講,,bootloader,不屬于操作系統(tǒng)內(nèi)核。它采用,匯編語言,編寫,因此針對不同的,CPU,體系結構,這一部分代碼,不具有可移植性,。,在移植操作系統(tǒng)時,這部分代碼必須加以改寫。具體來講,,bootloader,在系統(tǒng)啟動時主要完成以下幾項工作:,將操作系統(tǒng)內(nèi)核從,Flash,拷貝到,SDRAM,中,如果是壓縮格式的內(nèi)核,還要將之解

28、壓縮。,改寫系統(tǒng)的,memory map,,原先,flash,起始地址映射為,0,地址,這時需要將,RAM,的起始地址映射為,0,。,設置堆棧指針并將,bss,段清零。將來執(zhí)行,C,語言程序和調(diào)用子函數(shù)時要用到。,改變,pc,值,使得,CPU,開始執(zhí)行真正的操作系統(tǒng)內(nèi)核。,36,運行操作系統(tǒng)內(nèi)核,bootloader,程序執(zhí)行完上述的各項工作后,通過一條跳轉指令,轉而執(zhí)行,init,目錄下,C,語言源文件,main.c,中的函數(shù),start_kernel( ),。因為在此之前,bootloader,已經(jīng)創(chuàng)建好一個初始化環(huán)境,,C,函數(shù)可以開始執(zhí)行了。,37,Linux,操作系統(tǒng)移植,在交叉編譯

29、環(huán)境和,BootLoader,建立后,下面的工作就是對操作系統(tǒng)的移植。,對于系統(tǒng)移植,,Linux,系統(tǒng)實際上是由兩個比較獨立的部分組成,即,內(nèi)核部分,和,系統(tǒng)部分,具體過程如下,。,系統(tǒng)啟動時,加載程序(,BootLoader,)首先將,Linux,的,部分內(nèi)核,調(diào)入內(nèi)存,并將控制權交給內(nèi)存中,Linux,內(nèi)核的第一行代碼,加載程序的工作就算完成了,然后,Linux,內(nèi)核再將剩余的部分全部加載到內(nèi)存,初始化所有的設備,在內(nèi)存中建立好所需的數(shù)據(jù)結構。這部分工作屬于,內(nèi)核部分,。,內(nèi)核加載設備并啟動,init,守護進程,,init,守護進程再根據(jù)配置文件加載文件系統(tǒng)、配置網(wǎng)絡、服務進程等。這部分

30、工作屬于,系統(tǒng)部分,。,即,內(nèi)核部分,的工作是初始化并控制大部分硬件設備,為內(nèi)存管理、進程管理等工作作好準備;而,系統(tǒng)部分,的工作是加載必需的設備,配置各種環(huán)境以便用戶可以使用整個系統(tǒng)。,38,Linux,內(nèi)核移植,Linux,內(nèi)核的移植可以分為,板級移植,和,片級移植,。,對于,Linux,發(fā)行版本中已經(jīng)支持的,CPU,通常只需要針對板級硬件進行適當?shù)男薷募纯?,這種移植叫做,板級移植,。,而對于,Linux,發(fā)行版本中沒有支持的,CPU,則需要添加相應,CPU,的內(nèi)核移植,這種移植叫做,片級移植,。,片級移植相對板級移植來說要復雜許多,本系統(tǒng)采用的,Linux,發(fā)行版本中已經(jīng)包含,S3C24

31、10X ARM920T,處理器的移植包,因此,只需要在其上進行,Linux,板級移植的基本過程和方法。,39,Linux,內(nèi)核的目錄結構,linux,Documentation,arch,drivers,fs,include,init,mmnommu,lib,net,script,幫助文檔,體系結構相關源代碼,驅(qū)動程序,文件系統(tǒng),頭文件,kernel,初始化,Linux,內(nèi)存管理,常用函數(shù),網(wǎng)絡協(xié)議源代碼,腳本文件,40,Linux,內(nèi)核的,arch,目錄,armnommu,boot,kernel,lib,mach-s3c2410,vmlinux.lds,壓縮內(nèi)核啟動引導代碼,內(nèi)核起始代碼,常

32、用函數(shù),s3c2410,平臺相關代碼,核心的連接腳本文件,與架構和平臺相關的源代碼都放在,arch,目錄下,對于,ARM,的,Linux,,包含于,arch,目錄下的,arm,子目錄中。,41,Linux,內(nèi)核的,arch,目錄,當使用壓縮核心時,,boot,目錄下包含壓縮和解壓核心的源代碼和,Makefile,文件。,kernel,目錄的,entry-armv.S,中為未壓縮內(nèi)核的起始執(zhí)行文件,內(nèi)核從其第一條指令處執(zhí)行。,vmlinux.lds,文件為核心的連接腳本文件,,壓縮核心解壓后必須解壓縮到該文件指定的地址。,42,Linux,內(nèi)核移植,配置內(nèi)核;,編譯內(nèi)核;,下載、運行、調(diào)試內(nèi)核。

33、,43,配置,Linux,內(nèi)核,make config,;,make menuconfig,;,make xconfig,;,44,make config,45,make menuconfig,46,make xconfig,47,Linux,常用配置選項,系統(tǒng)及其存儲器配置;,網(wǎng)絡支持;,顯示器支持;,觸摸屏支持。,48,系統(tǒng)及其存儲器配置,在,System Type,菜單中,中進行配置,選擇系統(tǒng)類型,處理器型號,選擇處理器其它特性(,USB,支持等),49,網(wǎng)絡支持,在,Networking options,以及,Network device support,中進行配置,選擇支持,TCP/

34、IP,協(xié)議,50,網(wǎng)絡支持,在,Network device support,配置中,添加選項,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,中進行配置。,在,Character devices,配置中,添加選項,Virtual terminal,配置,如下圖所

35、示。,Virtual terminal,支持,52,顯示器支持,在,Console drivers,中添加,Support Frame buffer devices,配置,采用,256,色,STN,顯示器,因此必須選擇,8bpp,支持,53,觸摸屏支持,在,Character devices,的,Support S3C2410 TouchScreen,子菜單中進行配置,選擇,s3c2410,觸摸屏支持,54,編譯,Linux,內(nèi)核,建立依賴關系;,make dep,編譯內(nèi)核;,make,編譯內(nèi)核,make zImage,編譯壓縮核心(,zImage,),編譯生成地,Linux,映像文件,zIm

36、age,通常保存在,arch/arm/boot/,目錄下。,創(chuàng)建內(nèi)核模塊;,編譯,Linux,內(nèi)核大體上需要三個步驟:即建立內(nèi)核依賴關系、創(chuàng)建內(nèi)核鏡像和創(chuàng)建內(nèi)核模塊。,55,下載、運行和調(diào)試內(nèi)核,通過調(diào)試器下載內(nèi)核并運行;,通過,BOOTLOADER,下載內(nèi)核到,SDRAM,中運行;,通過,BOOTLOADER,將內(nèi)核燒寫到,FLASH,中,然后運行,Linux,。,56,Linux,調(diào)試手段,在,Linux,開發(fā)中,由于可能沒有標準鍵盤和顯示器支持,因此,通常通過串口將顯示信息發(fā)送到主機,由主機端超級終端工具接收,以完成顯示功能。同時在超級終端中可以輸入數(shù)據(jù),然后由,Linux,接收,以完成

37、標準鍵盤功能。,調(diào)試過程中也可以通過串口將調(diào)試信息打印到超級終端,這是,Linux,最有效和最簡單的方法。,57,Linux,內(nèi)核移植主要過程,1,對于板級移植,內(nèi)核移植主要包括如下幾個部分:,內(nèi)核配置,包括板級包配置,如,S3C44B0X-MBA44,體系結構相關代碼修改,根據(jù)板級包的配置,修改相應的體系結構相關代碼,包括:,壓縮核心啟動代碼:,linux/arch/arm/boot/,內(nèi)核啟動代碼:,linux/arch/arm/kernel/,板級相關代碼:,linux/arch/arm/mach-s3c2410/,連接腳本,核心連接腳本:,linux/arch/arm/vmlinux.

38、lds,壓縮核心連接腳本:,linux/arch/arm/boot/compressed/linux.lds,58,Linux,內(nèi)核移植主要過程,2,加載文件系統(tǒng),ramdisk,編寫驅(qū)動程序,驅(qū)動程序目錄:,linux/drivers/,網(wǎng)卡驅(qū)動程序:,linux/drivers/net/ne.c,LCD,驅(qū)動程序:,linux/drivers/video/s3c2410fb.c,觸摸屏驅(qū)動程序:,linux/drivers/char/s3c2410-ts.c,59,Linux,啟動過程,1,解壓縮核心,核心打印,信息,內(nèi)核命令行,存儲器,60,Linux,啟動過程,2,IIC,總線初始化,

39、Frame Buffer,顯示初始化,61,Linux,啟動過程,3,Linux,控制臺,62,Linux,內(nèi)核移植的若干問題,源程序閱讀問題,1,Linux,內(nèi)核源代碼非常多,且結構復雜,,Linux,內(nèi)核有接近,10000,個文件,,4000000,行代碼。,因此,閱讀,Linux,時必須借助一些工具:,Source insight,、,Ultraedit,等,Linux,內(nèi)核使用,GNU C,,它在,ANSI C,基礎上進行了一些擴充,因此在許多編程習慣上與,ANSI C,不同。,大量使用,宏定義,,且許多宏定義非常復雜,這也在一定程度上增加了難度。,63,Linux,內(nèi)核移植的若干問題

40、,源程序閱讀問題,2,Linux,中并不是所有代碼都編譯進去,對于一個體系結構,只有很少部分的代碼參與編譯,因此,必須掌握,Linux,發(fā)布中各目錄的意義才能進一步清楚是否參與編譯。,還可以通過查看,.o,文件的方式查看當前參與編譯的是哪個文件,通常,xxx.c,文件生成的目標文件為,xxx.o,,只有生成了,.o,的文件才參與編譯,,注意:這適合于大部分情況,但是不是絕對的,。,Linux,中大量使用,條件編譯,,閱讀代碼時需要弄清楚,到底哪部分代碼參與編譯。,#ifdef xxx,#elif,#endif,64,Linux,內(nèi)核移植的若干問題,GNU C,結構體初始化,結構體聲明,ANSI

41、 C,結構體初始化,必須按順序,GNU C,結構體初始化,無需按順序,65,Linux,應用程序設計,編寫程序;,編寫,Makefile,文件;,編譯;,運行;,66,編寫應用程序,在編寫應用程序之前,應首先建立一個工作目錄,如,/tmp,;,選用文本編輯器,Vi,編寫源程序代碼,hello.c,如下:,#include ,int main(void),printf(“Hello the world! n”);,return 0;,若在宿主機中編譯并運行,hello,程序,則使用如下命令,gcc o hello hello.c,若編譯在目標機上運行的,hello,程序,則使用如下命令,arm-

42、linux-gcc o hello hello.c,67,編寫,Makefile,文件,指定編譯器,生成的執(zhí)行文件和鏈接過程中的目標文件,編譯和鏈接的參數(shù),編譯命令,拷貝,helloworld,映像文件到,/tftpboot/examples,中,清除,68,Linux,應用程序的運行,應用程序運行可以采用如下兩種方式:,在,Linux,內(nèi)核啟動起來,并且有辦法從主機獲取文件時,可以在,Linux,控制臺直接從主機獲取編譯后的應用程序。可以通過,ftp,等方式傳輸。,也可以在編譯應用程序后將該應用程序拷貝到,ramdisk,中,然后重新制作,ramdisk,,并更新,ramdisk,文件系統(tǒng),

43、此時新的程序?qū)⒃谖募到y(tǒng)中。,69,Linux,應用程序的運行,重新編譯內(nèi)核時,通常將應用程序添加到,Linux,文件系統(tǒng)的,bin,目錄,該目錄有全局路徑。且該文件,應該具有執(zhí)行屬性,,可以通過如下命令修改:,chmod 777 leddemo,在新內(nèi)核啟動后,直接在命令行輸入文件名即可運行。,當直接在,Linux,控制臺中從主機上獲取應用程序時,必須保存到可寫的位置,且通過如下命令執(zhí)行該程序:,./leddemo,70,配置,Linux,應用程序啟動后自動運行,如果需要在系統(tǒng)啟動以后自動運行,helloworld,程序,需要編輯,ramdisk,中的啟動腳本文件,該文件為,root/rd/

44、etc/init.d/rcS,使用,vi,編輯器編輯,在該文件最后添加如下腳本:,/bin/helloworld,該腳本將啟動后運行,helloworld,,直到程序退出。,或,/bin/ helloworld &,它將在,后臺運行,helloworld,,不影響其他的程序運行。,71,Linux,應用程序的調(diào)試,建立連接,應用程序的開發(fā)一般是先在宿主機上調(diào)試完成,然后再下載到目標板上運行。因此,為了保證正常下載程序,必須建立可靠的連接。具體連接方式主要有,串口連接,、,網(wǎng)絡連接,和,JTAG,連接,三種。,串口連接,在,Linux,下使用的串口通信程序為,minicom,,它類似于,Wind

45、ows,系統(tǒng)下的超級終端工具。,Minicom,的具體用法參見實驗手冊的,附錄,D,,由于實驗中用的是虛擬機的方式,因此直接使用超級終端工具。,網(wǎng)絡連接,網(wǎng)絡連接使用廣泛流傳的,FTP,協(xié)議來實現(xiàn),使用時需要進行,FTP,服務器的配置并設定好相應的,IP,地址。,JTAG,連接,72,Linux,應用程序的調(diào)試,編寫應用程序,前面已進行說明。,下載應用程序,與連接方式相關,下載應用程序主要有串口下載和網(wǎng)絡下載兩種方式,對于支持,USB,的目標板,還可以借助,U,盤復制生成的可執(zhí)行文件。,調(diào)試應用程序,主要使用,Linux,自帶的,gdb,調(diào)試程序來完成。通過,gdb,,可以在程序運行過程中實時

46、觀察程序的內(nèi)部結構和內(nèi)存使用情況。,需注意的是,要想使用,gdb,就必須在對源碼進行編譯的時候使用,“,-g”,編譯選項,開關來通知編譯器,這樣程序在編譯時就會包含調(diào)試信息并保存在目標文件中。,73,Vi,編輯器的使用,我們在使用計算機的時候,往往需要建立一些自己的文件,如文本文件、數(shù)據(jù)文件、源程序文件等,這些工作都離不開編輯器的支持。,Linux,系統(tǒng)中的編輯器有很多,例如行編輯器,Ed,、,Ex,,全屏幕編輯器,Vi,、,Emacs,等。,Vi,是,Linux,系統(tǒng)的第一個全屏幕交互式編輯程序,也是現(xiàn)在人們使用最廣泛的一種編輯工具。,74,Vi,編輯器的使用,Vi,是“,Visual in

47、terface”,的簡稱,它有三種基本的工作模式:,命令行模式,,在,shell,環(huán)境下(提示符為,$,)輸入啟動命令“,Vi”,進入編輯器時就處于命令行模式。在該模式下,用戶可輸入各種合法的,Vi,命令來進行操作,,需注意的是所輸入的命令并不在屏幕上顯示出來。,文本輸入模式,,在命令模式下輸入插入命令,i,、附加命令,a,、打開命令,o,、修改命令,c,、取代命令,r,或替換命令,s,都可以進入文本輸入模式。按,Esc,鍵則回到命令模式。,末行模式,,在命令模式下,用戶按“:”鍵即可進入末行模式,此時,Vi,在顯示窗口的最后一行顯示“:”作為提示符。末行命令執(zhí)行完后,,Vi,會自動回到命令模式。,75,Vi,編輯器的使用,Vi,編輯器的進入,用戶在進入,Linux,系統(tǒng)后,在提示符后鍵入,Vi,和想要編輯的文件名,便可進入到,Vi,中。例如:,$ vi example.c,進入,Vi,后,首先進入的就是命令模式,這時輸入的所有字符都將作為命令來解釋。,Vi,編輯器的退出,在命令模式中,連續(xù)按兩次大寫字母,Z,,則,Vi,退出,返回到,shell,狀態(tài)。,在末行模式下,輸入命令“,:w”,則,Vi,保存當前編輯的文件,然后輸入“,:q”,,則系統(tǒng)退出,Vi,返回到,shell,狀態(tài)。,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔

相關搜索

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

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

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


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