UBOOT基礎(chǔ)知識教學(xué)課件_第1頁
UBOOT基礎(chǔ)知識教學(xué)課件_第2頁
UBOOT基礎(chǔ)知識教學(xué)課件_第3頁
UBOOT基礎(chǔ)知識教學(xué)課件_第4頁
UBOOT基礎(chǔ)知識教學(xué)課件_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、UBOOT中 嵌Teacher Xie 提 綱理論:BootLoader介紹Uboot介紹Uboot命令Uboot工作流程Uboot移植Uboot燒寫實(shí)驗(yàn):移植UbootUboot使用第一節(jié)BootLoader介紹概念什么是BootLoader?軟件層次一個(gè)嵌入式系統(tǒng)從軟件角度來看分為三個(gè)層次:1. 引導(dǎo)加載程序 包括固化在固件(firmware)中的 boot 代碼(可選),和 BootLoader 兩大部分。 2. Linux 內(nèi)核 特定于嵌入式平臺的定制內(nèi)核。 3. 文件系統(tǒng) 包括了系統(tǒng)命令和應(yīng)用程序。 軟件層次一個(gè)同時(shí)裝有 BootLoader、內(nèi)核的啟動(dòng)參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像

2、的固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)圖:回憶PCPC機(jī)中的引導(dǎo)加載程序由BIOS(其本質(zhì)是一段固件程序)和位于硬盤MBR中的引導(dǎo)程序(GRUB或LILO)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤中的引導(dǎo)程序讀到系統(tǒng)內(nèi)存中然后將控制權(quán)交給引導(dǎo)程序。引導(dǎo)程序的主要任務(wù)是將內(nèi)核從硬盤上讀到內(nèi)存中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即啟動(dòng)操作系統(tǒng)。定義在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。比如在一個(gè)基于ARM7TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0 x00000000開始執(zhí)行。而在這個(gè)地址處安排的通常就

3、是系統(tǒng)的BootLoader程序。定義簡單地說,BootLoader就是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)做好準(zhǔn)備。功能BootLoader 的主要任務(wù)是初始化硬件(如:串口,內(nèi)存),然后將內(nèi)核映象從 Flash 中讀到 RAM 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也就是啟動(dòng)操作系統(tǒng)。安裝系統(tǒng)加電或復(fù)位后,所有的CPU通常都從CPU制造商預(yù)先安排地址開始執(zhí)行。比如,S3C2410在復(fù)位后從地址0 x00000000起開始執(zhí)行。而嵌入式系統(tǒng)則將固態(tài)存儲(chǔ)設(shè)備(比如:FLASH)安排在這個(gè)地址上,而b

4、ootloader程序又安排在固態(tài)存儲(chǔ)器的最前端,這樣就能保證在系統(tǒng)加電后,CPU首先執(zhí)行BootLoader程序。移植Q:什么叫bootloader移植?Q:為什么需要移植?移植每種不同的CPU體系結(jié)構(gòu)都有不同的BootLoader。除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader 還依賴于具體的嵌入式板級設(shè)備的配置,比如板卡的硬件地址分配,外設(shè)芯片的類型等。這也就是說,對于兩塊不同的開發(fā)板而言,即使它們是基于同一種CPU而構(gòu)建的,但如果他們的硬件資源或配置不一致的話,要想在一塊開發(fā)板上運(yùn)行的BootLoader程序也能在另一塊板子上運(yùn)行,還是需要作修改。流程BootLoader 的啟動(dòng)過

5、程可分為單階段(Single-Stage)和多階段(Multi-Stage)兩種,通常多階段的 BootLoader 具有更復(fù)雜的功能,更好的可移植性。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的 BootLoader 大多采用兩階段,即啟動(dòng)過程可以分為 stage 1和 stage2:stage1完成初始化硬件,為stage2準(zhǔn)備內(nèi)存空間,并將stage2復(fù)制到內(nèi)存中,設(shè)置堆棧,然后跳轉(zhuǎn)到stage2。流程BootLoader 的 stage1 通常包括以下步驟:硬件設(shè)備初始化為加載 BootLoader 的 stage2 準(zhǔn)備 RAM 空間拷貝 BootLoader 的 stage2 到 RAM 空間中設(shè)置好堆

6、棧(why?)跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn)流程BootLoader 的 stage2 通常包括以下步驟:初始化本階段要使用到的硬件設(shè)備將內(nèi)核映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 中調(diào)用內(nèi)核內(nèi)存分布第二節(jié)UBOOT介紹作用Uboot是德國DENX小組開發(fā)的用于多種嵌入式CPU( MIPS、x86、ARM、XScale等)的bootloader程序, UBoot不僅支持嵌入式Linux系統(tǒng)的引導(dǎo),還支持VxWorks, QNX等多種嵌入式操作系統(tǒng)。下載從下面地址可以下載到uboot的源代碼:/projects/uboot 目錄樹進(jìn)入到UBOOT目錄,可以得到如下的目錄結(jié)構(gòu):|

