資源描述:
《《嵌入式系統(tǒng)》ppt課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、嵌入式系統(tǒng)的Bootloader宿主機(jī)-目標(biāo)機(jī)開(kāi)發(fā)模式JTAG并口/串口嵌入式Linux系統(tǒng)從整體上講,可以分為五大部分Bootloader(引導(dǎo)加載程序)Kernel(內(nèi)核)Devicedrivers(驅(qū)動(dòng)程序)Filesystem(文件系統(tǒng))Applications(應(yīng)用程序)從軟件的角度看可以分為四個(gè)層次:1.引導(dǎo)加載程序。包括固化在固件中的boot代碼(可選),和BootLoader兩大部分。2.Linux內(nèi)核。特定于嵌入式板子的定制內(nèi)核(包括驅(qū)動(dòng)程序)以及內(nèi)核的啟動(dòng)參數(shù)。3.文件系統(tǒng)。建立于Flash設(shè)備之上文件系統(tǒng)。4.用戶應(yīng)用
2、程序。特定于用戶的應(yīng)用程序。有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間,可能還會(huì)包括一個(gè)嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI。Bootloader和嵌入式Linux構(gòu)建嵌入式Linux系統(tǒng)的主要任務(wù)內(nèi)核部分內(nèi)核裁剪編譯底層驅(qū)動(dòng)開(kāi)發(fā)應(yīng)用程序部分構(gòu)建基本的嵌入式Linux文件系統(tǒng)應(yīng)用程序開(kāi)發(fā)與移植嵌入式Linux系統(tǒng)的開(kāi)發(fā)流程建立交叉編譯環(huán)境Bootloader開(kāi)發(fā)Linux內(nèi)核的裁剪構(gòu)造根文件系統(tǒng)驅(qū)動(dòng)移植/開(kāi)發(fā)應(yīng)用程序移植開(kāi)發(fā)和調(diào)試Bootloader分類BootLoaderLILOGRUBU-BOOTviv
3、iBootloader的通用性質(zhì)Bootloader與嵌入式Linux的關(guān)系一個(gè)嵌入式系統(tǒng)從軟件角度來(lái)看分為四個(gè)層次:1.引導(dǎo)加載程序。包括固化在固件(firmware)中的boot代碼(可選),和Bootloader兩大部分。2.Linux內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。3.文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上文件系統(tǒng)。通常用ramdisk來(lái)作為rootfilesystem。4.用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼?;貞浺幌翽C的體系結(jié)構(gòu)我們可以知道,PC機(jī)
4、中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤(pán)MBR中的OSBootloader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測(cè)和資源分配后,將硬盤(pán)MBR中的Bootloader讀到系統(tǒng)的RAM中,然后將控制權(quán)交給OSBootloader。Bootloader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤(pán)上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開(kāi)始啟動(dòng)作系統(tǒng)。而在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Bootloade
5、r來(lái)完成。比如在一個(gè)基于ARM7TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開(kāi)始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的Bootloader程序。Bootloader的概念簡(jiǎn)單地說(shuō),Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤(pán)上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開(kāi)始啟動(dòng)
6、操作系統(tǒng)。通常,Bootloader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的Bootloader幾乎是不可能的。Bootloader所支持的CPU和嵌入式板每種不同的CPU體系結(jié)構(gòu)都有不同的Bootloader。有些Bootloader也支持多種體系結(jié)構(gòu)的CPU,比如U-Boot就同時(shí)支持ARM體系結(jié)構(gòu)和MIPS體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,Bootloader實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置。這也就是說(shuō),對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運(yùn)行在
7、一塊板子上的Bootloader程序也能運(yùn)行在另一塊板子上,通常也都需要修改Bootloader的源程序。Bootloader的安裝媒介系統(tǒng)加電或復(fù)位后,所有的CPU通常都從某個(gè)由CPU制造商預(yù)先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在復(fù)位時(shí)通常都從地址0x00000000取它的第一條指令。一個(gè)同時(shí)裝有Bootloader、內(nèi)核的啟動(dòng)參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)圖:用來(lái)控制Bootloader的設(shè)備或機(jī)制主機(jī)和目標(biāo)機(jī)之間一般通過(guò)串口建立連接,Bootloader軟件在執(zhí)行時(shí)通常會(huì)通過(guò)
8、串口來(lái)進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。Bootloader的主要任務(wù)與典型結(jié)構(gòu)框架Bootloader的啟動(dòng)過(guò)程可分為單階段(SingleStag