a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux開發環境的搭建之:U-Boot移植

嵌入式Linux開發環境的搭建之:U-Boot移植

作者: 時間:2013-09-13 來源:網絡 收藏

本文引用地址:http://www.j9360.com/article/257139.htm

5.2

5.2.1介紹

1.概念

簡單地說,就是在操作系統內核運行之前運行的一段程序,它類似于PC機中的BIOS程序。通過這段程序,可以完成硬件設備的初始化,并建立內存空間的映射關系,從而將系統的軟硬件環境帶到一個合適的狀態,為最終加載系統內核做好準備。

通常,比較依賴于硬件平臺,特別是在嵌入式系統中,更為如此。因此,在嵌入式世界里建立一個通用的Bootloader是一件比較困難的事情。盡管如此,仍然可以對Bootloader歸納出一些通用的概念來指導面向用戶定制的Bootloader設計與實現。

(1)Bootloader所支持的CPU和嵌入式開發板。

每種不同的CPU體系結構都有不同的Bootloader。有些Bootloader也支持多種體系結構的CPU,如后面要介紹的U-Boot支持ARM、MIPS、PowerPC等眾多體系結構。除了依賴于CPU的體系結構外,Bootloader實際上也依賴于具體的嵌入式板級設備的配置。

(2)Bootloader的存儲位置。

系統加電或復位后,所有的CPU通常都從某個由CPU制造商預先安排的地址上取指令。而基于CPU構建的嵌入式系統通常都有某種類型的固態存儲設備(比如ROM、EEPROM或Flash等)被映射到這個預先安排的地址上。因此在系統加電后,CPU將首先執行Bootloader程序。

(3)Bootloader的啟動過程分為單階段和多階段兩種。通常多階段的Bootloader能提供更為復雜的功能,以及更好的可移植性。

(4)Bootloader的操作模式。大多數Bootloader都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式,這種區別僅對于開發人員才有意義。

n 啟動加載模式:這種模式也稱為“自主”模式。也就是Bootloader從目標機上的某個固態存儲設備上將操作系統加載到RAM中運行,整個過程并沒有用戶的介入。這種模式是嵌入式產品發布時的通用模式。

n 下載模式:在這種模式下,目標機上的Bootloader將通過串口連接或網絡連接等通信手段從主機(Host)下載文件,比如:下載內核映像和根文件系統映像等。從主機下載的文件通常首先被Bootloader保存到目標機的RAM中,然后再被Bootloader寫入到目標機上的Flash類固態存儲設備中。Bootloader的這種模式在系統更新時使用。工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。

(5)Bootloader與主機之間進行文件傳輸所用的通信設備及協議,最常見的情況就是,目標機上的Bootloader通過串口與主機之間進行文件傳輸,傳輸協議通常是xmodem/ymodem/zmodem等。但是,串口傳輸的速度是有限的,因此通過以太網連接并借助TFTP等協議來下載文件是個更好的選擇。

2.Bootloader啟動流程

Bootloader的啟動流程一般分為兩個階段:stage1和stage2,下面分別對這兩個階段進行講解。

(1)Bootloader的stage1。

在stage1中Bootloader主要完成以下工作。

n 基本的硬件初始化,包括屏蔽所有的中斷、設置CPU的速度和時鐘頻率、RAM初始化、初始化外圍設備、關閉CPU內部指令和數據cache等。

n 為加載stage2準備RAM空間,通常為了獲得更快的執行速度,通常把stage2加載到RAM空間中來執行,因此必須為加載Bootloader的stage2準備好一段可用的RAM空間。

n 復制stage2到RAM中,在這里要確定兩點:①stage2的可執行映像在固態存儲設備的存放起始地址和終止地址;②RAM空間的起始地址。

n 設置堆棧指針sp,這是為執行stage2的C語言代碼做好準備。

(2)Bootloader的stage2。

在stage2中Bootloader主要完成以下工作。

n 用匯編語言跳轉到main入口函數。

由于stage2的代碼通常用C語言來實現,目的是實現更復雜的功能和取得更好的代碼可讀性和可移植性。但是與普通C語言應用程序不同的是,在編譯和鏈接Bootloader這樣的程序時,不能使用glibc庫中的任何支持函數。

