第六講(part1)--Bootloader技術(shù)分析_第1頁(yè)
第六講(part1)--Bootloader技術(shù)分析_第2頁(yè)
第六講(part1)--Bootloader技術(shù)分析_第3頁(yè)
第六講(part1)--Bootloader技術(shù)分析_第4頁(yè)
第六講(part1)--Bootloader技術(shù)分析_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 Bootloader技術(shù)分析技術(shù)分析嵌入式軟件系統(tǒng)嵌入式軟件系統(tǒng) n嵌入式操作系統(tǒng)已經(jīng)得到廣泛應(yīng)用嵌入式操作系統(tǒng)已經(jīng)得到廣泛應(yīng)用 n帶操作系統(tǒng)的嵌入式軟件體系一般分為:帶操作系統(tǒng)的嵌入式軟件體系一般分為:1.引導(dǎo)加載程序引導(dǎo)加載程序 2.操作系統(tǒng)內(nèi)核操作系統(tǒng)內(nèi)核 3.文件系統(tǒng)(可選)文件系統(tǒng)(可選) 4.用戶應(yīng)用程序用戶應(yīng)用程序 PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序 nBIOS+MBR 1.BIOS的本質(zhì)是一段固件程序(的本質(zhì)是一段固件程序(Firmware) 2.MBR (master boot record主引導(dǎo)記錄)是磁主引導(dǎo)記錄)是磁盤(pán)上的一段分區(qū),位于磁盤(pán)的第一個(gè)扇區(qū),大小盤(pán)上的

2、一段分區(qū),位于磁盤(pán)的第一個(gè)扇區(qū),大小為為512B,包含了磁盤(pán)的分區(qū)信息以及系統(tǒng)引導(dǎo),包含了磁盤(pán)的分區(qū)信息以及系統(tǒng)引導(dǎo)代碼,在單一的代碼,在單一的 MBR 中只能存儲(chǔ)一個(gè)操作系統(tǒng)中只能存儲(chǔ)一個(gè)操作系統(tǒng)的引導(dǎo)記錄,當(dāng)需要多個(gè)操作系統(tǒng)時(shí)就會(huì)出現(xiàn)問(wèn)的引導(dǎo)記錄,當(dāng)需要多個(gè)操作系統(tǒng)時(shí)就會(huì)出現(xiàn)問(wèn)題,需要更靈活的引導(dǎo)加載程序,比如題,需要更靈活的引導(dǎo)加載程序,比如Lilo和和Grub 。PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序n主引導(dǎo)記錄本身要包含兩類內(nèi)容主引導(dǎo)記錄本身要包含兩類內(nèi)容 部分部分(或全部)引導(dǎo)加載程序以及分區(qū)表(其中(或全部)引導(dǎo)加載程序以及分區(qū)表(其中包含有關(guān)于介質(zhì)其余部分如何劃分為分區(qū)的包含有

3、關(guān)于介質(zhì)其余部分如何劃分為分區(qū)的信息)。信息)。n當(dāng)當(dāng) BIOS 引導(dǎo)時(shí),它會(huì)尋找硬盤(pán)驅(qū)動(dòng)器第一引導(dǎo)時(shí),它會(huì)尋找硬盤(pán)驅(qū)動(dòng)器第一個(gè)扇區(qū)(個(gè)扇區(qū)(MBR)中存儲(chǔ)的數(shù)據(jù);)中存儲(chǔ)的數(shù)據(jù);BIOS 使用使用存儲(chǔ)在存儲(chǔ)在 MBR 中的數(shù)據(jù)激活引導(dǎo)加載程序。中的數(shù)據(jù)激活引導(dǎo)加載程序。 PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序n由于由于BIOS只能訪問(wèn)很少量的數(shù)據(jù),所以大部分引導(dǎo)只能訪問(wèn)很少量的數(shù)據(jù),所以大部分引導(dǎo)加載程序分兩個(gè)階段進(jìn)行引導(dǎo)。在引導(dǎo)的第一個(gè)階加載程序分兩個(gè)階段進(jìn)行引導(dǎo)。在引導(dǎo)的第一個(gè)階段中,段中,BIOS引導(dǎo)一部分引導(dǎo)加載程序,即引導(dǎo)一部分引導(dǎo)加載程序,即初始程序初始程序加載程序加載程序(in

4、itial program loader,IPL)。)。IPL 查詢分區(qū)表,從而能夠加載位于不同介質(zhì)上任意位查詢分區(qū)表,從而能夠加載位于不同介質(zhì)上任意位置的數(shù)據(jù)。通過(guò)這步操作來(lái)定位第二階段引導(dǎo)加載置的數(shù)據(jù)。通過(guò)這步操作來(lái)定位第二階段引導(dǎo)加載程序(其中包含加載程序的其余部分)。程序(其中包含加載程序的其余部分)。 n第二階段引導(dǎo)加載程序是引導(dǎo)加載程序的主體,很第二階段引導(dǎo)加載程序是引導(dǎo)加載程序的主體,很多人認(rèn)為這才是引導(dǎo)加載程序的真正部分。它包含多人認(rèn)為這才是引導(dǎo)加載程序的真正部分。它包含有加載程序更需要磁盤(pán)空間的部分,比如用戶界面有加載程序更需要磁盤(pán)空間的部分,比如用戶界面和內(nèi)核引導(dǎo)程序。從簡(jiǎn)

