版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、UBOOT,中 嵌 Teacher Xie,1,提 綱,理論: BootLoader介紹 Uboot介紹 Uboot命令 Uboot工作流程 Uboot移植 Uboot燒寫 實驗: 移植Uboot Uboot使用,2,第一節(jié) BootLoader介紹,3,概念,什么是BootLoader?,4,軟件層次,一個嵌入式系統(tǒng)從軟件角度來看分為三個層次: 1. 引導加載程序 包括固化在固件(firmware)中的 boot 代碼(可選),和 BootLoader 兩大部分。 2. Linux 內核 特定于嵌入式平臺的定制內核。 3. 文件系統(tǒng) 包括了系統(tǒng)命令和應用程序。,5,軟件層次,一個同時裝有 B
2、ootLoader、內核的啟動參數(shù)、內核映像和根文件系統(tǒng)映像的固態(tài)存儲設備的典型空間分配結構圖:,6,回憶PC,PC機中的引導加載程序由BIOS(其本質是一段固件程序)和位于硬盤MBR中的引導程序(GRUB或LILO)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤中的引導程序讀到系統(tǒng)內存中然后將控制權交給引導程序。引導程序的主要任務是將內核從硬盤上讀到內存中,然后跳轉到內核的入口點去運行,即啟動操作系統(tǒng)。,7,定義,在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個系統(tǒng)的加載啟動任務就完全由BootLoader來完成。比如在一個基于ARM7TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上
3、電或復位時都從地址0 x00000000開始執(zhí)行。而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。,8,定義,簡單地說,BootLoader就是在操作系統(tǒng)運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)做好準備。,9,功能,BootLoader 的主要任務是初始化硬件(如:串口,內存),然后將內核映象從 Flash 中讀到 RAM 中,然后跳轉到內核的入口點去運行,也就是啟動操作系統(tǒng)。,10,安裝,系統(tǒng)加電或復位后,所有的CPU通常都從CPU制造商預先安排地址開始執(zhí)行。比如,S3C2410在復位后從地址0
4、 x00000000起開始執(zhí)行。而嵌入式系統(tǒng)則將固態(tài)存儲設備(比如:FLASH)安排在這個地址上,而bootloader程序又安排在固態(tài)存儲器的最前端,這樣就能保證在系統(tǒng)加電后,CPU首先執(zhí)行BootLoader程序。,11,移植,Q:什么叫bootloader移植? Q:為什么需要移植?,12,移植,每種不同的CPU體系結構都有不同的BootLoader。除了依賴于CPU的體系結構外,BootLoader 還依賴于具體的嵌入式板級設備的配置,比如板卡的硬件地址分配,外設芯片的類型等。這也就是說,對于兩塊不同的開發(fā)板而言,即使它們是基于同一種CPU而構建的,但如果他們的硬件資源或配置不一致的話
5、,要想在一塊開發(fā)板上運行的BootLoader程序也能在另一塊板子上運行,還是需要作修改。,13,流程,BootLoader 的啟動過程可分為單階段(Single-Stage)和多階段(Multi-Stage)兩種,通常多階段的 BootLoader 具有更復雜的功能,更好的可移植性。從固態(tài)存儲設備上啟動的 BootLoader 大多采用兩階段,即啟動過程可以分為 stage 1和 stage2:stage1完成初始化硬件,為stage2準備內存空間,并將stage2復制到內存中,設置堆棧,然后跳轉到stage2。,14,流程,BootLoader 的 stage1 通常包括以下步驟: 硬件設
6、備初始化 為加載 BootLoader 的 stage2 準備 RAM 空間 拷貝 BootLoader 的 stage2 到 RAM 空間中 設置好堆棧(why?) 跳轉到 stage2 的 C 入口點,15,流程,BootLoader 的 stage2 通常包括以下步驟: 初始化本階段要使用到的硬件設備將內核映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 中 調用內核,16,內存分布,17,第二節(jié) UBOOT介紹,18,作用,Uboot是德國DENX小組開發(fā)的用于多種嵌入式CPU( MIPS、x86、ARM、XScale等)的bootloader程序, UBoot不僅支持嵌入式Linu
7、x系統(tǒng)的引導,還支持VxWorks, QNX等多種嵌入式操作系統(tǒng)。,19,下載,從下面地址可以下載到uboot的源代碼:,20,目錄樹,進入到UBOOT目錄,可以得到如下的目錄結構: |board |common |cpu |disk |doc |drivers |dtt |examples |fs |include,21,目錄樹,|lib_arm |lib_generic |lib_i386 |lib_m68k |lib_microblaze |lib_mips |lib_nios |lib_nios2 |lib_ppc |net |post |rtc tools,22,目錄結構(展示),B
8、oard 和開發(fā)板有關的文件。每一個開發(fā)板都以一個子目錄出現(xiàn)在當前目錄中,比如:SMDK2410,子目錄中存放與開發(fā)板相關的文件。 Common 實現(xiàn)Uboot支持的命令。 Cpu 與特定CPU架構相關的代碼,每一款Uboot下支持的CPU在該目錄下對應一個子目錄,比如有子目錄arm920t等。,23,Disk 對磁盤的支持。 Doc 文檔目錄。Uboot有非常完善的文檔,推薦大家參考閱讀。 Drivers Uboot支持的設備驅動程序都放在該目錄,比如各種網卡、支持CFI的Flash、串口和USB等。,目錄結構(展示),24,目錄結構(展示),Fs 文件系統(tǒng)的支持。 Include Uboo
9、t使用的頭文件。該目錄下configs目錄有與開發(fā)板相關的配置頭文件,如smdk2410.h。該目錄下的asm目錄有與CPU體系結構相關的頭文件。,25,目錄結構(展示),Net 與網絡協(xié)議棧相關的代碼,例如:TFTP協(xié)議、RARP協(xié)議的實現(xiàn)。 Tools 生成Uboot的工具,如:mkimage, crc等等。,26,編譯,Uboot的Makefile從功能上可以分成兩個部分: 1、執(zhí)行每種board相關的配置 2、編譯生成uboot.bin文件,27,編譯(演示),Uboot.bin的生成也分為兩步,以smdk2410為例來說明,如下: 1.對于board進行配置: $make smdk2
10、410_config 2.進行編譯生成u-boot.bin: $make CROSS_COMPILE=arm-linux-,28,第三節(jié) UBOOT命令,29,常用命令(演示),盡管UBOOT提供了豐富的命令集,但不同的單板所支持的命令并不一定一樣(可配置,How?后面章節(jié)),help 命令可用于察看當前單板所支持的命令。 2410 # help autoscr -run script from memory base -print or set address offset bdinfo -print Board Info structure boot -boot default,i.e.,
11、run bootcmd bootm -boot application image from memory bootp -boot image via network using BootP/TFTP protocol,30,環(huán)境變量相關(演示),Printenv 打印環(huán)境變量 usage:printenv - print values of all environment variablesprintenv name . - print value of environment variable name Uboot printenvbaudrate=115200ipaddr=192.168
12、.1.1ethaddr=12:34:56:78:9A:BCserverip=,31,環(huán)境變量相關(演示),Setenv 設置新的變量(修改已有變量) setenv name value . - set environment variable name to value . setenv name - delete environment variable name Uboot setenv myboard AT91RM9200DKUboot printenv ethaddr=12:34:56:78:9A:BCserverip= myboard=AT
13、91RM9200DK,32,環(huán)境變量相關(演示),Saveenv 保存變量 將當前定義的所有變量及其值存入flash中。,33,文件下載(演示),Tftp 通過網絡下載文件 *使用tftp,需要先配置好網絡 Uboot setenv ethaddr 12:34:56:78:9A:BC Uboot setenv ipaddr Uboot setenv serverip 54(tftp服務器的地址) 例: Uboot tftp 32000000 vmlinux把server(IP=環(huán)境變量中設置的serverip)中服務目錄 下的vmlinux通過TF
14、TP讀入到0 x32000000處。,34,內存操作命令(演示),Md 顯示內存區(qū)的內容。 md采用十六進制和ASCII碼兩種形式來顯示存儲單元的內容。 這條命令還可以采用長度標識符 .l, .w和.b : md .b, .w, .l address md.w 100000 00100000: 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: 2031 393a 3535 3a30
15、3429 0000 0000 0000 19:55:04).,35,內存操作命令(演示),Mm 修改內存,地址自動遞增。 mm .b, .w, .l address Mm 提供了一種互動修改存儲器內容的方法。它會顯示地址和當前值,然后提示用戶輸入。如果你輸入了一個合法的十六進制數(shù),這個新的值將會被寫入該地址。然后提示下一個地址。如果你沒有輸入任何值,只是按了一下回車,那么該地址的內容保持不變。如果想結束輸入,則輸入空格,然后回車。 = mm 100000 00100000: 27051956 ? 0 00100004: 50504342 ? AABBCCDD 00100008: 6f6f742
16、0 ? 01234567,36,Flash操作命令(演示),Flinfo 查看Flash扇區(qū)信息 Usage:Uboot Flinfo,37,Flash操作命令(演示),Protect Flash寫保護 打開或關閉扇區(qū)寫保護 用法: protect off all 關閉所有扇區(qū)的寫保護 protect on all 打開所有扇區(qū)的寫保護 protect off start end 關閉從start 到 end 扇區(qū)的寫保護(start為要關閉的第1個扇區(qū)的起始地址,end為要關閉的最后一個扇區(qū)的結束地址) protect on start end 打開從start 到 end 扇區(qū)的寫保護,3
17、8,Flash操作命令(演示),Erase 擦除flash扇區(qū) 用法: erase start end 擦除從start 到 end 的扇區(qū),start 為要擦除的第1個扇區(qū)的起始地址,end 為要擦除的最后一個扇區(qū)的結束地址(在使用cp命令向Nor型Flash寫入數(shù)據(jù)之前必須先使用erase 命令擦除flash,因為nor flash 按字節(jié)寫入時,無法寫入1,所以必須通過擦除來寫入1)。 例:erase 30000 1effff 。,39,Flash操作命令(演示),Cp 數(shù)據(jù)拷貝。 Cp .b, .w, .l saddress daddress len Cp 提供了一種內存與內存,內存與
18、Flash之間數(shù)據(jù)拷貝的方法。 例: cp.b 30008000 20000 100000 將內存地址0 x30008000處的數(shù)據(jù)(長度為0 x100000)拷貝到 地址0 x20000處(Flash中) cp.b 30800000 130000 70000 將內存地址0 x30800000處的數(shù)據(jù)(長度為0 x70000)拷貝到 地址0 x130000處(Flash中),40,程序執(zhí)行指令(演示),Go 執(zhí)行內存中的二進制代碼,一個簡單的跳轉到指定地址 go addr arg . - start application at address addr,passing arg as argu
19、ments,41,程序執(zhí)行指令,Bootm 執(zhí)行內存中的二進制代碼 bootm addr arg . - boot application image stored in memorypassing arguments arg .; when booting a Linux kernel, arg can be the address of an initrd image 要求二進制代碼為制定格式的。通常為mkimage處理過的二進制文件。,42,信息類指令,bdinfo 顯示開發(fā)板信息 bdinfo命令(簡寫為bdi)將在終端顯示諸如內存地址和大小、時鐘頻率、MAC地址等信息。這些信息在傳遞
20、給Linux內核一些參數(shù)時可能會用到。,43,技巧(演示),設置自動啟動 sbc2410=setenv bootcmd tftp 30008000 zImage ; go 30080000 sbc2410=saveenv,44,第四節(jié) Uboot工作流程,45,工作模式,大多數(shù)BootLoader都包含兩種不同的操作模式:“啟動模式” 和“下載模式”,這種區(qū)別僅對于開發(fā)人員才有意義,但從最終用戶的角度看,BootLoader的作用就是用來加載操作系統(tǒng),而不存在所謂的啟動模式與下載模式。,46,啟動模式,這種模式也稱為“自主” 模式,是指 BootLoader 從目標機上的某個固態(tài)存儲設備上將操
21、作系統(tǒng)自動加載到 RAM 中運行,整個過程并沒有用戶的介入。這種模式是 BootLoader 的正常工作模式,因此在嵌入式產品發(fā)布的時侯,BootLoader 顯然必須工作在這種模式下。,47,下載模式,在這種模式下,目標機上的 BootLoader 將通過串口或網絡等通信手段從主機(Host)下載文件 ,然后控制啟動流程。,48,流程,參考文檔uboot啟動流程,49,第五節(jié) Uboot 移植,50,單板配置,Q:為什么需要對Uboot做移植? A: BootLoader 依賴于具體的嵌入式板級設備的配置 Q:具體的板級設備的配置在哪里? A:單板的配置文件位于include/configs
22、/.h 用相應的BOARD定義代替(例:smdk2410.h),51,單板配置,Q:Uboot移植都需要做些什么? A:根據(jù)開發(fā)板硬件特性修改配置文件是其中最重要的一項工作 Q:配置文件中都有些什么信息? A:請看下頁范例 (smdk2410.h),52,Smdk2410.h,#define CONFIG_ARM920T1 /* CPU 類型*/ #define CONFIG_S3C2410 1 /* MCU類型 */ #define CONFIG_SMDK24101 /* 開發(fā)板型號 */,53,Smdk2410.h,#define USE_920T_MMU 1 /* 使用MMU */ #u
23、ndef CONFIG_USE_IRQ /* 不使用 IRQ/FIQ */ /* malloc 池大小*/ #define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) #define CFG_GBL_DATA_SIZE128 /* 數(shù)據(jù)段大小 128字節(jié) */,54,Smdk2410.h,#define CONFIG_DRIVER_CS89001 /* 一個 CS8900 網卡 */ #define CS8900_BASE0 x19000300 /* CS8900A 基地址 */ #define CONFIG_SERIAL1 1 /* 使用串口1 */ #
24、define CONFIG_BAUDRATE115200 /* 波特率 */,55,Smdk2410.h,#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | /*CFG_CMD_NAND |*/ /*CFG_CMD_EEPROM |*/ /*CFG_CMD_I2C |*/ /*CFG_CMD_USB |*/ CFG_CMD_REGINFO | CFG_CMD_DATE | CFG_CMD_ELF) /*定義使用的命令,可添加額外命令,如PING*/,56,Smdk2410.h,#define CONFIG_BOOTDELAY 3
25、/* 啟動等待時間 */ #define CONFIG_BOOTARGS root=ramfs devfs=mount console=ttySA0,9600“ /* 內核啟動參數(shù) */ #define CONFIG_ETHADDR08:00:3e:26:0a:5b #define CONFIG_NETMASK #define CONFIG_IPADDR 10 #define CONFIG_SERVERIP,57,Smdk2410.h,#define CONFIG_BOOTCOMMANDtftp; bootm #defineCFG_P
26、ROMPTSMDK2410 # #define PHYS_SDRAM_1 0 x30000000 /* SDRAM Bank #1 */ #define PHYS_SDRAM_1_SIZE0 x04000000 /* 64 MB */ #defineCFG_LOAD_ADDR 0 x33000000 /* 默認的加載地址 */ #define CFG_BAUDRATE_TABLE 9600, 19200, 38400, 57600, 115200 /*可用的波特率*/,58,Smdk2410.h,#define CONFIG_NR_DRAM_BANKS1 /* 有一片SDRAM */ #def
27、ine PHYS_FLASH_1 0 x00000000 /* FLASH 1的基地址 */ #define CFG_FLASH_BASEPHYS_FLASH_1 /*FLASH 的基地址*/,59,移植,Q: 怎么做Uboot的移植呢?,60,移植方法,移植U-Boot工作包括添加開發(fā)板硬件相關的文件、配置選項,然后配置編譯。,61,移植方法,開始移植之前,首先要分析U-Boot已經支持的開發(fā)板,選擇出硬件配置最接近的開發(fā)板。選擇的原則是,首先處理器相同,其次處理器體系結構相同,然后是以太網接口等外圍接口相同。 還要驗證一下這個參考開發(fā)板的U-Boot,至少能夠配置編譯通過。,62,移植范例,以SBC2410開發(fā)板為例,該開發(fā)板采用S3c2410芯片。而UBoot-1.1.4版本支持SMDK2410開發(fā)板,并且SMDK2410同樣采用S3c2410芯片,因此選取SMDK2410作為移植參考。,63,移植步驟,移植U-Boot的基本步驟如下: 在頂
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒師范高等??茖W校2026年度選聘備考題庫及一套完整答案詳解
- 廣東交通職業(yè)技術學院2025年公開招聘工作人員備考題庫及完整答案詳解一套
- 廣東匯源通集團有限公司2026年校園招聘備考題庫及一套答案詳解
- 廣東省惠州工程職業(yè)學院2026年公開招聘事業(yè)編制教師備考題庫及一套參考答案詳解
- 廣東省第二榮軍優(yōu)撫醫(yī)院2025年非編人員招聘備考題庫及一套答案詳解
- 廣東胥江文旅控股有限公司及下屬企業(yè)2026年公開招聘工作人員備考題庫帶答案詳解
- 廣州大學2026年第一次公開招聘合同制A崗工作人員備考題庫及答案詳解一套
- 廣州市天河區(qū)華景澤暉幼兒園2026年1月公開招聘編外聘用制專任教師備考題庫及一套完整答案詳解
- 廣州市天河區(qū)盈溪幼兒園2025年12月公開招聘編外教輔人員備考題庫完整參考答案詳解
- 廣州市白云區(qū)嘉禾街道綜合事務中心2025年合同制聘員招聘備考題庫完整參考答案詳解
- 2025腦機接口行業(yè)臨床試驗分析及神經康復市場與早期投資估值模型研究報告
- 江蘇省無錫市2024-2025學年五年級上學期數(shù)學期末試卷
- 電子商務售后服務標準
- 行政部給公司員工培訓
- 中考物理 題型06【電學實驗題】押題必做15題
- 《心臟瓣膜病診療指南》
- 企業(yè)安全生產責任制評估與改進方案
- 昆侖神話敘事的百年學術史重構與跨學科研究
- (必刷)湖南專升本《基礎護理學》考點精粹必做300題-含答案
- 隧道監(jiān)測與數(shù)據(jù)采集技術方案
- 總經辦辦公室工作總結及計劃
評論
0/150
提交評論