4-嵌入式系統(tǒng)的BootLoader技術(shù)_第1頁
4-嵌入式系統(tǒng)的BootLoader技術(shù)_第2頁
4-嵌入式系統(tǒng)的BootLoader技術(shù)_第3頁
4-嵌入式系統(tǒng)的BootLoader技術(shù)_第4頁
4-嵌入式系統(tǒng)的BootLoader技術(shù)_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、嵌入式系統(tǒng)開發(fā)原理與實(shí)踐陳文智 等 編著清華大學(xué)出版社清華大學(xué)出版社重點(diǎn)大學(xué)計(jì)算機(jī)專業(yè)系列教材重點(diǎn)大學(xué)計(jì)算機(jī)專業(yè)系列教材第四章 嵌入式系統(tǒng)的Boot Loader技術(shù) 1. Boot Loader程序的基本概念程序的基本概念 2. Boot Loader的典型結(jié)構(gòu)框架的典型結(jié)構(gòu)框架 3. Boot Loader實(shí)驗(yàn)實(shí)驗(yàn) 實(shí)驗(yàn)一實(shí)驗(yàn)一 Boot Loader應(yīng)用實(shí)驗(yàn)應(yīng)用實(shí)驗(yàn) 實(shí)驗(yàn)二實(shí)驗(yàn)二 U-BOOT的分析和移植的分析和移植1. Boot Loader程序的基本概念 一個(gè)嵌入式一個(gè)嵌入式 Linux 系統(tǒng)從軟件的角度看通常可以系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(gè)層次:分為四個(gè)層次: 1. 引導(dǎo)加載

2、程序。引導(dǎo)加載程序。 包括固化在固件包括固化在固件(firmware)中的中的 boot代碼代碼(可選可選),和,和 Boot Loader 兩大部分。兩大部分。 2. Linux 內(nèi)核。內(nèi)核。 特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。 3. 文件系統(tǒng)。文件系統(tǒng)。 包括根文件系統(tǒng)和建立于包括根文件系統(tǒng)和建立于 Flash 內(nèi)存設(shè)備之上文件系統(tǒng)。內(nèi)存設(shè)備之上文件系統(tǒng)。 通常用通常用 ram disk 來作為來作為 root fs。 4. 用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。 有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間可能

3、還會(huì)包括一個(gè)嵌入式圖有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間可能還會(huì)包括一個(gè)嵌入式圖形用戶界面。常用的嵌入式形用戶界面。常用的嵌入式 GUI 有:有:MicroWindows 和和 MiniGUI 懂。懂。 1. Boot Loader程序的基本概念 Boot Loader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序運(yùn)行的一段小程序 初始化硬件設(shè)備和建立內(nèi)存空間的映射圖初始化硬件設(shè)備和建立內(nèi)存空間的映射圖 將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境 Boot Lo

4、ader所支持的硬件環(huán)境所支持的硬件環(huán)境 Boot Loader 是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的 每種不同的每種不同的CPU體系結(jié)構(gòu)都有不同的體系結(jié)構(gòu)都有不同的Boot Loader Boot Loader的安裝地址的安裝地址 系統(tǒng)加電或復(fù)位后,所有的系統(tǒng)加電或復(fù)位后,所有的 CPU 通常都從某通常都從某個(gè)由個(gè)由 CPU 制造商預(yù)先安排的地址上取指令。制造商預(yù)先安排的地址上取指令。 系統(tǒng)的系統(tǒng)的Boot Loader程序通常安排在地址程序通常安排在地址0 x00000000 處處 Boot Loader相關(guān)的設(shè)備和機(jī)制相關(guān)的設(shè)備和機(jī)制 主機(jī)和目標(biāo)機(jī)之間一般通過串口建立連接

5、主機(jī)和目標(biāo)機(jī)之間一般通過串口建立連接 Boot Loader 軟件在執(zhí)行時(shí)通常會(huì)通過串口來軟件在執(zhí)行時(shí)通常會(huì)通過串口來進(jìn)行進(jìn)行 I/O 超級(jí)終端超級(jí)終端 Boot Loader的啟動(dòng)過程的啟動(dòng)過程 通常多階段的通常多階段的 Boot Loader 能提供更為復(fù)雜的能提供更為復(fù)雜的功能,以及更好的可移植性功能,以及更好的可移植性 分為 stage 1 和 stage 2 兩部分 Boot Loader的操作模式的操作模式 啟動(dòng)加載模式啟動(dòng)加載模式 下載模式下載模式 Boot Loader與主機(jī)之間的通信設(shè)備及協(xié)議與主機(jī)之間的通信設(shè)備及協(xié)議 最常見的是串口,協(xié)議最常見的是串口,協(xié)議xmodem/y