5、單的命令行到繪聲繪色的和內(nèi)核引導(dǎo)程序。從簡(jiǎn)單的命令行到繪聲繪色的 GUI,這些用戶界面的范圍很廣泛。,這些用戶界面的范圍很廣泛。 PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序n引導(dǎo)加載程序通常配置為兩種方式之一:要么是作為主引導(dǎo)加載程序通常配置為兩種方式之一:要么是作為主引導(dǎo)加載程序(引導(dǎo)加載程序(primary boot loader),要么是作為),要么是作為二級(jí)引導(dǎo)加載程序(二級(jí)引導(dǎo)加載程序(secondary boot loader)。主引)。主引導(dǎo)程序是安裝在導(dǎo)程序是安裝在 MBR上的第一階段引導(dǎo)加載程序(見(jiàn)上的第一階段引導(dǎo)加載程序(見(jiàn)先前的描述)。二級(jí)引導(dǎo)加載程序先前的描述)。二級(jí)引導(dǎo)加

6、載程序 是安裝在可引導(dǎo)分區(qū)是安裝在可引導(dǎo)分區(qū)的第一階段引導(dǎo)加載程序,必須在的第一階段引導(dǎo)加載程序,必須在 MBR 上安裝單獨(dú)的上安裝單獨(dú)的引導(dǎo)加載程序,并配置它將控制權(quán)轉(zhuǎn)交給二級(jí)引導(dǎo)加載引導(dǎo)加載程序,并配置它將控制權(quán)轉(zhuǎn)交給二級(jí)引導(dǎo)加載程序。程序。 n很多很多Linux引導(dǎo)加載程序特別實(shí)用,因?yàn)樗鼈兲峁┝瞬灰龑?dǎo)加載程序特別實(shí)用,因?yàn)樗鼈兲峁┝瞬煌潭鹊慕换?,比如高?jí)的同程度的交互,比如高級(jí)的 GUI 和加密的口令,以及和加密的口令,以及通過(guò)選擇操作系統(tǒng)進(jìn)行引導(dǎo)的能力。這樣,可以在具有通過(guò)選擇操作系統(tǒng)進(jìn)行引導(dǎo)的能力。這樣,可以在具有多個(gè)物理磁盤(pán)的同一機(jī)器上共存多個(gè)操作系統(tǒng),只使用多個(gè)物理磁盤(pán)的同一

