天津科技大學嵌入式系統(tǒng)ppt---第7章 嵌入式Linux軟件設計資料_第1頁
天津科技大學嵌入式系統(tǒng)ppt---第7章 嵌入式Linux軟件設計資料_第2頁
天津科技大學嵌入式系統(tǒng)ppt---第7章 嵌入式Linux軟件設計資料_第3頁
天津科技大學嵌入式系統(tǒng)ppt---第7章 嵌入式Linux軟件設計資料_第4頁
天津科技大學嵌入式系統(tǒng)ppt---第7章 嵌入式Linux軟件設計資料_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第 7 章 嵌入式Linux軟件設計 共二十二頁主要(zhyo)內(nèi)容1324Bootloader引導(yndo)程序 Linux的移植 驅(qū)動程序開發(fā) 應用程序開發(fā) 共二十二頁 7.1.1 Bootloader的啟動(qdng)過程 在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運行之前運行??梢猿跏蓟布O備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內(nèi)嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務就完全由BootLoader來完成。嵌入式系統(tǒng)

2、中,系統(tǒng)在上電或復位時通常都從地址0 x00000000處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。bootloader的操作模式:1,自啟動模式:bootloader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行。2,交互模式:目標機上的bootloader將通過串口或網(wǎng)絡等通行手段從開發(fā)(kif)主機(Host)上下載內(nèi)核映像等到RAM中。可以被bootloader寫到目標機上的固態(tài)存儲媒質(zhì)中,或者直接進入系統(tǒng)的引導。也可以通過串口接收用戶的命令。共二十二頁 7.1.1 Bootloader的啟動(qdng)過程 BootLoader的實現(xiàn)(shxi

3、n)依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩大部分。 BootLoader的stage1通常包括以下步驟:硬件設備初始化。為加載BootLoader的stage2準備RAM空間。復制BootLoader的stage2到RAM空間中。設置好堆棧。跳轉(zhuǎn)到stage2的入口點。 BootLoader的stage2通常包括以下步驟:初始化本階段要使用的硬件設備。檢測系統(tǒng)內(nèi)存映射。將kernel映像和根文件系統(tǒng)映像從Flash讀到RAM中。為內(nèi)核設置啟動參數(shù)。調(diào)用內(nèi)核。共二十二頁 7.1.2 BootLoadervivi vivi是由韓國MIZI公司(n

4、s)提供的一款針對S3C2410芯片的BootLoader。 vivi的啟動過程分為兩個階段:階段1和階段2。階段1的主要工作是:硬件初始化;配置串口;復制自身到SDRAM中(跳轉(zhuǎn)到C代碼的入口函數(shù))。 階段2的主要工作是:對硬件系統(tǒng)繼續(xù)初始化;內(nèi)存映射初始化,內(nèi)存管理(gunl)單元MMU初始化;初始化堆;初始化MTD設備,MTD設備指具有閃存功能的設備,如閃存芯片、閃存卡等;初始化私有數(shù)據(jù);初始化內(nèi)置命令;啟動vivi。共二十二頁 7.1.3 BootLoaderU-Boot U-Boot,全稱 Universal Boot Loader,是開源(ki yun)項目。其源碼目錄、編譯形式與

5、Linux內(nèi)核很相似,事實上,不少U-Boot源碼就是相應的Linux內(nèi)核源程序的簡化,尤其是一些設備的驅(qū)動程序。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的支持最

6、完善。共二十二頁主要(zhyo)內(nèi)容1324Bootloader引導(yndo)程序 Linux的移植 驅(qū)動程序開發(fā) 應用程序開發(fā) 共二十二頁 7.2 Linux的移植(yzh) 所謂Linux移植,就是針對具體的目標平臺對Linux做必要的改寫后,安裝到該目標平臺并使其正確運行的過程?;?jbn)內(nèi)容包括:獲取某一版本的Linux內(nèi)核源碼。根據(jù)具體的目標平臺,對源碼進行必要的改寫(主要是修改有關(guān)體系結(jié)構(gòu)的部分),然后添加一些驅(qū)動,打造一款適合目標平臺的新的操作系統(tǒng)。對該系統(tǒng)進行針對目標平臺的交叉編譯,生成一個內(nèi)核映像文件。將該映像文件燒寫、安裝到目標平臺中。 共二十二頁 7.2.1 Lin

