色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

解析單片機(jī)上應(yīng)用的一款Boot Loader

發(fā)布時(shí)間:2010-9-3 13:58    發(fā)布者:techshare
關(guān)鍵詞: Boot , loader , 單片機(jī)
Boot Loader概述

Boot Loader的概念及功能

在以ARM為代表的嵌入式系統(tǒng)中,操作系統(tǒng)內(nèi)核運(yùn)行前的硬件初始化、建立內(nèi)核鏡像等都是由Boot Loader來(lái)完成的。在PC機(jī)上,最先啟動(dòng)的是主板上的BIOS,BIOS負(fù)責(zé)對(duì)硬件初始化,給操作系統(tǒng)提供硬件的接口函數(shù)等等,但在嵌入式操作系統(tǒng)中并沒(méi)有BIOS,因此整個(gè)嵌入式操作系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Boot Loader來(lái)完成。



圖1 Boot Loader流程圖

Boot Loader通常存放于目標(biāo)平臺(tái)的非易失存儲(chǔ)介質(zhì)中,主要用于完成由硬件啟動(dòng)到操作系統(tǒng)啟動(dòng)的過(guò)渡,能夠在上電后對(duì)SDRAM、CACHE、FLASH等硬件部分進(jìn)行檢測(cè),建立內(nèi)存空間的映射圖和內(nèi)核鏡像,建立通訊通道和調(diào)試通道等,還能夠提供Shell Menu
檢測(cè)設(shè)置菜單和相應(yīng)的檢測(cè)程序,引導(dǎo)操作系統(tǒng)及應(yīng)用程序,從而為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。

目前,嵌入式系統(tǒng)中廣泛應(yīng)用的UBoot、vivi、blob、armboot等Boot Loader在原有功能的基礎(chǔ)上,增加了更多的功能并大大增強(qiáng)了移植性。嵌入式系統(tǒng)中硬件的種類繁多,差距較大,而Boot Loader是嚴(yán)重依賴于硬件而實(shí)現(xiàn)的。不同的CPU體系需要不同的Boot Loader,即便是同一種體系結(jié)構(gòu),由于其它硬件設(shè)備配置的不同,如板卡硬件地址的分配、RAM芯片的型號(hào)等,也需要對(duì)Boot Loader作一定的修改才能使用。因此,開(kāi)發(fā)人員需針對(duì)不同的處理器和開(kāi)發(fā)板,對(duì)Boot Loader進(jìn)行定制,來(lái)實(shí)現(xiàn)不同的功能。

Boot Loader的操作模式

Boot Loader通常包括“啟動(dòng)加載(Boot loading)”和“下載(Downloading)”兩種模式。這兩種操作模式僅對(duì)開(kāi)發(fā)人員具有一定的意義。

啟動(dòng)加載模式:Boot Loader從目標(biāo)機(jī)上的固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,無(wú)需用戶介入。此模式是Boot Loader正常的工作模式。

下載模式:在這種模式下,目標(biāo)機(jī)上的Boot Loader通過(guò)串口連接或網(wǎng)絡(luò)連接等手段從主機(jī)上下載文件到目標(biāo)機(jī)的RAM中,然后再燒寫到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)設(shè)備中。通常在第一次安裝內(nèi)核與根文件系統(tǒng)以及系統(tǒng)的更新時(shí)使用此模式。

Boot Loader的具體實(shí)現(xiàn)

硬件配置


本文以UP-NetARM3000為例來(lái)介紹Boot Loader的工作機(jī)理和運(yùn)行流程。UP-NetARM3000使用的是三星公司生產(chǎn)的S3C44B0X芯片,這是三星公司推出的一款高性價(jià)比和高性能的微控制器。它具有32位的ARM7TDMI內(nèi)核,外部時(shí)鐘為8MHz,內(nèi)部倍頻最高可達(dá)72MHz,工作頻率為64MHz。S3C44B0X通過(guò)提供全面的、通用的片上外設(shè),大大減少了系統(tǒng)中處理器以外的元器件配置,從而使系統(tǒng)的成本大大降低,它集成的各種片上功能包括:8KB Cache、擴(kuò)展內(nèi)存控制器、2通道UART帶有握手協(xié)議、1通道SIO、2個(gè)通用DMA、2個(gè)外設(shè)用DMA、外部存儲(chǔ)控制器、LCD控制器、IIC/IIS總線接口、5個(gè)通道PWM定時(shí)器和一個(gè)內(nèi)部定時(shí)器、看門狗定時(shí)器、71個(gè)通用I/O口、8個(gè)外部中斷源、8通道10位ADC、片上PLL時(shí)鐘產(chǎn)生器等。