7、機(jī)器上共存多個(gè)操作系統(tǒng),只使用一臺(tái)機(jī)器就可同時(shí)擁有一臺(tái)機(jī)器就可同時(shí)擁有Linux和和Windows。 PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序nGRUB 和和 LILO 是在基于是在基于Intel的系統(tǒng)上引導(dǎo)的系統(tǒng)上引導(dǎo)Linux最常用的方法。作為操作系統(tǒng)裝載程序,它們僅使最常用的方法。作為操作系統(tǒng)裝載程序,它們僅使用在計(jì)算機(jī)硬件中內(nèi)建的基本用在計(jì)算機(jī)硬件中內(nèi)建的基本 I/O 系統(tǒng)(或系統(tǒng)(或 BIOS)。)。n在多數(shù)基于在多數(shù)基于 Intel 的計(jì)算機(jī)中,的計(jì)算機(jī)中,GRUB 和和 LILO 要要接受由接受由 BIOS 所強(qiáng)加的限制。例如,多數(shù)所強(qiáng)加的限制。例如,多數(shù) BIOSes 無(wú)法進(jìn)入兩

8、個(gè)以上的硬盤(pán),而且它們無(wú)法訪問(wèn)任一無(wú)法進(jìn)入兩個(gè)以上的硬盤(pán),而且它們無(wú)法訪問(wèn)任一驅(qū)動(dòng)器上在超越柱面驅(qū)動(dòng)器上在超越柱面 1023 以上所貯存的數(shù)據(jù)。值以上所貯存的數(shù)據(jù)。值得注意的是,某些新的得注意的是,某些新的 BIOSes 沒(méi)有這些限制。沒(méi)有這些限制。 PC 機(jī)的引導(dǎo)加載程序機(jī)的引導(dǎo)加載程序n所有所有 GRUB 和和 LILO 需要在引導(dǎo)期間訪問(wèn)的數(shù)據(jù)需要在引導(dǎo)期間訪問(wèn)的數(shù)據(jù) (包括(包括 Linux 內(nèi)核)內(nèi)核)位于位于 /boot 目錄中。目錄中。/boot 目錄既可以是一個(gè)單獨(dú)的小分區(qū),也可能會(huì)目錄既可以是一個(gè)單獨(dú)的小分區(qū),也可能會(huì)駐留在根分區(qū)駐留在根分區(qū) (/)上。上。 在任一情況下,如

9、果要使用在任一情況下,如果要使用 GRUB 或或 LILO 來(lái)引來(lái)引導(dǎo)導(dǎo)Linux系統(tǒng),系統(tǒng), /boot 所駐留的分區(qū)一定要遵守以下條例:所駐留的分區(qū)一定要遵守以下條例: n1)在前兩個(gè))在前兩個(gè)IDE 驅(qū)動(dòng)器上:如果有兩個(gè)驅(qū)動(dòng)器上:如果有兩個(gè)IDE(或(或 EIDE)驅(qū)動(dòng)器,)驅(qū)動(dòng)器, /boot 必須要位于其中之一,必須要位于其中之一, 兩個(gè)驅(qū)動(dòng)器的限制也包括任何在主兩個(gè)驅(qū)動(dòng)器的限制也包括任何在主IDE控控制器上的制器上的IDE光盤(pán)驅(qū)動(dòng)器。因此,如果在主控制器上有一個(gè)光盤(pán)驅(qū)動(dòng)器。因此,如果在主控制器上有一個(gè) IDE 硬盤(pán),硬盤(pán),和一個(gè)光盤(pán)驅(qū)動(dòng)器,和一個(gè)光盤(pán)驅(qū)動(dòng)器, /boot 必須僅能位

10、于第一個(gè)硬盤(pán),即便你在次必須僅能位于第一個(gè)硬盤(pán),即便你在次IDE控制器上另有硬盤(pán)??刂破魃狭碛杏脖P(pán)。 n2)在第一個(gè))在第一個(gè) IDE 或第一個(gè)或第一個(gè) SCSI 驅(qū)動(dòng)器上:如果你有一個(gè)驅(qū)動(dòng)器上:如果你有一個(gè) IDE(或(或 EIDE)驅(qū)動(dòng)器以及一個(gè)或更多)驅(qū)動(dòng)器以及一個(gè)或更多 SCSI 驅(qū)動(dòng)器,驅(qū)動(dòng)器,/boot 必須位于必須位于IDE 驅(qū)動(dòng)驅(qū)動(dòng)器上或器上或 ID 為為 0 的的 SCSI 驅(qū)動(dòng)器上。驅(qū)動(dòng)器上。n3)在前兩個(gè))在前兩個(gè) SCSI 驅(qū)動(dòng)器上:如果你只有驅(qū)動(dòng)器上:如果你只有 SCSI 硬盤(pán),硬盤(pán),/boot 必須位于必須位于 ID 為為 0 或或 1 的驅(qū)動(dòng)器上。的驅(qū)動(dòng)器上。n4

