版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 7 章 嵌入式Linux軟件設(shè)計(jì) 共二十二頁(yè)主要(zhyo)內(nèi)容1324Bootloader引導(dǎo)(yndo)程序 Linux的移植 驅(qū)動(dòng)程序開發(fā) 應(yīng)用程序開發(fā) 共二十二頁(yè) 7.1.1 Bootloader的啟動(dòng)(qdng)過(guò)程 在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行??梢猿跏蓟布O(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。嵌入式系統(tǒng)
2、中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0 x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。bootloader的操作模式:1,自啟動(dòng)模式:bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行。2,交互模式:目標(biāo)機(jī)上的bootloader將通過(guò)串口或網(wǎng)絡(luò)等通行手段從開發(fā)(kif)主機(jī)(Host)上下載內(nèi)核映像等到RAM中。可以被bootloader寫到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)媒質(zhì)中,或者直接進(jìn)入系統(tǒng)的引導(dǎo)。也可以通過(guò)串口接收用戶的命令。共二十二頁(yè) 7.1.1 Bootloader的啟動(dòng)(qdng)過(guò)程 BootLoader的實(shí)現(xiàn)(shxi
3、n)依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩大部分。 BootLoader的stage1通常包括以下步驟:硬件設(shè)備初始化。為加載BootLoader的stage2準(zhǔn)備RAM空間。復(fù)制BootLoader的stage2到RAM空間中。設(shè)置好堆棧。跳轉(zhuǎn)到stage2的入口點(diǎn)。 BootLoader的stage2通常包括以下步驟:初始化本階段要使用的硬件設(shè)備。檢測(cè)系統(tǒng)內(nèi)存映射。將kernel映像和根文件系統(tǒng)映像從Flash讀到RAM中。為內(nèi)核設(shè)置啟動(dòng)參數(shù)。調(diào)用內(nèi)核。共二十二頁(yè) 7.1.2 BootLoadervivi vivi是由韓國(guó)MIZI公司(n
4、s)提供的一款針對(duì)S3C2410芯片的BootLoader。 vivi的啟動(dòng)過(guò)程分為兩個(gè)階段:階段1和階段2。階段1的主要工作是:硬件初始化;配置串口;復(fù)制自身到SDRAM中(跳轉(zhuǎn)到C代碼的入口函數(shù))。 階段2的主要工作是:對(duì)硬件系統(tǒng)繼續(xù)初始化;內(nèi)存映射初始化,內(nèi)存管理(gunl)單元MMU初始化;初始化堆;初始化MTD設(shè)備,MTD設(shè)備指具有閃存功能的設(shè)備,如閃存芯片、閃存卡等;初始化私有數(shù)據(jù);初始化內(nèi)置命令;啟動(dòng)vivi。共二十二頁(yè) 7.1.3 BootLoaderU-Boot U-Boot,全稱 Universal Boot Loader,是開源(ki yun)項(xiàng)目。其源碼目錄、編譯形式與
5、Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是相應(yīng)的Linux內(nèi)核源程序的簡(jiǎn)化,尤其是一些設(shè)備的驅(qū)動(dòng)程序。U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),它還支持VxWorks, QNX, Solaris等嵌入式操作系統(tǒng)。這是U-Boot中Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、 x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個(gè)特點(diǎn)正是U-Boot項(xiàng)目的開發(fā)目標(biāo),即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前來(lái)看,U-Boot對(duì)PowerPC系列處理器支持最為豐富,對(duì)Linux的支持最
6、完善。共二十二頁(yè)主要(zhyo)內(nèi)容1324Bootloader引導(dǎo)(yndo)程序 Linux的移植 驅(qū)動(dòng)程序開發(fā) 應(yīng)用程序開發(fā) 共二十二頁(yè) 7.2 Linux的移植(yzh) 所謂Linux移植,就是針對(duì)具體的目標(biāo)平臺(tái)對(duì)Linux做必要的改寫后,安裝到該目標(biāo)平臺(tái)并使其正確運(yùn)行的過(guò)程?;?jbn)內(nèi)容包括:獲取某一版本的Linux內(nèi)核源碼。根據(jù)具體的目標(biāo)平臺(tái),對(duì)源碼進(jìn)行必要的改寫(主要是修改有關(guān)體系結(jié)構(gòu)的部分),然后添加一些驅(qū)動(dòng),打造一款適合目標(biāo)平臺(tái)的新的操作系統(tǒng)。對(duì)該系統(tǒng)進(jìn)行針對(duì)目標(biāo)平臺(tái)的交叉編譯,生成一個(gè)內(nèi)核映像文件。將該映像文件燒寫、安裝到目標(biāo)平臺(tái)中。 共二十二頁(yè) 7.2.1 Lin
7、ux內(nèi)核的目錄(ml)結(jié)構(gòu) 1/arch:其中的子目錄包含了所有與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核移植代碼。每一個(gè)目錄都代表一種硬件平臺(tái),對(duì)于每種平臺(tái)都應(yīng)該包括: boot:包含啟動(dòng)內(nèi)核所使用的部分或全部平臺(tái)的相關(guān)代碼。 kernel:包含支持體系結(jié)構(gòu)特有的特征代碼。 lib:包含存放(cnfng)體系結(jié)構(gòu)特有的通用函數(shù)的實(shí)現(xiàn)代碼。 mm: 包含存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)。 mach-xxx:包含存放該處理器的移植代碼。2/Documentation:其中的子目錄包含有關(guān)內(nèi)核的許多非常詳細(xì)的文檔。3/drivers:其中的子目錄包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。4/fs:其中的子目錄包含了所有文件
8、系統(tǒng)的代碼。5/include:其中的子目錄包含了建立內(nèi)核代碼時(shí)所需的大部分庫(kù)文件的頭文件,該模塊利用其他模塊重建內(nèi)核。同時(shí),包括不同平臺(tái)需要的庫(kù)文件。6/init:其中的子目錄包含了內(nèi)核的初始化代碼,內(nèi)核從此目錄下開始工作。7/ipc:其中的子目錄包含了內(nèi)核的進(jìn)程間通訊的代碼。8/kernel:其中的子目錄包含了主內(nèi)核的代碼,如進(jìn)程調(diào)度等。9/lib:其中的子目錄包含了通用的庫(kù)函數(shù)代碼等。10/mm:其中的子目錄包含了內(nèi)核的內(nèi)存管理代碼。11/net:其中的子目錄包含了內(nèi)核的網(wǎng)絡(luò)相關(guān)代碼。12/scripts:其中的子目錄包含了配置內(nèi)核的一些腳本文件。共二十二頁(yè) 7.2.2 Linux內(nèi)核(
9、ni h)源碼 通常對(duì)內(nèi)核源碼的改寫難度較大,因?yàn)檫@不僅要求對(duì)內(nèi)核結(jié)構(gòu)非常熟悉,而且也要對(duì)目標(biāo)平臺(tái)的硬件結(jié)構(gòu)相當(dāng)了解。所以這部分工作主要由目標(biāo)平臺(tái)廠商提供,如對(duì)于ARM平臺(tái),對(duì)Linux內(nèi)核源碼的改寫就是(jish)由英國(guó)ARM公司完成的。對(duì)于讀者來(lái)說(shuō),只需從其網(wǎng)站上下載相關(guān)版本的Linux內(nèi)核補(bǔ)丁,再安裝補(bǔ)丁即可。 共二十二頁(yè) 7.2.3 交叉編譯(biny)環(huán)境的建立 交叉編譯指利用運(yùn)行在機(jī)器上的編譯器編譯某個(gè)源程序,生成在另一臺(tái)機(jī)器上運(yùn)行的目標(biāo)代碼的過(guò)程。對(duì)于Linux系統(tǒng)和ARM平臺(tái)來(lái)講,GCC交叉編譯器能高效(o xio)的完成移植,下面介紹生成GCC交叉編譯器的一般過(guò)程。(1)下載
10、源代碼 (2)編譯binutils (3)配置Linux內(nèi)核頭文件 (4)第一次編譯gcc (5)交叉編譯glibc(6)第二次編譯gcc 共二十二頁(yè) 7.2.4 修改Linux內(nèi)核(ni h)文件 1設(shè)置目標(biāo)平臺(tái)和指定交叉編譯器 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文件,該文件主要用來(lái)初始化處理器。
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)文件 共二十二頁(yè) 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)。 假設(shè)root_tech目錄包含(bohn)將來(lái)要用到的所有文件,把制作工具和root_tech放在同一個(gè)目錄下,并在該目錄下使用命令: MKCRAMFS root_tech rootfs.cramfs 共二十二頁(yè) 7.2.6 Linux內(nèi)核(ni h)及文件系統(tǒng)的下載 1利用vivi通過(guò)超級(jí)終端重新(chngxn)下載vivi2利用vivi燒寫內(nèi)核和root文件系統(tǒng) 3利用U-Boot燒寫內(nèi)核和root文件系統(tǒng) 共二十二頁(yè)主要(zhyo)內(nèi)容1324Bootloader引導(dǎo)(yndo)程序 Linux的移植 驅(qū)動(dòng)程序開發(fā) 應(yīng)用程序開
13、發(fā) 共二十二頁(yè) 設(shè)備(shbi)驅(qū)動(dòng)程序的工作原理 設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)(co zu x tn)內(nèi)核和機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié), 應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。 設(shè)備驅(qū)動(dòng)程序作為內(nèi)核的一部分,完成以下功能:對(duì)設(shè)備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。 Linux下的設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,運(yùn)行在內(nèi)核模式。在Linux系統(tǒng)中,使用file_operation結(jié)構(gòu)將設(shè)備驅(qū)動(dòng)程序和文件系統(tǒng)相關(guān)聯(lián),在這個(gè)結(jié)構(gòu)里存放了設(shè)備各種操作的入口函數(shù)。 共
14、二十二頁(yè) Linux下設(shè)備驅(qū)動(dòng)程序在輸入(shr)/輸出系統(tǒng)中的地位用戶程序的進(jìn)程(設(shè)備)文件系統(tǒng)設(shè)備驅(qū)動(dòng)程序設(shè)備服務(wù)子程序中斷處理程序物理設(shè)備控制器輸入/輸出請(qǐng)求輸入/輸出響應(yīng)物理設(shè)備共二十二頁(yè) 驅(qū)動(dòng)程序的開發(fā)和使用(shyng)步驟 1用戶在自己的驅(qū)動(dòng)程序源文件中定義file_operations結(jié)構(gòu),并編寫出設(shè)備需要的各個(gè)操作函數(shù),對(duì)于設(shè)備不需要的操作函數(shù)用NULL初始化; 2定義一個(gè)初始化函數(shù),該函數(shù)應(yīng)包含以下幾項(xiàng)工作:(1)對(duì)使用到的硬件寄存器進(jìn)行初始化,包括中斷寄存器。(2)初始化與設(shè)備相關(guān)的參數(shù)(cnsh)。(3)注冊(cè)設(shè)備。 int register_chrdev(unsigne
15、d int,const char*,struct file_operations*)其中三個(gè)參數(shù)分別代表主設(shè)備號(hào)、設(shè)備名和file_operations結(jié)構(gòu)變量的地址。(4)注冊(cè)設(shè)備使用的中斷。注冊(cè)中斷使用的函數(shù)。(5)其他的一些初始化工作,比如給設(shè)備分配I/O,申請(qǐng)DMA通道等。 3將設(shè)備驅(qū)動(dòng)加到Linux內(nèi)核中 4將設(shè)備驅(qū)動(dòng)編譯成驅(qū)動(dòng)模塊 共二十二頁(yè)主要(zhyo)內(nèi)容1324Bootloader引導(dǎo)(yndo)程序 Linux的移植 驅(qū)動(dòng)程序開發(fā) 應(yīng)用程序開發(fā) 共二十二頁(yè) 應(yīng)用程序的開發(fā)(kif)步驟 開發(fā)Linux應(yīng)用程序一般分為以下幾個(gè)步驟(bzhu):編寫程序編寫Makefile文
16、件編譯程序運(yùn)行程序?qū)⑸傻目蓤?zhí)行文件加入文件系統(tǒng)。 如果應(yīng)用程序的運(yùn)行需要某些驅(qū)動(dòng)程序,先將驅(qū)動(dòng)程序掛接到文件系統(tǒng)中。 共二十二頁(yè) 舉例:hello應(yīng)用程序的開發(fā)(kif)和運(yùn)行 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. 編譯 進(jìn)入hello目錄,使用命令make進(jìn)行編譯。4. 運(yùn)行 ./hello 共二十二頁(yè)內(nèi)容摘要第 7 章 嵌入式Linux軟件設(shè)計(jì)。將kernel映像和根
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人兼職用工合同模板
- 鄉(xiāng)村別墅租賃合同樣本
- 二手房買賣雙方合同模板
- 事業(yè)單位合同到期人員停薪留職新政
- 個(gè)人與個(gè)人汽車租賃合同示范文本
- 中外科研合作合同(四):專有技術(shù)共享
- 個(gè)人快遞服務(wù)合同樣本
- 個(gè)人設(shè)備融資租賃抵押擔(dān)保合同范本
- 中外合資采購(gòu)與銷售合同樣本
- 個(gè)人合伙項(xiàng)目合同協(xié)議
- 人教版2024-2025學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末壓軸題練習(xí)
- 小班繪本教學(xué)《藏在哪里了》課件
- 老師呀請(qǐng)你別生氣教學(xué)反思
- 變壓器更換施工方案
- 安徽新宸新材料有限公司年產(chǎn)6000噸鋰離子電池材料雙氟磺酰亞胺鋰項(xiàng)目環(huán)境影響報(bào)告書
- 日本酒類消費(fèi)行業(yè)市場(chǎng)分析報(bào)告
- GB/T 29594-2013可再分散性乳膠粉
- 西子奧的斯電梯ACD2調(diào)試說(shuō)明書
- 成長(zhǎng)感恩責(zé)任高中主題班會(huì)-課件
- 建設(shè)項(xiàng)目全過(guò)程工程咨詢服務(wù)指引(咨詢企業(yè)版)(征求意見稿)
- 分手的協(xié)議書模板(5篇)
評(píng)論
0/150
提交評(píng)論