




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章
嵌入式Linux軟件設計主要內容1324Bootloader引導程序Linux的移植驅動程序開發(fā)應用程序開發(fā)
7.1.1Bootloader的啟動過程
在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內核運行之前運行??梢猿跏蓟布O備、建立內存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務就完全由BootLoader來完成。嵌入式系統(tǒng)中,系統(tǒng)在上電或復位時通常都從地址0x00000000處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。bootloader的操作模式:1,自啟動模式:bootloader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行。2,交互模式:目標機上的bootloader將通過串口或網絡等通行手段從開發(fā)主機(Host)上下載內核映像等到RAM中??梢员籦ootloader寫到目標機上的固態(tài)存儲媒質中,或者直接進入系統(tǒng)的引導。也可以通過串口接收用戶的命令。
7.1.1Bootloader的啟動過程BootLoader的實現依賴于CPU的體系結構,因此大多數BootLoader都分為stage1和stage2兩大部分。BootLoader的stage1通常包括以下步驟:硬件設備初始化。為加載BootLoader的stage2準備RAM空間。復制BootLoader的stage2到RAM空間中。設置好堆棧。跳轉到stage2的入口點。
BootLoader的stage2通常包括以下步驟:初始化本階段要使用的硬件設備。檢測系統(tǒng)內存映射。將kernel映像和根文件系統(tǒng)映像從Flash讀到RAM中。為內核設置啟動參數。調用內核。
7.1.2BootLoader——vivivivi是由韓國MIZI公司提供的一款針對S3C2410芯片的BootLoader。vivi的啟動過程分為兩個階段:階段1和階段2。階段1的主要工作是:硬件初始化;配置串口;復制自身到SDRAM中(跳轉到C代碼的入口函數)。階段2的主要工作是:對硬件系統(tǒng)繼續(xù)初始化;內存映射初始化,內存管理單元MMU初始化;初始化堆;初始化MTD設備,MTD設備指具有閃存功能的設備,如閃存芯片、閃存卡等;初始化私有數據;初始化內置命令;啟動vivi。
7.1.3BootLoader——U-Boot
U-Boot,全稱UniversalBootLoader,是開源項目。其源碼目錄、編譯形式與Linux內核很相似,事實上,不少U-Boot源碼就是相應的Linux內核源程序的簡化,尤其是一些設備的驅動程序。U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導,它還支持VxWorks,QNX,Solaris等嵌入式操作系統(tǒng)。這是U-Boot中Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發(fā)目標,即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前來看,U-Boot對PowerPC系列處理器支持最為豐富,對Linux的支持最完善。主要內容1324Bootloader引導程序Linux的移植驅動程序開發(fā)應用程序開發(fā)
7.2Linux的移植所謂Linux移植,就是針對具體的目標平臺對Linux做必要的改寫后,安裝到該目標平臺并使其正確運行的過程?;緝热莅ǎ韩@取某一版本的Linux內核源碼。根據具體的目標平臺,對源碼進行必要的改寫(主要是修改有關體系結構的部分),然后添加一些驅動,打造一款適合目標平臺的新的操作系統(tǒng)。對該系統(tǒng)進行針對目標平臺的交叉編譯,生成一個內核映像文件。將該映像文件燒寫、安裝到目標平臺中。
7.2.1Linux內核的目錄結構1./arch:其中的子目錄包含了所有與硬件體系結構相關的內核移植代碼。每一個目錄都代表一種硬件平臺,對于每種平臺都應該包括:boot:包含啟動內核所使用的部分或全部平臺的相關代碼。kernel:包含支持體系結構特有的特征代碼。lib:包含存放體系結構特有的通用函數的實現代碼。mm:包含存放體系結構特有的內存管理程序的實現。mach-xxx:包含存放該處理器的移植代碼。2./Documentation:其中的子目錄包含有關內核的許多非常詳細的文檔。3./drivers:其中的子目錄包含內核中所有的設備驅動程序。4./fs:其中的子目錄包含了所有文件系統(tǒng)的代碼。5./include:其中的子目錄包含了建立內核代碼時所需的大部分庫文件的頭文件,該模塊利用其他模塊重建內核。同時,包括不同平臺需要的庫文件。6./init:其中的子目錄包含了內核的初始化代碼,內核從此目錄下開始工作。7./ipc:其中的子目錄包含了內核的進程間通訊的代碼。8./kernel:其中的子目錄包含了主內核的代碼,如進程調度等。9./lib:其中的子目錄包含了通用的庫函數代碼等。10./mm:其中的子目錄包含了內核的內存管理代碼。11./net:其中的子目錄包含了內核的網絡相關代碼。12./scripts:其中的子目錄包含了配置內核的一些腳本文件。
7.2.2Linux內核源碼通常對內核源碼的改寫難度較大,因為這不僅要求對內核結構非常熟悉,而且也要對目標平臺的硬件結構相當了解。所以這部分工作主要由目標平臺廠商提供,如對于ARM平臺,對Linux內核源碼的改寫就是由英國ARM公司完成的。對于讀者來說,只需從其網站上下載相關版本的Linux內核補丁,再安裝補丁即可。
7.2.3交叉編譯環(huán)境的建立交叉編譯指利用運行在機器上的編譯器編譯某個源程序,生成在另一臺機器上運行的目標代碼的過程。對于Linux系統(tǒng)和ARM平臺來講,GCC交叉編譯器能高效的完成移植,下面介紹生成GCC交叉編譯器的一般過程。(1)下載源代碼(2)編譯binutils(3)配置Linux內核頭文件(4)第一次編譯gcc(5)交叉編譯glibc(6)第二次編譯gcc
7.2.4修改Linux內核文件1.設置目標平臺和指定交叉編譯器2.修改arch/arm目錄下Makefile文件3.修改arch/arm目錄下config.in文件4.修改arch/arm/boot目錄下Makefile文件5.修改arch/arm/boot/compressed目錄下Makefile文件6.在arch/arm/boot/compressed目錄下添加head-s3c2410.s文件,該文件主要用來初始化處理器。7.在arch/arm/def-configs目錄下添加配置好的S3C2410的配置文件。8.修改arch/arm/kernel目錄下Makefile文件9.修改arch/arm/kernel目錄下的debug-armv.s文件10.修改arch/arm/kernel目錄下的entry-armv.s文件11.修改arch/arm/mm目錄下的相關文件12.修改arch/arm/mach-s3c2410目錄下的相關文件
7.2.5Linux內核及文件系統(tǒng)的編譯1.編譯Linux內核makedepmakecleanmakezImage2.制作cramfs文件系統(tǒng)利用工具軟件MKCRAMFS制作cramfs文件系統(tǒng)。假設root_tech目錄包含將來要用到的所有文件,把制作工具和root_tech放在同一個目錄下,并在該目錄下使用命令:MKCRAMFSroot_techrootfs.cramfs
7.2.6Linux內核及文件系統(tǒng)的下載1.利用vivi通過超級終端重新下載vivi2.利用vivi燒寫內核和root文件系統(tǒng)3.利用U-Boot燒寫內核和root文件系統(tǒng)主要內容1324Bootloader引導程序Linux的移植驅動程序開發(fā)應用程序開發(fā)設備驅動程序的工作原理設備驅動程序是操作系統(tǒng)內核和機器硬件之間的接口。設備驅動程序為應用程序屏蔽了硬件的細節(jié),應用程序可以像操作普通文件一樣對硬件設備進行操作。設備驅動程序作為內核的一部分,完成以下功能:對設備初始化和釋放;把數據從內核傳送到硬件和從硬件讀取數據;讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據;檢測和處理設備出現的錯誤。Linux下的設備驅動程序是內核的一部分,運行在內核模式。在Linux系統(tǒng)中,使用file_operation結構將設備驅動程序和文件系統(tǒng)相關聯,在這個結構里存放了設備各種操作的入口函數。
Linux下設備驅動程序在輸入/輸出系統(tǒng)中的地位用戶程序的進程(設備)文件系統(tǒng)設備驅動程序設備服務子程序中斷處理程序物理設備控制器輸入/輸出請求輸入/輸出響應物理設備驅動程序的開發(fā)和使用步驟1.用戶在自己的驅動程序源文件中定義file_operations結構,并編寫出設備需要的各個操作函數,對于設備不需要的操作函數用NULL初始化;2.定義一個初始化函數,該函數應包含以下幾項工作:(1)對使用到的硬件寄存器進行初始化,包括中斷寄存器。(2)初始化與設備相關的參數。(3)注冊設備。
intregister_chrdev(unsignedint,constchar*,structfile_operations*)其中三個參數分別代表主設備號、設備名和file_operations結構變量的地址。(4)注冊設備使用的中斷。注冊中斷使用的函數。(5)其他的一些初始化工作,比如給設備分配I/O,申請DMA通道等。3.將設備驅動加到Linux內核中4.將設備驅動編譯成驅動模塊主要內容1324Bootloader引導程序
Linux的移植驅動程序開發(fā)應用程序開發(fā)
應用程序的開發(fā)步驟開發(fā)Linux應用程序一般分為以下幾個步驟:編寫程序編寫Makefile文件編譯程序運行程序將生成的可執(zhí)行文件加入文件系統(tǒng)。如果應用程序的運行需要某些驅動程序,先將驅動程序掛接到文件系統(tǒng)中。舉例:hello應用程序的開發(fā)和運行1.編寫Hello程序編寫hello.c文件,保存在hello目錄下。代碼如下所示:#include<stdio.h>#include<stdlib.h>intmain(intargc,char**argv){printf("HelloReader,Congradulations!!!\n");return(0);}2.編寫Makefile文件,內容如下:CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gccCFLAGS=-I/l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農產品電商的競爭力提升試題及答案
- 農業(yè)電商品牌市場推廣試題及答案
- 2025年土木工程師考試能力提升點試題及答案
- 傳統(tǒng)與創(chuàng)新在音樂創(chuàng)作中的結合研究試題及答案
- 土木工程師考試學習動力維持試題及答案
- 2025年英語角度的試題及答案
- 固體物理基本概念試題及答案
- 中國窄帶鋼行業(yè)市場發(fā)展現狀及前景趨勢與投資分析研究報告2025-2028版
- 2025年土木工程師考試全方位試題及答案
- 2025年大學化學考試化學生物技術試題及答案
- 動脈瘤醫(yī)學知識專題講座
- 西南交通大學-畢業(yè)答辯PPT模板
- 遼寧省中小學鄉(xiāng)村導師團隊推薦表
- 外傷性房角后退
- 醫(yī)院醫(yī)保內部控制制度
- 質量管理體系認證證書Word文檔模板
- 中考總復習《機械效率》課件
- 【物理】2022年高考真題-天津卷
- 建筑物理聲復習歸納總結
- 有限空間作業(yè)風險告知卡(常用可編輯)
- 尾礦庫培訓教材
評論
0/150
提交評論