6、modem/zmodem 以太網(wǎng),協(xié)議以太網(wǎng),協(xié)議tftp 常用嵌入式常用嵌入式Bootloader U-boot:通用引導(dǎo)程序通用引導(dǎo)程序, ARM/XSCALE 平臺(tái)平臺(tái) Blob: LART 等硬件平臺(tái)的引導(dǎo)程序等硬件平臺(tái)的引導(dǎo)程序, StrongARM RedBoot:基于基于 eCos 的引導(dǎo)程序的引導(dǎo)程序 2. Boot Loader的典型結(jié)構(gòu)框架 操作系統(tǒng)的角度看,操作系統(tǒng)的角度看,Boot Loader的總目標(biāo)的總目標(biāo)就是正確地調(diào)用內(nèi)核來執(zhí)行就是正確地調(diào)用內(nèi)核來執(zhí)行 大多數(shù)大多數(shù)Boot Loader都分為階段都分為階段1和階段和階段2兩大部分兩大部分 階段階段1實(shí)現(xiàn)依賴于實(shí)現(xiàn)

7、依賴于CPU體系結(jié)構(gòu)的代碼體系結(jié)構(gòu)的代碼 (匯編匯編) 階段階段2實(shí)現(xiàn)一些復(fù)雜的功能實(shí)現(xiàn)一些復(fù)雜的功能 (C語言)語言)2.1 Boot Loader階段1介紹 Boot Loader 的階段的階段1通常包括以下步驟:通常包括以下步驟: 1)硬件設(shè)備初始化。)硬件設(shè)備初始化。 屏蔽所有的中斷屏蔽所有的中斷 設(shè)置設(shè)置CPU的速度和時(shí)鐘頻率的速度和時(shí)鐘頻率 RAM初始化初始化 初始化初始化LED 關(guān)閉關(guān)閉CPU內(nèi)部指令數(shù)據(jù)內(nèi)部指令數(shù)據(jù)Cache 2)為加載階段為加載階段2準(zhǔn)備準(zhǔn)備RAM空間空間 除了階段除了階段2可執(zhí)行映象的大小外,還必須把堆可執(zhí)行映象的大小外,還必須把堆??臻g也考慮進(jìn)來?xiàng)?臻g也考

8、慮進(jìn)來 一般一般1M就夠了就夠了 Blob是是0 xc0200000開始的開始的1MB空間空間 推薦:推薦:(RamEnd 1MB, RamEnd) 標(biāo)記標(biāo)記 Stage2_end = stage2_start + stage2_size2)為加載階段)為加載階段2準(zhǔn)備準(zhǔn)備RAM空間空間 必須確保所安排的地址范圍的的確確是可讀寫的必須確保所安排的地址范圍的的確確是可讀寫的RAM空間空間1. 先保存先保存memory page一開始兩個(gè)字的內(nèi)容一開始兩個(gè)字的內(nèi)容2. 向這兩個(gè)字中寫入任意的數(shù)字向這兩個(gè)字中寫入任意的數(shù)字3. 立即將這兩個(gè)字讀回,若不是,則說明不是一段有效立即將這兩個(gè)字讀回,若不是

9、,則說明不是一段有效的的RAM空間空間4. 再向這兩個(gè)字寫入任意數(shù)字再向這兩個(gè)字寫入任意數(shù)字5. 立即將這兩個(gè)字讀回。若不是,則說明不是有效的立即將這兩個(gè)字讀回。若不是,則說明不是有效的RAM空間空間6. 恢復(fù)這兩個(gè)字的原始內(nèi)容,測(cè)試完畢?;謴?fù)這兩個(gè)字的原始內(nèi)容,測(cè)試完畢。 3)拷貝階段)拷貝階段2到到RAM中中 復(fù)制時(shí)要確定兩點(diǎn):復(fù)制時(shí)要確定兩點(diǎn): 階段階段2的可執(zhí)行映像在固態(tài)存儲(chǔ)設(shè)備的存放其的可執(zhí)行映像在固態(tài)存儲(chǔ)設(shè)備的存放其實(shí)地址和終止地址實(shí)地址和終止地址 RAM空間的起始地址空間的起始地址 4)設(shè)置堆棧指針)設(shè)置堆棧指針sp 設(shè)置堆棧指針是為了執(zhí)行設(shè)置堆棧指針是為了執(zhí)行C語言代碼做好準(zhǔn)備