7、ux內(nèi)核的目錄(ml)結(jié)構(gòu) 1/arch:其中的子目錄包含了所有與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核移植代碼。每一個目錄都代表一種硬件平臺,對于每種平臺都應該包括: boot:包含啟動內(nèi)核所使用的部分或全部平臺的相關(guān)代碼。 kernel:包含支持體系結(jié)構(gòu)特有的特征代碼。 lib:包含存放(cnfng)體系結(jié)構(gòu)特有的通用函數(shù)的實現(xiàn)代碼。 mm: 包含存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實現(xiàn)。 mach-xxx:包含存放該處理器的移植代碼。2/Documentation:其中的子目錄包含有關(guān)內(nèi)核的許多非常詳細的文檔。3/drivers:其中的子目錄包含內(nèi)核中所有的設備驅(qū)動程序。4/fs:其中的子目錄包含了所有文件

8、系統(tǒng)的代碼。5/include:其中的子目錄包含了建立內(nèi)核代碼時所需的大部分庫文件的頭文件,該模塊利用其他模塊重建內(nèi)核。同時,包括不同平臺需要的庫文件。6/init:其中的子目錄包含了內(nèi)核的初始化代碼,內(nèi)核從此目錄下開始工作。7/ipc:其中的子目錄包含了內(nèi)核的進程間通訊的代碼。8/kernel:其中的子目錄包含了主內(nèi)核的代碼,如進程調(diào)度等。9/lib:其中的子目錄包含了通用的庫函數(shù)代碼等。10/mm:其中的子目錄包含了內(nèi)核的內(nèi)存管理代碼。11/net:其中的子目錄包含了內(nèi)核的網(wǎng)絡相關(guān)代碼。12/scripts:其中的子目錄包含了配置內(nèi)核的一些腳本文件。共二十二頁 7.2.2 Linux內(nèi)核(

9、ni h)源碼 通常對內(nèi)核源碼的改寫難度較大,因為這不僅要求對內(nèi)核結(jié)構(gòu)非常熟悉,而且也要對目標平臺的硬件結(jié)構(gòu)相當了解。所以這部分工作主要由目標平臺廠商提供,如對于ARM平臺,對Linux內(nèi)核源碼的改寫就是(jish)由英國ARM公司完成的。對于讀者來說,只需從其網(wǎng)站上下載相關(guān)版本的Linux內(nèi)核補丁,再安裝補丁即可。 共二十二頁 7.2.3 交叉編譯(biny)環(huán)境的建立 交叉編譯指利用運行在機器上的編譯器編譯某個源程序,生成在另一臺機器上運行的目標代碼的過程。對于Linux系統(tǒng)和ARM平臺來講,GCC交叉編譯器能高效(o xio)的完成移植,下面介紹生成GCC交叉編譯器的一般過程。(1)下載

10、源代碼 (2)編譯binutils (3)配置Linux內(nèi)核頭文件 (4)第一次編譯gcc (5)交叉編譯glibc(6)第二次編譯gcc 共二十二頁 7.2.4 修改Linux內(nèi)核(ni h)文件 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文件,該文件主要用來初始化處理器。

11、7在arch/arm/def-configs目錄下添加配置(pizh)好的S3C2410的配置文件。8修改arch/arm/kernel目錄下Makefile文件9修改arch/arm/kernel目錄下的debug-armv.s文件 10修改arch/arm/kernel目錄下的entry-armv.s文件 11修改arch/arm/mm目錄下的相關(guān)文件 12修改arch/arm/mach-s3c2410目錄下的相關(guān)文件 共二十二頁 7.2.5 Linux內(nèi)核(ni h)及文件系統(tǒng)的編譯 1編譯Linux內(nèi)核 make depmake cleanmake zImage 2制作cramfs文件