11、)分區(qū)完全在柱面)分區(qū)完全在柱面 1023 之下:無(wú)論是以上哪一種配置,容有之下:無(wú)論是以上哪一種配置,容有 /boot 的分區(qū)必須要全部位于柱面的分區(qū)必須要全部位于柱面 1023 之下。如果容有之下。如果容有 /boot 的分區(qū)位于柱的分區(qū)位于柱面面 1023 的兩側(cè),所面對(duì)的情形可能是,的兩側(cè),所面對(duì)的情形可能是,GRUB 和和 LILO 最初會(huì)起作用最初會(huì)起作用 (因?yàn)樗斜匦璧男畔⒍嘉挥谥妫ㄒ驗(yàn)樗斜匦璧男畔⒍嘉挥谥?1023 之下),之下), 但是如果一個(gè)新內(nèi)核但是如果一個(gè)新內(nèi)核被載入后駐留在柱面被載入后駐留在柱面 1023 之上的話,它們將會(huì)失敗。之上的話,它們將會(huì)失敗。 PC

12、 機(jī)的機(jī)的Linux引導(dǎo)加載過(guò)程引導(dǎo)加載過(guò)程 n啟動(dòng)過(guò)程啟動(dòng)過(guò)程 1.BIOS完成硬件檢測(cè)、資源分配,然后將引導(dǎo)代完成硬件檢測(cè)、資源分配,然后將引導(dǎo)代碼(碼(512B)讀入內(nèi)存)讀入內(nèi)存0 x7c00中,然后跳轉(zhuǎn)到中,然后跳轉(zhuǎn)到0 x7c00運(yùn)行運(yùn)行(將將CPU控制權(quán)交給引導(dǎo)程序控制權(quán)交給引導(dǎo)程序) 2.引導(dǎo)代碼將自己搬移到引導(dǎo)代碼將自己搬移到0 x90000,再跳轉(zhuǎn)到該,再跳轉(zhuǎn)到該地址執(zhí)行,然后將磁盤(pán)上的地址執(zhí)行,然后將磁盤(pán)上的setup和內(nèi)核映像讀和內(nèi)核映像讀入內(nèi)存入內(nèi)存0 x90200,并跳轉(zhuǎn)到,并跳轉(zhuǎn)到setup運(yùn)行運(yùn)行 3.在在setup中完成處理器設(shè)置、解壓縮等操作,將中完成處理器

13、設(shè)置、解壓縮等操作,將內(nèi)核解壓到一個(gè)固定地址,然后跳轉(zhuǎn)到此地址運(yùn)內(nèi)核解壓到一個(gè)固定地址,然后跳轉(zhuǎn)到此地址運(yùn)行,從而進(jìn)入到內(nèi)核初始化過(guò)程行,從而進(jìn)入到內(nèi)核初始化過(guò)程 嵌入式系統(tǒng)中的引導(dǎo)程序嵌入式系統(tǒng)中的引導(dǎo)程序 n一般嵌入式系統(tǒng)沒(méi)有一般嵌入式系統(tǒng)沒(méi)有BIOS n引導(dǎo)程序被稱為引導(dǎo)程序被稱為Bootloader n引導(dǎo)程序完成硬件檢測(cè)、資源分配和操作引導(dǎo)程序完成硬件檢測(cè)、資源分配和操作系統(tǒng)內(nèi)核的引導(dǎo)(拷貝系統(tǒng)內(nèi)核的引導(dǎo)(拷貝+跳轉(zhuǎn))跳轉(zhuǎn))nBootloader還需要完成映像下載、還需要完成映像下載、flash燒寫(xiě)、代碼調(diào)試等功能燒寫(xiě)、代碼調(diào)試等功能n常用的開(kāi)源常用的開(kāi)源Bootloader有有u-