7、board|common|cpu|disk|doc|drivers|dtt|examples|fs|include目錄樹|lib_arm|lib_generic|lib_i386|lib_m68k|lib_microblaze|lib_mips|lib_nios|lib_nios2|lib_ppc|net|post|rtctools目錄結(jié)構(gòu)(展示)Board和開發(fā)板有關(guān)的文件。每一個(gè)開發(fā)板都以一個(gè)子目錄出現(xiàn)在當(dāng)前目錄中,比如:SMDK2410,子目錄中存放與開發(fā)板相關(guān)的文件。Common實(shí)現(xiàn)Uboot支持的命令。Cpu與特定CPU架構(gòu)相關(guān)的代碼,每一款Uboot下支持的CPU在該目錄下對應(yīng)一個(gè)

8、子目錄,比如有子目錄arm920t等。Disk 對磁盤的支持。Doc文檔目錄。Uboot有非常完善的文檔,推薦大家參考閱讀。 DriversUboot支持的設(shè)備驅(qū)動(dòng)程序都放在該目錄,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB等。目錄結(jié)構(gòu)(展示)目錄結(jié)構(gòu)(展示)Fs 文件系統(tǒng)的支持。Include Uboot使用的頭文件。該目錄下configs目錄有與開發(fā)板相關(guān)的配置頭文件,如smdk2410.h。該目錄下的asm目錄有與CPU體系結(jié)構(gòu)相關(guān)的頭文件。目錄結(jié)構(gòu)(展示)Net與網(wǎng)絡(luò)協(xié)議棧相關(guān)的代碼,例如:TFTP協(xié)議、RARP協(xié)議的實(shí)現(xiàn)。Tools生成Uboot的工具,如:mkimage,

9、crc等等。編譯Uboot的Makefile從功能上可以分成兩個(gè)部分:1、執(zhí)行每種board相關(guān)的配置2、編譯生成uboot.bin文件編譯(演示)Uboot.bin的生成也分為兩步,以smdk2410為例來說明,如下:1.對于board進(jìn)行配置:$make smdk2410_config2.進(jìn)行編譯生成u-boot.bin:$make CROSS_COMPILE=arm-linux- 第三節(jié)UBOOT命令常用命令(演示)盡管UBOOT提供了豐富的命令集,但不同的單板所支持的命令并不一定一樣(可配置,How?后面章節(jié)),help 命令可用于察看當(dāng)前單板所支持的命令。2410 # helpaut

10、oscr -run script from memorybase -print or set address offsetbdinfo -print Board Info structureboot -boot default,i.e.,run bootcmdbootm -boot application image from memorybootp -boot image via network using BootP/TFTP protocol環(huán)境變量相關(guān)(演示) Printenv 打印環(huán)境變量usage:printenv - print values of all environment

11、 variablesprintenv name . - print value of environment variable nameUboot printenvbaudrate=115200ipaddr=ethaddr=12:34:56:78:9A:BCserverip=環(huán)境變量相關(guān)(演示)Setenv 設(shè)置新的變量(修改已有變量)setenv name value . - set environment variable name to value .setenv name - delete environment variable nameUboot setenv myboard AT

12、91RM9200DKUboot printenv ethaddr=12:34:56:78:9A:BCserverip=myboard=AT91RM9200DK環(huán)境變量相關(guān)(演示)Saveenv 保存變量將當(dāng)前定義的所有變量及其值存入flash中。文件下載(演示)Tftp 通過網(wǎng)絡(luò)下載文件 *使用tftp,需要先配置好網(wǎng)絡(luò)Uboot setenv ethaddr 12:34:56:78:9A:BCUboot setenv ipaddr Uboot setenv serverip 54(tftp服務(wù)器的地址)例:Uboot tftp 32000000 vmlinux把server(IP=環(huán)境變量中

13、設(shè)置的serverip)中服務(wù)目錄 下的vmlinux通過TFTP讀入到0 x32000000處。內(nèi)存操作命令(演示)Md 顯示內(nèi)存區(qū)的內(nèi)容。md采用十六進(jìn)制和ASCII碼兩種形式來顯示存儲(chǔ)單元的內(nèi)容。這條命令還可以采用長度標(biāo)識符 .l, .w和.b :md .b, .w, .l addressmd.w 10000000100000: 2705 1956 5050 4342 6f6f 7420 312e 312e .VPPCBoot 1.1.00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -00100020: 2