10、語言代碼做好準(zhǔn)備 通常可以設(shè)置為通??梢栽O(shè)置為sp = stage2_end 4 此時(shí),此時(shí), Boot Loader 的的 階段階段2 可執(zhí)行映象剛可執(zhí)行映象剛被拷貝到被拷貝到 RAM 空間時(shí)的系統(tǒng)內(nèi)存布局,如下空間時(shí)的系統(tǒng)內(nèi)存布局,如下圖:圖: 5)跳轉(zhuǎn)到階段)跳轉(zhuǎn)到階段2的的C入口點(diǎn)入口點(diǎn) 修改修改PC寄存器為合適地址來實(shí)現(xiàn)寄存器為合適地址來實(shí)現(xiàn)2.2 Boot Loader階段2介紹 trampoline(彈簧床)的概念 進(jìn)入main() 函數(shù) 用匯編語言寫一段trampoline 小程序 在 trampoline 匯編小程序中用 CPU 跳轉(zhuǎn)指令跳入 main() 函數(shù)中去執(zhí)行;而當(dāng)

11、 main() 函數(shù)返回時(shí),CPU 執(zhí)行路徑顯然再次回到 trampoline 程序 .text.globl _trampoline_trampoline:blmain/* if main ever returns we just call it again */b _trampoline2.2 Boot Loader階段2介紹 1)初始化本階段要使用到的硬件設(shè)備)初始化本階段要使用到的硬件設(shè)備 初始化至少一個(gè)串口,以便和終端用戶進(jìn)行初始化至少一個(gè)串口,以便和終端用戶進(jìn)行I/O輸出信息輸出信息 初始化計(jì)時(shí)器等初始化計(jì)時(shí)器等 2)檢測(cè)系統(tǒng)的內(nèi)存映射)檢測(cè)系統(tǒng)的內(nèi)存映射 所謂內(nèi)存映射就是指在整個(gè)所

12、謂內(nèi)存映射就是指在整個(gè)4GB物理地址空間物理地址空間中有哪些地址范圍被分配用來尋址系統(tǒng)的中有哪些地址范圍被分配用來尋址系統(tǒng)的RAM單元單元 例如,例如,SA1100CPU中,從中,從0 xC0000000開始開始的的512M 但是,具體嵌入式系統(tǒng)并不實(shí)現(xiàn)全部預(yù)留地址,但是,具體嵌入式系統(tǒng)并不實(shí)現(xiàn)全部預(yù)留地址,可能僅用可能僅用64M 因此,必須檢測(cè)整個(gè)系統(tǒng)的內(nèi)存映射情況因此,必須檢測(cè)整個(gè)系統(tǒng)的內(nèi)存映射情況 2)檢測(cè)系統(tǒng)的內(nèi)存映射)檢測(cè)系統(tǒng)的內(nèi)存映射 可以用如下數(shù)據(jù)結(jié)構(gòu)來描述可以用如下數(shù)據(jù)結(jié)構(gòu)來描述RAM地址空間中的地址空間中的一段連續(xù)的地址范圍:一段連續(xù)的地址范圍: typedeftypedef

13、 structstruct memory_area_structmemory_area_struct u32 start; /u32 start; /* * 內(nèi)存空間的基址內(nèi)存空間的基址 * */ /u32 size; /u32 size; /* * 內(nèi)存空間的大小內(nèi)存空間的大小 * */ /intint used; / used; /* * 1 1已實(shí)現(xiàn)已實(shí)現(xiàn)0 0未實(shí)現(xiàn)未實(shí)現(xiàn)* */ / memory_area_tmemory_area_t; ; 2)檢測(cè)系統(tǒng)的內(nèi)存映射)檢測(cè)系統(tǒng)的內(nèi)存映射 整個(gè)整個(gè)CPU預(yù)留的預(yù)留的RAM地址可用數(shù)組表示地址可用數(shù)組表示 memory_area_tmemo