n 初始化本階段要使用到的硬件設備,包括初始化串口、初始化計時器等。在初始化這些設備之前可以輸出一些打印信息。

n 檢測系統的內存映射,所謂內存映射就是指在整個4GB物理地址空間中指出哪些地址范圍被分配用來尋址系統的內存。

n 加載內核映像和根文件系統映像,這里包括規劃內存占用的布局和從Flash上復制數據。

n 設置內核的啟動參數。

5.2.2U-Boot概述

1.U-Boot簡介

U-Boot(UniversalBootloader)是遵循GPL條款的開放源碼項目。它是從FADSROM、8xxROM、PPCBOOT逐步發展演化而來。其源碼目錄、編譯形式與Linux內核很相似,事實上,不少U-Boot源碼就是相應的Linux內核源程序的簡化,尤其是一些設備的驅動程序,這從U-Boot源碼的注釋中能體現這一點。但是U-Boot不僅僅支持系統的引導,而且還支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式操作系統。其目前要支持的目標操作系統是OpenBSD、NetBSD、FreeBSD、4.4BSD、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks、LynxOS、pSOS、QNX、RTEMS、ARTOS。這是U-Boot中Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發目標,即支持盡可能多的嵌入式處理器和嵌入式操作系統。就目前為止,U-Boot對PowerPC系列處理器支持最為豐富,對Linux的支持最完善。

2.U-Boot特點

U-Boot的特點如下。

n 開放源碼;

n 支持多種嵌入式操作系統內核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;

n 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;

n 較高的可靠性和穩定性;

n 高度靈活的功能設置,適合U-Boot調試、操作系統不同引導要求和產品發布等;

n 豐富的設備驅動源碼,如串口、以太網、SDRAM、Flash、LCD、NVRAM、EEPROM、RTC、鍵盤等;

n 較為豐富的開發調試文檔與強大的網絡技術支持。

3.U-Boot主要功能

U-Boot可支持的主要功能列表。

n 系統引導:支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統。支持NFS掛載,并從Flash中引導壓縮或非壓縮系統內核。

n 基本輔助功能:強大的操作系統接口功能;可靈活設置、傳遞多個關鍵參數給操作系統,適合系統在不同開發階段的調試要求與產品發布,尤其對Linux支持最為強勁;支持目標板環境參數多種存儲方式,如Flash、NVRAM、EEPROM;CRC32校驗,可校驗Flash中內核、RAMDISK映像文件是否完好。

n 設備驅動:串口、SDRAM、Flash、以太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅動支持。

n 上電自檢功能:SDRAM、Flash大小自動檢測;SDRAM故障檢測;CPU型號。

n 特殊功能:XIP內核引導。

5.2.3U-Boot源碼導讀

1.U-Boot源碼結構

U-Boot源碼結構如圖5.27所示。

圖5.27U-Boot源碼結構

n board:和一些已有開發板有關的代碼,比如makefile和U-Boot.lds等都和具體開發板的硬件和地址分配有關。

n common:與體系結構無關的代碼,用來實現各種命令的C程序。

n cpu:包含CPU相關代碼,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S等。其中cpu.c初始化CPU、設置指令Cache和數據Cache等;interrupt.c設置系統的各種中斷和異常,比如快速中斷、開關中斷、時鐘中斷、軟件中斷、預取中止和未定義指令等;匯編代碼文件start.S是U-BOOT啟動時執行的第一個文件,它主要是設置系統堆棧和工作方式,為進入C程序奠定基礎。

n disk:disk驅動的分區相關代碼。

n doc:文檔。

n drivers:通用設備驅動程序,比如各種網卡、支持CFI的Flash、串口和USB總線等。

n fs:支持文件系統的文件,U-BOOT現在支持cramfs、fat、fdos、jffs2和registerfs等。

n include:頭文件,還有對各種硬件平臺支持的匯編文件,系統的配置文件和對文件系統支持的文件。

n net:與網絡有關的代碼,BOOTP協議、TFTP協議、RARP協議和NFS文件系統的實現。

n lib_arm:與ARM體系結構相關的代碼。

n tools:創建S-Record格式文件和U-BOOTimages的工具。

c語言相關文章:c語言教程


linux相關文章:linux教程



上一頁 1 2 3 4 5 下一頁

評論


相關推薦

技術專區

關閉