14、boot、Blob、redboot、vivi等等 Bootloader的特點(diǎn)的特點(diǎn) n與硬件關(guān)系密切與硬件關(guān)系密切 1.與具體與具體CPU類型有關(guān)類型有關(guān) 2.與系統(tǒng)的具體硬件實(shí)現(xiàn)(電路板)有關(guān)與系統(tǒng)的具體硬件實(shí)現(xiàn)(電路板)有關(guān) n與具體操作系統(tǒng)無(wú)關(guān)與具體操作系統(tǒng)無(wú)關(guān) n通常保存在某種被映射到通常保存在某種被映射到CPU某個(gè)指定地某個(gè)指定地址(一般為址(一般為0 x00,reset的入口地址)的的入口地址)的固態(tài)存儲(chǔ)器中固態(tài)存儲(chǔ)器中 n一旦系統(tǒng)開(kāi)始運(yùn)行,一旦系統(tǒng)開(kāi)始運(yùn)行,Bootloader便不再起便不再起作用作用 Bootloader的特點(diǎn)的特點(diǎn) nBootloader啟動(dòng)可以是單階段或多階

15、段,代啟動(dòng)可以是單階段或多階段,代碼可以都在碼可以都在flash中運(yùn)行,或者一部分在中運(yùn)行,或者一部分在flash中運(yùn)行,另一部分在中運(yùn)行,另一部分在ram中運(yùn)行中運(yùn)行 n一般一般bootloader至少有一部分在至少有一部分在flash中運(yùn)行,中運(yùn)行,但有少數(shù)例外(需要處理器支持)但有少數(shù)例外(需要處理器支持)n一般一般bootloader有有“引導(dǎo)引導(dǎo)”和和“下載下載”兩種兩種工作模式工作模式 n還需要支持與主機(jī)(還需要支持與主機(jī)(Host)之間的通信,一)之間的通信,一般為串口般為串口 采用兩級(jí)啟動(dòng)方式的采用兩級(jí)啟動(dòng)方式的Bootloader nStage1:主要完成一些依賴于處理器體系

16、主要完成一些依賴于處理器體系結(jié)構(gòu)的任務(wù),通常用匯編語(yǔ)言完成結(jié)構(gòu)的任務(wù),通常用匯編語(yǔ)言完成 1.硬件設(shè)備初始化硬件設(shè)備初始化 2.為加載為加載stage2準(zhǔn)備準(zhǔn)備RAM空間空間 3.將將stage2代碼復(fù)制到代碼復(fù)制到RAM空間,并設(shè)置堆空間,并設(shè)置堆棧棧 4.跳轉(zhuǎn)到跳轉(zhuǎn)到stage2的代碼入口的代碼入口 采用兩級(jí)啟動(dòng)方式的采用兩級(jí)啟動(dòng)方式的Bootloader nStage2:完成諸如命令處理等更加復(fù)雜的完成諸如命令處理等更加復(fù)雜的功能,通常用功能,通常用C語(yǔ)言完成語(yǔ)言完成 1.初始化本階段需要用到的其他硬件設(shè)備初始化本階段需要用到的其他硬件設(shè)備 2.準(zhǔn)備系統(tǒng)內(nèi)存映射準(zhǔn)備系統(tǒng)內(nèi)存映射 3.將操

17、作系統(tǒng)內(nèi)核從將操作系統(tǒng)內(nèi)核從Flash中搬移到中搬移到RAM中中 4.為內(nèi)核設(shè)置啟動(dòng)參數(shù)為內(nèi)核設(shè)置啟動(dòng)參數(shù) 5.調(diào)用內(nèi)核入口函數(shù)調(diào)用內(nèi)核入口函數(shù) Bootloader結(jié)構(gòu)結(jié)構(gòu) n處理器啟動(dòng)初始化代碼及中斷向量表處理器啟動(dòng)初始化代碼及中斷向量表 n必要的設(shè)備管理機(jī)制和驅(qū)動(dòng)函數(shù)必要的設(shè)備管理機(jī)制和驅(qū)動(dòng)函數(shù) n對(duì)傳輸協(xié)議的支持對(duì)傳輸協(xié)議的支持 由于需要完成由于需要完成“下載下載”功能,需要同主機(jī)功能,需要同主機(jī)之間進(jìn)行文件傳輸,所以需要支持至少某之間進(jìn)行文件傳輸,所以需要支持至少某種文件傳輸協(xié)議和相應(yīng)的驅(qū)動(dòng)程序,一般種文件傳輸協(xié)議和相應(yīng)的驅(qū)動(dòng)程序,一般通過(guò)串口,需要支持通過(guò)串口,需要支持xmodem