14、ry_area_t memory_mapNUM_MEM_AREASmemory_mapNUM_MEM_AREAS= = 0 (NUM_MEM_AREAS-1)= 0 (NUM_MEM_AREAS-1)= .start = 0, .start = 0, .size = 0; .size = 0; .used = 0 .used = 0 , ,; 2)檢測(cè)系統(tǒng)的內(nèi)存映射)檢測(cè)系統(tǒng)的內(nèi)存映射 內(nèi)存映射的檢測(cè)內(nèi)存映射的檢測(cè) memory_area_tmemory_area_t memory_mapNUM_MEM_AREASmemory_mapNUM_MEM_AREAS= = 0 (NUM_MEM_AR

15、EAS-1)= 0 (NUM_MEM_AREAS-1)= .start = 0, .start = 0, .size = 0; .size = 0; .used = 0 .used = 0 , ,; 3)加載內(nèi)核映像和根文件系統(tǒng)映像)加載內(nèi)核映像和根文件系統(tǒng)映像 規(guī)劃內(nèi)存占用的布局規(guī)劃內(nèi)存占用的布局 內(nèi)核映像所占用的內(nèi)存范圍內(nèi)核映像所占用的內(nèi)存范圍 一般是一般是MEM_START+0X8000到約到約1MB的空間的空間 根文件系統(tǒng)所占用的內(nèi)存范圍根文件系統(tǒng)所占用的內(nèi)存范圍 一般是一般是MEM_START0 x100000開始的地方開始的地方 3)加載內(nèi)核映像和根文件系統(tǒng)映像)加載內(nèi)核映像和根文

16、件系統(tǒng)映像 從從Flash上拷貝上拷貝 由于像由于像ARM這樣的嵌入式這樣的嵌入式CPU通常都是在統(tǒng)一內(nèi)存地址空間中尋通常都是在統(tǒng)一內(nèi)存地址空間中尋址址FLASH等固態(tài)存儲(chǔ)設(shè)備,因此從閃存上讀取數(shù)據(jù)與從等固態(tài)存儲(chǔ)設(shè)備,因此從閃存上讀取數(shù)據(jù)與從RAM內(nèi)存內(nèi)存單元中讀取數(shù)據(jù)并沒有什么不同單元中讀取數(shù)據(jù)并沒有什么不同 while (count)while (count) * *destdest+ = + = * *srcsrc+;+; count -= 4; count -= 4; 4)設(shè)置內(nèi)核的啟動(dòng)參數(shù) 標(biāo)記列表(tagged list)的形式來傳遞啟動(dòng)參數(shù),啟動(dòng)參數(shù)標(biāo)記列表以標(biāo)記ATAG_COR

17、E開始,以標(biāo)記ATAG_NONE結(jié)束 嵌入式Linux系統(tǒng)中,通常需要由Boot Loader設(shè)置的常見啟動(dòng)參數(shù)有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 例:設(shè)置ATAG_CORE的代碼如下:paramsparams = ( = (structstruct tag tag * *)BOOT_PARAMS;)BOOT_PARAMS;paramsparams-hdr.taghdr.tag = ATAG_CORE; = ATAG_CORE;paramsparams-hdr.sizehdr.size = = tag_size(

18、tag_coretag_size(tag_core););paramsparams-u.core.flagsu.core.flags = 0; = 0;paramsparams-u.core.pagesizeu.core.pagesize = 0; = 0;paramsparams-u.core.rootdevu.core.rootdev = 0; = 0;paramsparams = = tag_next(paramstag_next(params););BOOT_PARAMS 表示內(nèi)核啟動(dòng)參數(shù)在內(nèi)存中的起始基地址,表示內(nèi)核啟動(dòng)參數(shù)在內(nèi)存中的起始基地址,指針指針params是一個(gè)是一個(gè)str

19、uct tag類型的指針。宏類型的指針。宏tag_next()將以將以指向當(dāng)前標(biāo)記的指針為參數(shù),計(jì)算出當(dāng)前標(biāo)記的下一個(gè)標(biāo)記的指向當(dāng)前標(biāo)記的指針為參數(shù),計(jì)算出當(dāng)前標(biāo)記的下一個(gè)標(biāo)記的起始地址起始地址 initrd initrd 的英文含義是的英文含義是 boot loader initialized RAM disk,就是由,就是由 boot loader 初始化的內(nèi)存盤。初始化的內(nèi)存盤。 在在 linux內(nèi)核啟動(dòng)前,內(nèi)核啟動(dòng)前, boot loader 會(huì)將存儲(chǔ)介會(huì)將存儲(chǔ)介質(zhì)中的質(zhì)中的 initrd 文件加載到內(nèi)存,內(nèi)核啟動(dòng)時(shí)會(huì)在文件加載到內(nèi)存,內(nèi)核啟動(dòng)時(shí)會(huì)在訪問真正的根文件系統(tǒng)前先訪問該內(nèi)存中