12、系統(tǒng) 利用工具軟件MKCRAMFS制作cramfs文件系統(tǒng)。 假設root_tech目錄包含(bohn)將來要用到的所有文件,把制作工具和root_tech放在同一個目錄下,并在該目錄下使用命令: MKCRAMFS root_tech rootfs.cramfs 共二十二頁 7.2.6 Linux內(nèi)核(ni h)及文件系統(tǒng)的下載 1利用vivi通過超級終端重新(chngxn)下載vivi2利用vivi燒寫內(nèi)核和root文件系統(tǒng) 3利用U-Boot燒寫內(nèi)核和root文件系統(tǒng) 共二十二頁主要(zhyo)內(nèi)容1324Bootloader引導(yndo)程序 Linux的移植 驅(qū)動程序開發(fā) 應用程序開

13、發(fā) 共二十二頁 設備(shbi)驅(qū)動程序的工作原理 設備驅(qū)動程序是操作系統(tǒng)(co zu x tn)內(nèi)核和機器硬件之間的接口。設備驅(qū)動程序為應用程序屏蔽了硬件的細節(jié), 應用程序可以像操作普通文件一樣對硬件設備進行操作。 設備驅(qū)動程序作為內(nèi)核的一部分,完成以下功能:對設備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù);檢測和處理設備出現(xiàn)的錯誤。 Linux下的設備驅(qū)動程序是內(nèi)核的一部分,運行在內(nèi)核模式。在Linux系統(tǒng)中,使用file_operation結(jié)構(gòu)將設備驅(qū)動程序和文件系統(tǒng)相關(guān)聯(lián),在這個結(jié)構(gòu)里存放了設備各種操作的入口函數(shù)。 共

14、二十二頁 Linux下設備驅(qū)動程序在輸入(shr)/輸出系統(tǒng)中的地位用戶程序的進程(設備)文件系統(tǒng)設備驅(qū)動程序設備服務子程序中斷處理程序物理設備控制器輸入/輸出請求輸入/輸出響應物理設備共二十二頁 驅(qū)動程序的開發(fā)和使用(shyng)步驟 1用戶在自己的驅(qū)動程序源文件中定義file_operations結(jié)構(gòu),并編寫出設備需要的各個操作函數(shù),對于設備不需要的操作函數(shù)用NULL初始化; 2定義一個初始化函數(shù),該函數(shù)應包含以下幾項工作:(1)對使用到的硬件寄存器進行初始化,包括中斷寄存器。(2)初始化與設備相關(guān)的參數(shù)(cnsh)。(3)注冊設備。 int register_chrdev(unsigne

15、d int,const char*,struct file_operations*)其中三個參數(shù)分別代表主設備號、設備名和file_operations結(jié)構(gòu)變量的地址。(4)注冊設備使用的中斷。注冊中斷使用的函數(shù)。(5)其他的一些初始化工作,比如給設備分配I/O,申請DMA通道等。 3將設備驅(qū)動加到Linux內(nèi)核中 4將設備驅(qū)動編譯成驅(qū)動模塊 共二十二頁主要(zhyo)內(nèi)容1324Bootloader引導(yndo)程序 Linux的移植 驅(qū)動程序開發(fā) 應用程序開發(fā) 共二十二頁 應用程序的開發(fā)(kif)步驟 開發(fā)Linux應用程序一般分為以下幾個步驟(bzhu):編寫程序編寫Makefile文

16、件編譯程序運行程序?qū)⑸傻目蓤?zhí)行文件加入文件系統(tǒng)。 如果應用程序的運行需要某些驅(qū)動程序,先將驅(qū)動程序掛接到文件系統(tǒng)中。 共二十二頁 舉例:hello應用程序的開發(fā)(kif)和運行 1. 編寫Hello程序編寫hello.c文件,保存在hello目錄下。代碼如下(rxi)所示:#include #include int main(int argc, char *argv) printf(Hello Reader,Congradulations!n); return(0); 2. 編寫Makefile文件,內(nèi)容如下:CC = /opt/host/armv4l/bin/armv4l-unknown-

17、linux-gccCFLAGS = -I/linux2410/kernel/include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -mapcs -fno-strict-aliasing -fno-common -fno-common -pipe -mapcs-32 hello: hello.c$(CC) $(CFLAGS) -o hello hello.cclean:-rm -f *.o3. 編譯 進入hello目錄,使用命令make進行編譯。4. 運行 ./hello 共二十二頁內(nèi)容摘要第 7 章 嵌入式Linux軟件設計。將kernel映像和根

溫馨提示

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

評論

0/150

提交評論