Boot Loader的啟動(dòng)流程

大多數(shù)Boot Loader通常都分為Stage1和Stage2兩大部分。Stage1通常由匯編語(yǔ)言編寫,即Boot Loader的啟動(dòng)代碼,旨在對(duì)部分硬件設(shè)備進(jìn)行初始化。Stage2即Boot Loader的主代碼,為了實(shí)現(xiàn)更加復(fù)雜的功能,使代碼具有更好的可讀性和可移植性,通常由C語(yǔ)言來(lái)實(shí)現(xiàn),主要用來(lái)加載操作系統(tǒng)內(nèi)核。 具體啟動(dòng)流程如圖1所示。

· Stage1部分

設(shè)置CPU的速度、時(shí)鐘頻率及中斷控制寄存器

Boot Loader的啟動(dòng)代碼首先定義了一個(gè)全局入口,然后對(duì)異常向量進(jìn)行設(shè)置。由于Boot Loader嚴(yán)重的依賴于硬件而實(shí)現(xiàn),因此根據(jù)CPU體系結(jié)構(gòu)和具體的硬件配置來(lái)設(shè)置CPU的速度、時(shí)鐘頻率及中斷控制寄存器。除完成上述功能,啟動(dòng)代碼還需要實(shí)現(xiàn)禁止看門狗定時(shí)器、設(shè)置時(shí)鐘控制寄存器、設(shè)置鎖相環(huán)控制寄存器、使能所有功能單元塊時(shí)鐘等功能。另外,系統(tǒng)中斷的設(shè)置也是在這部分實(shí)現(xiàn)的,主要是中斷向量表和IRQ中斷入口地址的設(shè)置。



存儲(chǔ)器的分配

S3C44B0X的存儲(chǔ)系統(tǒng)具有一
些主要特征,如:支持?jǐn)?shù)據(jù)存儲(chǔ)的大、小端選擇;地址空間具有8個(gè)存儲(chǔ)體,每個(gè)存儲(chǔ)體可達(dá)32MB;對(duì)所有存儲(chǔ)體的訪問(wèn)大小均可以進(jìn)行改變;7個(gè)存儲(chǔ)器的起始地址固定,1個(gè)存儲(chǔ)器的起始地址可變。在本文介紹的這款Boot Loader中,啟動(dòng)代碼通過(guò)對(duì)BUSWIDTH的賦值來(lái)使能各個(gè)存儲(chǔ)器。其具體對(duì)應(yīng)情況如右面所示:

啟動(dòng)代碼還有一個(gè)重要的任務(wù)—初始化內(nèi)存控制寄存器,它主要通過(guò)設(shè)置13 個(gè)從0x01c80000開(kāi)始的寄存器來(lái)實(shí)現(xiàn),包括BWSCON總線寬度與等待狀態(tài)控制寄存器、BANKCONn塊控制寄存器。標(biāo)號(hào)SMRDATA處為將要賦予內(nèi)存控制寄存器的具體值。以ResetHandler標(biāo)號(hào)地址為參照,根據(jù)其偏移地址推算出SMRDATA標(biāo)號(hào)地址的實(shí)際位置,然后讀取該處的數(shù)據(jù)對(duì)內(nèi)存控制寄存器進(jìn)行賦值。






圖2 映像文件地址映射

形成可執(zhí)行文件

在嵌入式系統(tǒng)應(yīng)用程序中,可執(zhí)行文件通常包括RO(Read_Only)段、RW(Read_Write)段和BSS段。當(dāng)需要燒寫內(nèi)存中的映像文件到FLASH中時(shí),通常都會(huì)把Boot Loader代碼先移到FLASH的高地址空間中,因?yàn)橥ǔO的地址都是0x0,防止在燒寫時(shí)覆蓋本來(lái)在FLASH中已有的Boot Loader代碼。程序編譯、鏈接時(shí)要求編譯器設(shè)置的Read_Only地址要和最終代碼下載的地址相同,如圖2所示。