20、的訪問真正的根文件系統(tǒng)前先訪問該內(nèi)存中的 initrd 文件系統(tǒng)。文件系統(tǒng)。 在在 boot loader 配置了配置了 initrd 的情況下,內(nèi)核啟的情況下,內(nèi)核啟動(dòng)被分成了兩個(gè)階段,第一階段先執(zhí)行動(dòng)被分成了兩個(gè)階段,第一階段先執(zhí)行 initrd 文文件系統(tǒng)中的件系統(tǒng)中的某個(gè)文件某個(gè)文件,完成加載驅(qū)動(dòng)模塊等任,完成加載驅(qū)動(dòng)模塊等任務(wù),第二階段才會(huì)執(zhí)行真正的根文件系統(tǒng)中的務(wù),第二階段才會(huì)執(zhí)行真正的根文件系統(tǒng)中的 /sbin/init 進(jìn)程。進(jìn)程。 5)調(diào)用內(nèi)核)調(diào)用內(nèi)核 CPU寄存器的設(shè)置:寄存器的設(shè)置: R00; R1機(jī)器類型機(jī)器類型ID;關(guān)于機(jī)器類型號(hào),可以參見:;關(guān)于機(jī)器類型號(hào),可以參

21、見: linux/arch/arm/tools/mach-types。 R2啟動(dòng)參數(shù)標(biāo)記列表在啟動(dòng)參數(shù)標(biāo)記列表在RAM中起始基地址;中起始基地址; CPU 模式:模式: 必須禁止中斷(必須禁止中斷(IRQs和和FIQs);); CPU必須必須SVC模式;模式; Cache和和MMU的設(shè)置:的設(shè)置: MMU必須關(guān)閉;必須關(guān)閉; 指令指令Cache可以打開也可以關(guān)閉;可以打開也可以關(guān)閉; 數(shù)據(jù)數(shù)據(jù)Cache必須關(guān)閉;必須關(guān)閉; 5)調(diào)用內(nèi)核)調(diào)用內(nèi)核 C語言調(diào)用方式語言調(diào)用方式 void (void (* *theKernel)(inttheKernel)(int zero, zero, inti

22、nt arch, u32 arch, u32 params_addrparams_addr) = (void () = (void (* *)()(intint, , intint, u32) , u32) KERNEL_RAM_BASE;KERNEL_RAM_BASE; theKernel(0, ARCH_NUMBER, theKernel(0, ARCH_NUMBER, (u32)kernel_params_start);(u32)kernel_params_start);2.3 關(guān)于串口終端 向串口終端打印信息也是一個(gè)非常重要而向串口終端打印信息也是一個(gè)非常重要而又有效的調(diào)試手段又有效的

23、調(diào)試手段 如果碰到串口終端顯示亂碼或根本沒有顯如果碰到串口終端顯示亂碼或根本沒有顯示的問題,可能是因?yàn)椋菏镜膯栴},可能是因?yàn)椋?Boot Loader 對(duì)串口的初始化設(shè)置不正確對(duì)串口的初始化設(shè)置不正確 運(yùn)行在運(yùn)行在host 端的終端仿真程序?qū)Υ诘脑O(shè)置不正確端的終端仿真程序?qū)Υ诘脑O(shè)置不正確 Boot Loader 啟動(dòng)內(nèi)核后卻無法看到內(nèi)核啟動(dòng)內(nèi)核后卻無法看到內(nèi)核的啟動(dòng)輸出信息:的啟動(dòng)輸出信息: 確認(rèn)內(nèi)核在編譯時(shí)是否配置了對(duì)串口終端的支持,并確認(rèn)內(nèi)核在編譯時(shí)是否配置了對(duì)串口終端的支持,并配置了正確的串口驅(qū)動(dòng)程序配置了正確的串口驅(qū)動(dòng)程序 Boot Loader 對(duì)串口的初始化設(shè)置是否和內(nèi)核對(duì)串口