18、/ymodem/zmodem等,當(dāng)然等,當(dāng)然通過(guò)網(wǎng)絡(luò)是一個(gè)更好的選擇通過(guò)網(wǎng)絡(luò)是一個(gè)更好的選擇 Bootloader結(jié)構(gòu)結(jié)構(gòu) n由于由于bootloader在工作過(guò)程中(尤其是調(diào)在工作過(guò)程中(尤其是調(diào)試階段)需要與開(kāi)發(fā)者進(jìn)行交互,所以提試階段)需要與開(kāi)發(fā)者進(jìn)行交互,所以提供一個(gè)用戶界面是必要的,通常通過(guò)串口供一個(gè)用戶界面是必要的,通常通過(guò)串口終端的方式來(lái)完成終端的方式來(lái)完成 n有些有些bootloader支持壓縮格式,也就是說(shuō)支持壓縮格式,也就是說(shuō)可以在拷貝代碼的過(guò)程中進(jìn)行解壓操作可以在拷貝代碼的過(guò)程中進(jìn)行解壓操作 Bootloader代碼結(jié)構(gòu)代碼結(jié)構(gòu) n一般的一般的Bootloader的結(jié)構(gòu)分

19、成:的結(jié)構(gòu)分成: 1.目標(biāo)處理器相關(guān)代碼,一般目標(biāo)處理器相關(guān)代碼,一般stage1的入口的入口代碼在此目錄中代碼在此目錄中 2.目標(biāo)板相關(guān)代碼,一般目標(biāo)板相關(guān)代碼,一般stage2的入口代碼的入口代碼在此目錄中在此目錄中 3.驅(qū)動(dòng)代碼,包括串口、網(wǎng)絡(luò)、驅(qū)動(dòng)代碼,包括串口、網(wǎng)絡(luò)、USB、以及、以及ROM操作驅(qū)動(dòng)操作驅(qū)動(dòng) 4.命令處理代碼命令處理代碼 5.其他代碼其他代碼 Bootloader vivi nMizi 為為 Samsung 的的 ARM開(kāi)發(fā)板提供的一開(kāi)發(fā)板提供的一種種ARM bootloader n支持支持autoboot模式和模式和prompt模式模式 n支持支持xmodem文件傳

20、輸文件傳輸 n提供提供flash的操作功能,以及的操作功能,以及l(fā)oad、part、param、boot等命令等命令 Vivi代碼結(jié)構(gòu)代碼結(jié)構(gòu) nArch:包含:包含vivi支持的處支持的處理器理器 nDrivers:包含了包含了MTD和串和串口驅(qū)動(dòng)程序口驅(qū)動(dòng)程序 n Init:包含:包含main程序,程序,stage2的入口點(diǎn)的入口點(diǎn) nLib:與平臺(tái)無(wú)關(guān)的公共:與平臺(tái)無(wú)關(guān)的公共的代碼,比如的代碼,比如memory操操作、命令操作等作、命令操作等nInclude:所有頭文件所有頭文件 目標(biāo)板配置目標(biāo)板配置 n處理器:處理器:samsung S3C2410X(ARM920T) n32M Nan