Boot Loader映像文件最終運(yùn)行的地址空間是0Bank,因此將RO Base設(shè)置為0x0,RW Base設(shè)置為0x0c60000,經(jīng)編譯后生成bin格式的可執(zhí)行文件燒寫到FLASH0地址處。在程序運(yùn)行之前,RO段和RW段全部放在FLASH中,RO段可以直接在FLASH中運(yùn)行,而RW必須調(diào)入SDRAM中才可以運(yùn)行,因此,程序運(yùn)行過(guò)程中RO段保持已設(shè)置完畢的0x0地址不變,而必須將RW段拷貝到RW Base即0x0c60000地址處,并將ZI段進(jìn)行零初始化。



·Stage2部分

初始化硬件

Boot Loader主程序?qū)Υ谶M(jìn)行調(diào)試并對(duì)本階段所涉及的硬件進(jìn)行檢測(cè)后,通過(guò)串口下載鏡像到目標(biāo)機(jī)中。主代碼中定義了LCD_Test()、LED_Test()、ADTest()、KeyTest()、BootSystem()等函數(shù)測(cè)試部分硬件的功能。以AD的檢測(cè)函數(shù)為例簡(jiǎn)要介紹檢測(cè)函數(shù)功能具體的實(shí)現(xiàn)。ADTest_Loop()是針對(duì)AD硬件的操作函數(shù),而Set_UartLoopFunc()函數(shù)是把ADTest_Loop()設(shè)置到串口輪詢函數(shù)數(shù)組中(串口輪詢函數(shù)數(shù)組中還包括其他的檢測(cè)函數(shù)),AD檢測(cè)函數(shù)在對(duì)目標(biāo)進(jìn)行操作的同時(shí)查詢是否有停止命令,如果Uart_Getch()函數(shù)沒(méi)有查詢到串口有輸入的停止命令,調(diào)用串口輪詢數(shù)組中的其他函數(shù),否則立刻返回。



檢測(cè)內(nèi)存及引導(dǎo)系統(tǒng)

在Boot Loader的主程序中需要檢測(cè)重要的硬件——內(nèi)存,檢測(cè)完畢后會(huì)分別通過(guò)串口和LCD輸出提示信息。接下來(lái)會(huì)等待查詢是否有鍵按下,當(dāng)沒(méi)有鍵按下時(shí),正常引導(dǎo)操作系統(tǒng),否則顯示Shell Menu。

Boot Loader程序在獲得系統(tǒng)的控制權(quán)之后,對(duì)關(guān)鍵硬件檢測(cè)并且沒(méi)有發(fā)現(xiàn)故障,控制臺(tái)也沒(méi)有發(fā)出啟用Shell Menu檢測(cè)菜單的情況下,根據(jù)文件系統(tǒng)的管理和支持,從NAND FLASH中讀取操作系統(tǒng)或應(yīng)用程序的代碼到SDRAM的指定位置,然后把程序指針轉(zhuǎn)移到該位置,從而使操作系統(tǒng)獲得控制權(quán),完成引導(dǎo)過(guò)程。

static void(*run)(void)=(void(*)(void))DOWNLOAD _ADDRESS,在程序中定義得此函數(shù)指針能夠把指定位置的地址強(qiáng)制轉(zhuǎn)換為函數(shù)指針類型,然后使用run()函數(shù)即可運(yùn)行該地址處的指令。在實(shí)現(xiàn)引導(dǎo)功能的代碼中,打開(kāi)并讀取指定的系統(tǒng)文件到指定的位置DOWNLOAD_ADDRESS(0xc080000)處即完成了裝載,將程序指針指向已指定的這個(gè)位置,使用run()函數(shù)運(yùn)行該地址處的指令,即可實(shí)現(xiàn)控制的轉(zhuǎn)移。當(dāng)看到屏幕上顯示操作系統(tǒng)的啟動(dòng)信息后,Boot Loader完成任務(wù),成功的引導(dǎo)了操作系統(tǒng)。



結(jié)語(yǔ)


本文介紹了在基于S3C44B0X的UP-NETARM3000的實(shí)驗(yàn)板上移植uCOS系統(tǒng)的Boot Loader。不同的開(kāi)發(fā)板具有不同的CPU體系結(jié)構(gòu)和外圍硬件設(shè)備,但Boot Loader的工作機(jī)理都是類似的,明確開(kāi)發(fā)板的硬件資源和具體即將移植的操作系統(tǒng)后,對(duì)Boot Loader進(jìn)行具體裁減和修改。
本文地址:http://m.54549.cn/thread-25507-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表