14、031 393a 3535 3a30 3429 0000 0000 0000 19:55:04).內(nèi)存操作命令(演示)Mm 修改內(nèi)存,地址自動(dòng)遞增。mm .b, .w, .l address Mm 提供了一種互動(dòng)修改存儲(chǔ)器內(nèi)容的方法。它會(huì)顯示地址和當(dāng)前值,然后提示用戶輸入。如果你輸入了一個(gè)合法的十六進(jìn)制數(shù),這個(gè)新的值將會(huì)被寫入該地址。然后提示下一個(gè)地址。如果你沒有輸入任何值,只是按了一下回車,那么該地址的內(nèi)容保持不變。如果想結(jié)束輸入,則輸入空格,然后回車。= mm 10000000100000: 27051956 ? 000100004: 50504342 ? AABBCCDD00100008

15、: 6f6f7420 ? 01234567Flash操作命令(演示)Flinfo 查看Flash扇區(qū)信息Usage:Uboot Flinfo Flash操作命令(演示)Protect Flash寫保護(hù) 打開或關(guān)閉扇區(qū)寫保護(hù)用法:protect off all 關(guān)閉所有扇區(qū)的寫保護(hù)protect on all 打開所有扇區(qū)的寫保護(hù)protect off start end 關(guān)閉從start 到 end 扇區(qū)的寫保護(hù)(start為要關(guān)閉的第1個(gè)扇區(qū)的起始地址,end為要關(guān)閉的最后一個(gè)扇區(qū)的結(jié)束地址)protect on start end 打開從start 到 end 扇區(qū)的寫保護(hù)Flash操作命

16、令(演示)Erase 擦除flash扇區(qū)用法: erase start end 擦除從start 到 end 的扇區(qū),start 為要擦除的第1個(gè)扇區(qū)的起始地址,end 為要擦除的最后一個(gè)扇區(qū)的結(jié)束地址(在使用cp命令向Nor型Flash寫入數(shù)據(jù)之前必須先使用erase 命令擦除flash,因?yàn)閚or flash 按字節(jié)寫入時(shí),無法寫入1,所以必須通過擦除來寫入1)。例:erase 30000 1effff。Flash操作命令(演示)Cp 數(shù)據(jù)拷貝。Cp .b, .w, .l saddress daddress lenCp 提供了一種內(nèi)存與內(nèi)存,內(nèi)存與Flash之間數(shù)據(jù)拷貝的方法。例:cp.b

17、 30008000 20000 100000 將內(nèi)存地址0 x30008000處的數(shù)據(jù)(長度為0 x100000)拷貝到 地址0 x20000處(Flash中)cp.b 30800000 130000 70000 將內(nèi)存地址0 x30800000處的數(shù)據(jù)(長度為0 x70000)拷貝到 地址0 x130000處(Flash中)程序執(zhí)行指令(演示) Go 執(zhí)行內(nèi)存中的二進(jìn)制代碼,一個(gè)簡單的跳轉(zhuǎn)到指定地址go addr arg . - start application at address addr,passing arg as arguments程序執(zhí)行指令Bootm 執(zhí)行內(nèi)存中的二進(jìn)制代碼b

18、ootm addr arg . - boot application image stored in memorypassing arguments arg .; when booting a Linux kernel, arg can be the address of an initrd image要求二進(jìn)制代碼為制定格式的。通常為mkimage處理過的二進(jìn)制文件。信息類指令bdinfo 顯示開發(fā)板信息 bdinfo命令(簡寫為bdi)將在終端顯示諸如內(nèi)存地址和大小、時(shí)鐘頻率、MAC地址等信息。這些信息在傳遞給Linux內(nèi)核一些參數(shù)時(shí)可能會(huì)用到。技巧(演示)設(shè)置自動(dòng)啟動(dòng) sbc2410=s

19、etenv bootcmd tftp 30008000 zImage ; go 30080000 sbc2410=saveenv第四節(jié)Uboot工作流程工作模式大多數(shù)BootLoader都包含兩種不同的操作模式:“啟動(dòng)模式” 和“下載模式”,這種區(qū)別僅對于開發(fā)人員才有意義,但從最終用戶的角度看,BootLoader的作用就是用來加載操作系統(tǒng),而不存在所謂的啟動(dòng)模式與下載模式。啟動(dòng)模式這種模式也稱為“自主” 模式,是指 BootLoader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)自動(dòng)加載到 RAM 中運(yùn)行,整個(gè)過程并沒有用戶的介入。這種模式是 BootLoader 的正常工作模式,因此在嵌入式