21、dFlash,用作用作Boot n64M SDRAM,地址,地址范圍范圍0 x300000000 x33ffffff S3C2410不同不同boot方式的內(nèi)存映射方式的內(nèi)存映射 從從NandFlash啟動(dòng)的啟動(dòng)的2410 nS3c2410內(nèi)置內(nèi)置NandFlash控制器,支持控制器,支持NandFlash boot模式模式 n在在NandFlash boot時(shí),系統(tǒng)自動(dòng)拷貝時(shí),系統(tǒng)自動(dòng)拷貝NandFlash最初最初4K的代碼到片內(nèi)的代碼到片內(nèi)sram中中作為啟動(dòng)代碼作為啟動(dòng)代碼 n前前4K代碼完成代碼完成stage1的工作的工作 代碼在存儲(chǔ)區(qū)中的位置代碼在存儲(chǔ)區(qū)中的位置 Vivi的存儲(chǔ)器區(qū)域的

22、存儲(chǔ)器區(qū)域_ROM n VIVI_ROM_BASE: 1.使用使用Bon分區(qū),起始區(qū)域保存分區(qū),起始區(qū)域保存vivi代碼,然代碼,然后是后是Kernel和和rootfs映像,除映像,除vivi起始為起始為VIVI_ROM_BASE外,其他的起始地址可外,其他的起始地址可變變nVIVI_PRIV_ROM_BASE: 1.保存保存Bon分區(qū)表分區(qū)表 2.Vivi參數(shù)表參數(shù)表 3. linux系統(tǒng)啟動(dòng)參數(shù)(系統(tǒng)啟動(dòng)參數(shù)(commandline) Vivi的存儲(chǔ)器區(qū)域的存儲(chǔ)器區(qū)域_RAM nRAM_BASE: 1.RAM起始地址,低地址留給內(nèi)核使用,高地址由起始地址,低地址留給內(nèi)核使用,高地址由viv

23、i使用使用nVIVI使用的使用的RAM空間空間: 1.Vivi在在RAM中的起始地址中的起始地址VIVI_RAM_BASE 2.Vivi使用的堆地址:使用的堆地址:HEAP_BASE 3.2410使用的使用的MMU地址:地址:MMU_TABLE_BASE 4.Vivi參數(shù)地址:參數(shù)地址:VIVI_PRIV_RAM_BASE 5.Vivi使用的棧地址:使用的棧地址:STACK_BASE U-boot簡(jiǎn)介簡(jiǎn)介 n由德國(guó)由德國(guó)DENX小組開(kāi)發(fā)的用于多種嵌入式小組開(kāi)發(fā)的用于多種嵌入式CPU的的bootloader程序,起源于程序,起源于PPC-BOOT n支持支持Linux、VxWork等操作系統(tǒng),還

24、支持等操作系統(tǒng),還支持MIPS、X86、ARM等處理器,是一種通用等處理器,是一種通用的的Bootloader n開(kāi)源,高度模塊化開(kāi)源,高度模塊化 n驅(qū)動(dòng)程序豐富、命令操作靈活驅(qū)動(dòng)程序豐富、命令操作靈活 U-BOOT代碼結(jié)構(gòu)代碼結(jié)構(gòu) nBoard:與目標(biāo)板相關(guān)代碼與目標(biāo)板相關(guān)代碼 nCommon:命令的實(shí)現(xiàn)代碼命令的實(shí)現(xiàn)代碼 nCpu:與目標(biāo)處理器相關(guān)代與目標(biāo)處理器相關(guān)代碼碼 nDrivers:各種驅(qū)動(dòng)程序各種驅(qū)動(dòng)程序 nFs:支持的文件系統(tǒng)支持的文件系統(tǒng) nLib_arm:ARM平臺(tái)的公共平臺(tái)的公共接口代碼接口代碼 U-BOOT代碼結(jié)構(gòu)代碼結(jié)構(gòu) ndisk:對(duì)磁盤(pán)的支持對(duì)磁盤(pán)的支持 ninc

25、lude:頭文件、支持頭文件、支持各種硬件平臺(tái)的匯編文各種硬件平臺(tái)的匯編文件、系統(tǒng)配置文件和支件、系統(tǒng)配置文件和支持文件系統(tǒng)的文件持文件系統(tǒng)的文件nnet:與網(wǎng)絡(luò)協(xié)議棧相關(guān)與網(wǎng)絡(luò)協(xié)議棧相關(guān)代碼,代碼,TFTP協(xié)議等和協(xié)議等和NFS文件系統(tǒng)文件系統(tǒng) ntools:生成生成UBOOT的工的工具具CPU相關(guān)文件相關(guān)文件 nCpu.c 和和cpu核相關(guān)的操作,注意對(duì)于某一核相關(guān)的操作,注意對(duì)于某一個(gè)系列的個(gè)系列的cpu來(lái)說(shuō),這個(gè)文件一般是公共的來(lái)說(shuō),這個(gè)文件一般是公共的 nStart.s 入口點(diǎn)入口點(diǎn) nAutoconfig.h 自動(dòng)設(shè)置文件自動(dòng)設(shè)置文件nInterrupts.c 這個(gè)文件定義了中斷處

26、理相關(guān)這個(gè)文件定義了中斷處理相關(guān)操作操作 Board相關(guān)文件相關(guān)文件 nlowlevel_init.S 用于初始化一些周邊設(shè)備,用于初始化一些周邊設(shè)備,主要是存儲(chǔ)器主要是存儲(chǔ)器 nSmdk2410.c 用于板級(jí)系統(tǒng)初始化用于板級(jí)系統(tǒng)初始化 nFlash.c 是板級(jí)系統(tǒng)的是板級(jí)系統(tǒng)的Flash驅(qū)動(dòng)函數(shù)所在驅(qū)動(dòng)函數(shù)所在 n在此目錄中,包含了整個(gè)系統(tǒng)的在此目錄中,包含了整個(gè)系統(tǒng)的 .lds文件文件 Lib_arm中的相關(guān)文件中的相關(guān)文件 nArmlinux.c arm系統(tǒng)引導(dǎo)內(nèi)核的函數(shù)所在系統(tǒng)引導(dǎo)內(nèi)核的函數(shù)所在文件文件 n_umodsi3.s和和_udivsi3.s 用于用于arm的算術(shù)的算術(shù)運(yùn)算運(yùn)

27、算nCache.c和和div0.c nboard.c 包含了包含了stage2的入口點(diǎn)的入口點(diǎn) U-boot所使用的文件格式所使用的文件格式 nU-boot的的tools目錄提供一個(gè)工具目錄提供一個(gè)工具mkimage用來(lái)將用來(lái)將elf格式的格式的image文件轉(zhuǎn)文件轉(zhuǎn)成成uImage 1.Vmlinuxelf格式格式 2.zImage和和bzImage 經(jīng)過(guò)壓縮的經(jīng)過(guò)壓縮的image 3.用用objcopy可以將可以將elf轉(zhuǎn)成轉(zhuǎn)成bin文件文件 U-boot下載映像的制作過(guò)程下載映像的制作過(guò)程 n編譯內(nèi)核,得到編譯內(nèi)核,得到vmlinux文件文件n使用使用objcopy得到二進(jìn)制文件得到二進(jìn)

28、制文件linux.bin $CROSS_COMPILE-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin n壓縮二進(jìn)制文件壓縮二進(jìn)制文件linux.bin,得到,得到linux.bin.gz n使用使用u-boot工具工具mkimage將壓縮文件打包,加將壓縮文件打包,加入入load地址、解壓地址等信息地址、解壓地址等信息 UBOOT編譯與配置編譯與配置nuboot的的makefile從功能上可以分成兩從功能上可以分成兩個(gè)部分:一部分是用來(lái)編譯生成個(gè)部分:一部分是用來(lái)編譯生成uboot.bin文件;另一部分是用來(lái)執(zhí)行文件;另一部分是用來(lái)執(zhí)行每種每種board相關(guān)的配置。相關(guān)的配置。nuboot.bin的生成分為兩步:一是對(duì)的生成分為兩步:一是對(duì)board進(jìn)行配置;接下來(lái)進(jìn)行編譯生成進(jìn)行配置;接下來(lái)進(jìn)行編譯生成uboot.binUBOOT的啟動(dòng)過(guò)程的啟動(dòng)過(guò)程n與大多數(shù)與大多數(shù)bootloader類似,類似,uboot包含包含兩種不同的操作模式:?jiǎn)?dòng)加載模式和兩種不同的操作模式:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論