資源描述:
《啟動(dòng)代碼與bootloader的區(qū)別》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、我主要遇到了這樣一個(gè)問題,啟動(dòng)代碼和Bootloader的區(qū)別以及它們?cè)贏RM上運(yùn)行操作系統(tǒng)和不運(yùn)行操作系統(tǒng)(只有用戶程序)的關(guān)系。啟動(dòng)代碼是Bootloader,但不能說Bootloader是啟動(dòng)代碼。當(dāng)然這也不是絕對(duì)的,只在某些情況下可以這么說。啟動(dòng)代碼是指CPU復(fù)位后到main函數(shù)之前需要執(zhí)行的匯編代碼。需要這段代碼是為了給C語言程序準(zhǔn)備好堆棧空間,中斷入口和外部數(shù)據(jù)等。而且這段匯編代碼可以直接對(duì)硬件進(jìn)行操作,效率很高。Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前的一小段程序,通過這段小程序,可以初始化硬件設(shè)備
2、、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為調(diào)用操作系統(tǒng)內(nèi)核、運(yùn)行用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。嵌入式系統(tǒng)建立一個(gè)通用、標(biāo)準(zhǔn)的Bootloader是非常困難的。Bootloader也依賴于具體的嵌入式板級(jí)設(shè)備的配置,這也就是說,對(duì)于兩塊不同的嵌入式主板而言,即使它們是基于同一?CPU?而構(gòu)建,要想讓運(yùn)行在一塊板子上的?Bootloader?程序也能運(yùn)行在另一塊板子上,通常都需要修改?Bootloader?的源程序。?啟動(dòng)代碼內(nèi)容流程:1.?啟動(dòng)代碼的第一步是設(shè)置中斷和異常向量。????2.?
3、完成系統(tǒng)啟動(dòng)所必須的最小配置,某些處理器芯片包含一個(gè)或幾個(gè)全局寄存器,這些寄存器必須在系統(tǒng)啟動(dòng)的最初進(jìn)行配置。????3.?設(shè)置看門狗,用戶設(shè)計(jì)的部分外圍電路如果必須在系統(tǒng)啟動(dòng)時(shí)初始化,就可以放在這一步。????4.?配置系統(tǒng)所使用的存儲(chǔ)器,包括Flash,SRAM和DRAM等,并為他們分配地址空間。如果系統(tǒng)使用了DRAM或其它外設(shè),就需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率,數(shù)據(jù)總線寬度等信息,初始化存儲(chǔ)器系統(tǒng)。有些芯片可通過寄存器編程初始化存儲(chǔ)器系統(tǒng),而對(duì)于較復(fù)雜系統(tǒng)通常集成有MMU來管理內(nèi)存空間。????5.?為處
4、理器的每個(gè)工作模式設(shè)置棧指針,ARM處理器有多種工作模式,每種工作模式都需要設(shè)置單獨(dú)的棧空間。????6.?變量初始化,這里的變量指的是在軟件中定義的已經(jīng)賦好初值的全局變量,啟動(dòng)過程中需要將這部分變量從只讀區(qū)域,也就是Flash拷貝到讀寫區(qū)域中,因?yàn)檫@部分變量的值在軟件運(yùn)行時(shí)有可能重新賦值。還有一種變量不需要處理,就是已經(jīng)賦好初值的靜態(tài)全局變量,這部分變量在軟件運(yùn)行過程中不會(huì)改變,因此可以直接固化在只讀的Flash或EEPROM中。????7.?數(shù)據(jù)區(qū)準(zhǔn)備,對(duì)于軟件中所有未賦初值的全局變量,啟動(dòng)過程中需要將這部分變量所
5、在區(qū)域全部清零。????8.?最后一步是調(diào)用高級(jí)語言入口函數(shù),比如main函數(shù)等。摘要:本文總結(jié)了基于S3C44B0X芯片的Bootloader代碼設(shè)計(jì)的一般流程,具體說明了Bootloader完成的主要任務(wù),實(shí)現(xiàn)方法和地址重映射的概念;給出了S3C44B0X在基于uCLinux操作系統(tǒng)的嵌入式應(yīng)用中,Bootloader的引導(dǎo)過程及關(guān)鍵技術(shù)和代碼,有著很好的借鑒價(jià)值。?關(guān)鍵詞:嵌入式系統(tǒng)??Bootloader代碼??地址重映射??S3C44B0X??uCLinux??1引言近年來,ARM在嵌入式設(shè)備中的應(yīng)用越來越廣
6、泛。S3C44B0X就是Samsung公司生產(chǎn)的基于ARM7架構(gòu)的微處理器。uCLinux是專門為無MMU處理器設(shè)計(jì)的嵌入式操作系統(tǒng),支持ARM、Motorola等處理器。采用ARM+uCLinux作為嵌入式開發(fā)平臺(tái),吸取了兩者優(yōu)點(diǎn),是一種比較流行的開發(fā)方式。在ARM程序設(shè)計(jì)中,啟動(dòng)代碼是至關(guān)重要的,它不僅初始化硬件系統(tǒng)本身,而且最終引導(dǎo)進(jìn)入操作系統(tǒng),所以啟動(dòng)代碼的設(shè)計(jì)直接影響整個(gè)開發(fā)的正常進(jìn)行。本文結(jié)合S3C44B0X的特點(diǎn)詳細(xì)給出了Bootloader設(shè)計(jì)和啟動(dòng)過程。2BootLoader代碼??Bootloade
7、r代碼是芯片復(fù)位后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,主要是為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,由它最終將操作系統(tǒng)啟動(dòng)起來并將控制權(quán)交給操作系統(tǒng)內(nèi)核。Bootloader代碼由匯編代碼和C代碼兩部分組成。由于資源有限,Bootloader、uCLinux內(nèi)核映象、文件系統(tǒng)(Ramdisk壓縮映象)通常都是固化在Flash中的。在S3C44B0X架構(gòu)的嵌入式系統(tǒng)中,為了保證上電或復(fù)位時(shí)正常運(yùn)行,Bootloader必須存放在Flash(0x0-0x400000,4M)中的0x0處,則在硬件設(shè)計(jì)中把Flash接在CPU的nGCS0處
8、[1]。上電后Bootloader首先完成存儲(chǔ)器、堆棧、寄存器、全局變量和基本硬件模塊的初始化,這由匯編代碼完成,然后將操作系統(tǒng)內(nèi)核與文件系統(tǒng)調(diào)入SDRAM(0x0c000000-0x0c800000,8M)中,并將PC指針指向操作系統(tǒng)內(nèi)核的入口處,為操作系統(tǒng)的運(yùn)行作好準(zhǔn)備,這由C代碼完成。3BootLoader代碼設(shè)計(jì)流程??A