版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第9章嵌入式Linux系統(tǒng)移植9.1Bootloader(引導(dǎo)加載器)9.2基于ARM-withMMU的Linux移植9.3基于ARM-noMMU的μCLinux移植9.1Bootloader的開發(fā)LinuxBootloader的概述BootLoader的stage1BootLoader的stage2LinuxBootloader的概述BootLoader的實現(xiàn)依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩大部分。依賴于CPU體系結(jié)構(gòu)的代碼,例如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍的目的。而stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)更復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。與體系結(jié)構(gòu)相關(guān)便于適應(yīng)不同平臺LinuxBootloader的概述BootLoader的stage1通常包括以下步驟(以執(zhí)行的先后為順序):硬件設(shè)備初始化為加載BootLoader的stage2準備RAM空間拷貝BootLoader的stage2到RAM空間中設(shè)置好堆棧跳轉(zhuǎn)到stage2的C入口點進入BootLoader的C語言入口準備的C語言的運行環(huán)境。LinuxBootloader的概述BootLoader的stage2通常包括以下步驟(以執(zhí)行的先后為順序):初始化本階段要使用到的硬件設(shè)備檢測系統(tǒng)內(nèi)存映射(memorymap)將kernel映像和根文件系統(tǒng)映像從flash上讀到RAM空間中為內(nèi)核設(shè)置啟動參數(shù)調(diào)用內(nèi)核硬件初始化階段。為操作系統(tǒng)準備環(huán)境調(diào)用操作系統(tǒng)BootLoader的stage11、基本的硬件初始化:屏蔽所有的中斷設(shè)置CPU的速度和時鐘頻率RAM初始化初始化LED關(guān)閉CPU內(nèi)部指令/數(shù)據(jù)cache對于具有MMU的處理器BootLoader的stage12、為加載stage2準備RAM空間為了獲得更快的執(zhí)行速度,通常把stage2加載到RAM空間中來執(zhí)行,因此必須為加載BootLoader的stage2準備好一段可用的RAM空間范圍。BootLoader的stage13.復(fù)制stage2到RAM中stage2的可執(zhí)行映像在固態(tài)存儲設(shè)備的存放起始地址和終止地址;為stage2所安排的RAM空間的起始地址。BootLoader的stage14、設(shè)置堆棧指針spBootLoader映像區(qū)域第二階段加載區(qū)域BootLoader的stage15、跳轉(zhuǎn)到stage2的C入口點在上述一切都就緒后,可以跳轉(zhuǎn)到BootLoader的stage2去執(zhí)行了。ARM處理器跳轉(zhuǎn)通過PC(R15)的改變來實現(xiàn)BootLoader的stage2trampoline程序示例(來自blobbootloader軟件):.text.globl_trampoline_trampoline: bl main /*如果main返回,對其進行再次調(diào)用*/
b _trampoline這里的main標號為C語言的入口BootLoader的stage21、初始化本階段要使用到的硬件設(shè)備初始化至少一個串口,以便和終端用戶進行I/O輸出信息;初始化定時器等。在C語言程序中,可以通過讀寫處理器的特殊功能寄存器,實現(xiàn)設(shè)置硬件的工作。BootLoader的stage22、檢測系統(tǒng)的內(nèi)存映射(memorymap)內(nèi)存映射就是指在整個4GB的物理地址空間中。BootLoader的stage2必須先檢測整個系統(tǒng)的內(nèi)存映射情況。檢測完系統(tǒng)的內(nèi)存映射情況后,BootLoader也可以將內(nèi)存映射的詳細信息打印到串口。BootLoader的stage23、加載內(nèi)核映像和根文件系統(tǒng)映像規(guī)劃內(nèi)存占用的布局從Flash上拷貝while(count){*dest++=*src++;count-=4;};BootLoader的stage24、設(shè)置內(nèi)核的啟動參數(shù)
從Flash上拷貝調(diào)用內(nèi)核之前,應(yīng)該作一步準備工作,即:設(shè)置Linux內(nèi)核的啟動參數(shù)。console=ttyS0,115200n8串口采用如下設(shè)置:“115200bps、無奇偶校驗、8位數(shù)據(jù)位”。Linux控制臺參數(shù)BootLoader的stage25、調(diào)用內(nèi)核CPU寄存器的設(shè)置CPU模式Cache和MMU的設(shè)置C語言調(diào)用內(nèi)核:void(*callKernel)(intzero,intarch,u32params_addr)=(void(*)(int,int,u32))KERNEL_RAM_BASE;callKernel(0,ARCH_NUMBER,(u32)kernel_params_start);函數(shù)指針,賦值為絕對地址。9.2基于ARM-withMMU的Linux移植Linux內(nèi)核概述Linux源文件結(jié)構(gòu)ARM-Linux移植ARM-Linux的初始化流程基于PXA2xx的ARMlinux移植Linux內(nèi)核概述Linux內(nèi)核組成:進程調(diào)度(ProcessSchedule)進程間通信(IPC,Intre-ProcessCommunication)內(nèi)存管理(MM,MemoryManagement)虛擬文件系統(tǒng)(VFS,VirtualFlieSystem)網(wǎng)絡(luò)(Net)Linux內(nèi)核概述Linux源文件結(jié)構(gòu)代碼部分程序語言描述linux2.x/initC初始化代碼,包括C語言入口函數(shù)main.clinux2.x/kernelC內(nèi)核的核心代碼,包括進程調(diào)度等linux2.x/ipcC進程通訊代碼linux2.x/mmC內(nèi)存管理代碼linux2.x/fsC文件系統(tǒng)代碼linux2.x/netC網(wǎng)絡(luò)代碼linux2.x/driversC驅(qū)動程序代碼包含char、block、net等子目錄linux2.x/includeC頭文件各部分代碼頭文件linux2.x/archC+匯編與體系結(jié)構(gòu)相關(guān)的C和匯編代碼移植改動的主要工作。ARM-Linux移植Linux核心部分的C語言源文件Linux驅(qū)動程序的C語言源文件ARM體系的C語言和匯編文件具體處理器的C語言和匯編文件生成的目標包含內(nèi)核映像和各個獨立的模塊。ARM-Linux移植在arch\arm包含的目錄如下表所示:
init:啟動匯編入口,文件夾compressed包含了壓縮程序
configs:配置腳本
mm:與體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼
tools:包含各種體系結(jié)構(gòu)的定義
mach-XXX:各種體系相關(guān)的代碼Linux內(nèi)核概述Linux的C語言入口是linux2.x/init/目錄中的main.c的start_kernel()函數(shù)。Linux程序進入C語言入口后,將完成系統(tǒng)的各種初始化工作,并建立第一個進程,整個系統(tǒng)進入調(diào)度狀態(tài)。Linux內(nèi)核概述壓縮和非壓縮啟動同時進入內(nèi)核入口?;赑XA2xx的ARMlinux移植
對于增加Linux對一款新的處理器的支持,需要從以下幾個方面出發(fā):中斷系統(tǒng)定時器DMA系統(tǒng)編譯選項中斷和定時器是為操作系統(tǒng)提供運行節(jié)拍的必要硬件從編譯的角度,增加對新處理器的支持基于PXA2xx的ARMlinux移植目錄和文件類型描述arch/arm/tools/mach-types機器類型這是包含機器類型(處理器類型)的文件,需要在此處增加新的處理器類型include/asm-arm/arch-XXX頭文件這些是需要在內(nèi)核和內(nèi)核模塊中使用的頭文件。在include/arm目錄中的每一個arch-XXX表示了一種Linux支持ARM處理器,對于新增的處理器需要增加一個arch-XXX目錄。arch/arm/mach-XXX處理器移植文件這是移植主要需要的文件,既包括C語言文件,也包括匯編文件。針對每種處理器需要增加各種實現(xiàn)。arch/arm/共同代碼部分ARM的公共代碼對于某些處理器,需要更改針對ARM處理器的共同代碼部分,一般使用條件編譯的方式Makefile和config文件編譯腳本Linux內(nèi)核編譯過程中,需要配置的腳本決定編譯的文件,選擇移植的體系結(jié)構(gòu)。核心部分:定時器和中斷系統(tǒng)?;贏RM-noMMU的μCLinux移植μCLinux的特點μCLinux源文件結(jié)構(gòu)和移植ARM-μCLinux系統(tǒng)的初始化過程S3C44B0X系統(tǒng)的μCLinux的移植μCLinux的特點μCLinux是針對工業(yè)控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性,適合不具備MMU的微處理器/微控制器。支持沒有MMU的CPU是μCLinux與主流Linux的基本差異。針對沒有內(nèi)存管理單元的處理器。μCLinux的特點μCLinux和標準Linux主要的差別:虛擬內(nèi)存Flat(扁平)格式位置無關(guān)的代碼PIC多進程管理μCLinux的特點內(nèi)容類型描述Linux-2.6.xlinux-2.4.xlinux-2.0.xOS源代碼μCLinux的內(nèi)核,與Linux-2.6.x/Linux-2.4.x/Linux-2.0.x內(nèi)核兼容。freeswan軟件源代碼來自的軟件lib軟件源代碼用戶層應(yīng)用程序所用到的一些庫,包括libc,libm等等uClibc源代碼是一個libc庫,比通常使用的glic更小,更精簡。user源代碼包含了μCLinux自帶的大量用戶層的應(yīng)用程序,。config配置腳本一個基本的linux配置腳本用來進行默認的配置vendors編譯信息包含平臺特定的一些編譯信息和一些支持文件。這里還存放了對每一個μCLinux支持的平臺的默認文件。romfs編譯結(jié)果ROM文件系統(tǒng)的目錄結(jié)構(gòu)images編譯結(jié)果包含編譯好的二進制內(nèi)核文件,文件系統(tǒng)的鏡像文件和一個包含文件系統(tǒng)和內(nèi)核的鏡像。μCLinux源文件結(jié)構(gòu)和移植主要的區(qū)別在于內(nèi)存管理(mm),公用代碼和體系結(jié)構(gòu)相關(guān)的代碼與標準Linux具有差別。ARM-μCLinux系統(tǒng)的初始化過程ARM-μCLinux系統(tǒng)的初始化過程和ARM-Linux類似,都是要從Bootloader引導(dǎo),運行內(nèi)核。加載內(nèi)核映像的方式分為壓縮和非壓縮兩種,壓縮內(nèi)核的啟動經(jīng)過arch/arm/boot/compressed目錄中head.S文件,非壓縮內(nèi)核啟動直接進入arch/armnommu/kernel目錄中的head-armv.S,然后調(diào)用start_kernel進入C語言環(huán)境。S3C44B0X系統(tǒng)的μCLinux的移植μCLinux的移植需要增加和改動的文件和Linux基本一致,只是Lin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專業(yè)職業(yè)測評與居間合同3篇
- 二零二五年度P2P出借平臺投資者教育與服務(wù)合同3篇
- 二零二五年度企業(yè)破產(chǎn)財產(chǎn)清算協(xié)議2篇
- 個性化條款:20249A文離婚合同案例分析版
- 二零二五版房屋征收拆遷補償協(xié)議書3篇
- 二零二五年度建筑工程招投標與合同質(zhì)量保證金管理協(xié)議書3篇
- 物業(yè)管理處與2025年度收費員服務(wù)協(xié)議3篇
- 2025年度門衛(wèi)人員崗位職責(zé)優(yōu)化聘用協(xié)議3篇
- 2025年度內(nèi)蒙古自治區(qū)農(nóng)業(yè)廢棄物資源化利用承包合同3篇
- 二零二五年度城鄉(xiāng)汽車租賃及售后服務(wù)合同4篇
- 2025年山東華魯海運有限公司招聘筆試參考題庫含答案解析
- 人教版物理八年級下冊 專項訓(xùn)練卷 (一)力、運動和力(含答案)
- 山東省房屋市政工程安全監(jiān)督機構(gòu)人員業(yè)務(wù)能力考試題庫-中(多選題)
- 《七律二首 送瘟神》教案- 2023-2024學(xué)年高教版(2023)中職語文職業(yè)模塊
- 2024年中考語文滿分作文6篇(含題目)
- 北師大版 2024-2025學(xué)年四年級數(shù)學(xué)上冊典型例題系列第三單元:行程問題“拓展型”專項練習(xí)(原卷版+解析)
- 2023年譯林版英語五年級下冊Units-1-2單元測試卷-含答案
- 施工管理中的文檔管理方法與要求
- DL∕T 547-2020 電力系統(tǒng)光纖通信運行管理規(guī)程
- 種子輪投資協(xié)議
- 執(zhí)行依據(jù)主文范文(通用4篇)
評論
0/150
提交評論