20、產(chǎn)品發(fā)布的時(shí)侯,BootLoader 顯然必須工作在這種模式下。下載模式在這種模式下,目標(biāo)機(jī)上的 BootLoader 將通過串口或網(wǎng)絡(luò)等通信手段從主機(jī)(Host)下載文件 ,然后控制啟動(dòng)流程。流程參考文檔uboot啟動(dòng)流程第五節(jié)Uboot 移植單板配置Q:為什么需要對Uboot做移植?A: BootLoader 依賴于具體的嵌入式板級設(shè)備的配置Q:具體的板級設(shè)備的配置在哪里?A:單板的配置文件位于include/configs/.h 用相應(yīng)的BOARD定義代替(例:smdk2410.h)單板配置Q:Uboot移植都需要做些什么?A:根據(jù)開發(fā)板硬件特性修改配置文件是其中最重要的一項(xiàng)工作Q:配置

21、文件中都有些什么信息?A:請看下頁范例 (smdk2410.h)Smdk2410.h#define CONFIG_ARM920T1/* CPU 類型*/#define CONFIG_S3C2410 1/* MCU類型 */#define CONFIG_SMDK24101/* 開發(fā)板型號 */Smdk2410.h#define USE_920T_MMU 1/* 使用MMU */#undef CONFIG_USE_IRQ/* 不使用 IRQ/FIQ */* malloc 池大小*/#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)#define CFG

22、_GBL_DATA_SIZE128/* 數(shù)據(jù)段大小 128字節(jié) */Smdk2410.h#define CONFIG_DRIVER_CS89001/* 一個(gè) CS8900 網(wǎng)卡 */#define CS8900_BASE0 x19000300/* CS8900A 基地址 */#define CONFIG_SERIAL1 1/* 使用串口1 */#define CONFIG_BAUDRATE115200/* 波特率 */Smdk2410.h#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | /*CFG_CMD_NAND |*/ /*

23、CFG_CMD_EEPROM |*/ /*CFG_CMD_I2C |*/ /*CFG_CMD_USB |*/ CFG_CMD_REGINFO | CFG_CMD_DATE | CFG_CMD_ELF)/*定義使用的命令,可添加額外命令,如PING*/Smdk2410.h#define CONFIG_BOOTDELAY 3/* 啟動(dòng)等待時(shí)間 */#define CONFIG_BOOTARGS root=ramfs devfs=mount console=ttySA0,9600“/* 內(nèi)核啟動(dòng)參數(shù) */#define CONFIG_ETHADDR08:00:3e:26:0a:5b#define C

24、ONFIG_NETMASK #define CONFIG_IPADDR 10#define CONFIG_SERVERIPSmdk2410.h#define CONFIG_BOOTCOMMANDtftp; bootm#defineCFG_PROMPTSMDK2410 # #define PHYS_SDRAM_1 0 x30000000 /* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE0 x04000000 /* 64 MB */#defineCFG_LOAD_ADDR 0 x33000000 /* 默認(rèn)的加載地址 */#define CFG_BAUDRA

25、TE_TABLE 9600, 19200, 38400, 57600, 115200 /*可用的波特率*/Smdk2410.h#define CONFIG_NR_DRAM_BANKS1 /* 有一片SDRAM */#define PHYS_FLASH_1 0 x00000000 /* FLASH 1的基地址 */#define CFG_FLASH_BASEPHYS_FLASH_1/*FLASH 的基地址*/移植Q: 怎么做Uboot的移植呢?移植方法 移植U-Boot工作包括添加開發(fā)板硬件相關(guān)的文件、配置選項(xiàng),然后配置編譯。移植方法 開始移植之前,首先要分析U-Boot已經(jīng)支持的開發(fā)板,選擇出

26、硬件配置最接近的開發(fā)板。選擇的原則是,首先處理器相同,其次處理器體系結(jié)構(gòu)相同,然后是以太網(wǎng)接口等外圍接口相同。 還要驗(yàn)證一下這個(gè)參考開發(fā)板的U-Boot,至少能夠配置編譯通過。移植范例 以SBC2410開發(fā)板為例,該開發(fā)板采用S3c2410芯片。而UBoot-1.1.4版本支持SMDK2410開發(fā)板,并且SMDK2410同樣采用S3c2410芯片,因此選取SMDK2410作為移植參考。移植步驟移植U-Boot的基本步驟如下:在頂層Makefile中為開發(fā)板添加新的配置選項(xiàng),使用已有的配置項(xiàng)目為例smdk2410_config : unconfig ./mkconfig $(:_config=) arm arm920t smdk2410 NULL s3c24x0參考上面2行,添加下面2行:sbc2410_config :

溫馨提示

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

最新文檔

評論

0/150

提交評論