24、對(duì)串口的初始化設(shè)置是否和內(nèi)核對(duì)串口的初始化設(shè)置一致的初始化設(shè)置一致 還要確認(rèn)還要確認(rèn) Boot Loader 所用的內(nèi)核基地址必須和內(nèi)核所用的內(nèi)核基地址必須和內(nèi)核映像在編譯時(shí)所用的運(yùn)行基地址一致映像在編譯時(shí)所用的運(yùn)行基地址一致 3. Boot Loader實(shí)驗(yàn)實(shí)驗(yàn) 實(shí)驗(yàn)一 Boot Loader應(yīng)用實(shí)驗(yàn) 實(shí)驗(yàn)二 U-BOOT的分析和移植實(shí)驗(yàn)一 Boot Loader應(yīng)用實(shí)驗(yàn)(1) 燒寫XsBase255的BootLoader 編譯生成XsBase255專用的JTAG程序 Jflash-XSBase255 編譯生成XSBase的Boot Loader x-boot255 正確連線 利用JTAG燒

25、寫B(tài)ootLoader rootXSBase JTAG# ./Jflash-XSBase255 x-boot255實(shí)驗(yàn)一 Boot Loader應(yīng)用實(shí)驗(yàn)(2) 熟悉使用 Bootloader 指令,執(zhí)行各個(gè)指令后將其結(jié)果與下表的 description進(jìn)行比較 UsageHelpDescription對(duì)各個(gè)指令的簡(jiǎn)單的說明。ArgumentsNoneExampleX-HYPER255 HelpUsageReload kernel/ramdiskDescription將Flash中紀(jì)錄的image復(fù)制到SDRAM為了復(fù)制 kernel image到 SDRAM, Autoboot時(shí)自動(dòng)執(zhí)行Arg

26、uments將Kernel flash的 kernel image復(fù)制到 SDRAM 0 xa0008000將Ramdisk flash的 ramdisk復(fù)制到 SDRAM 0 xa0800000ExampleX-HYPER255 reload kernelUsageTftp file loader/kernel/root/ramdiskTftp file addrDescription通過Ethernet將 Host的映像文件下載到SDRAM中ArgumentsLoader將接收到的文件儲(chǔ)存到loader的SDRAM 0 xa0000000Kernel將接收到的文件儲(chǔ)存到kernel的 SD

27、RAM 0 xa0008000Root 將接收到的文件儲(chǔ)存到 0 xa0000000Ramdisk 將接收到的文件儲(chǔ)存到 0 xA0800000。Addr SDRAM上紀(jì)錄接收到的文件的地址ExampleX-HYPER255 tftp zImage kernelX-HYPER255 tftp zImage 0 xa0000000UsageFlash loader/kernel/root/ramdiskFlash dest src lenDescription將SDRAM上的數(shù)據(jù)儲(chǔ)存到flash的相應(yīng)地址ArgumentsLoader-將SDRAM的loader 0 xa00000000儲(chǔ)存到f

28、lash的0 x0地址Kernel-將SDRAM的Kernel 0 xa00080000儲(chǔ)存到flash的0 xc0000 地址Root-將SDRAM的root 0 xa0000000儲(chǔ)存到flash的0 x1c0000地址Ramdisk-將SDRAM的ramdisk 0 xA0800000儲(chǔ)存到Flash的0 x1c00 00地址Dest-儲(chǔ)存到flash上的地址Src-原來的數(shù)據(jù)所在地址Len-復(fù)制的長(zhǎng)度ExampleXSBASE255 flash kernelXSBASE255 flash 0 xc0000 0 xa0000000 0 x100000UsageBootBoot opt1

29、opt2Boot addr opt1 opt2Description驅(qū)動(dòng)SDRAM上的 kernel通過相應(yīng) arguments 驅(qū)動(dòng) 或者驅(qū)動(dòng)相應(yīng)地指的kernel。ArgumentsOpt1 kernel option(Only 0)Opt2 machine type( X-Hyer255 : 200)Addr kernel image addressExampleXSBASE255 bootXSBASE255 boot 0 200XSBASE255 boot 0 xa0008000 0 200實(shí)驗(yàn)二 U-BOOT的分析和移植(1) U-BOOT的特點(diǎn) 在線讀寫Flash、DOC、IDE、IIC、EEROM、RT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論