嵌入式Linux Bootloader在MIPS64的移植
出處:國(guó)外電子元器件 發(fā)布于:2011-09-02 22:39:54
Linux簡(jiǎn)介:
Linux是一類Unix計(jì)算機(jī)操作系統(tǒng)的統(tǒng)稱。Linux操作系統(tǒng)的內(nèi)核的名字也是“Linux”。Linux操作系統(tǒng)也是自由軟件和開放源代碼發(fā)展中著名的例子。嚴(yán)格來講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但在實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。Linux得名于計(jì)算機(jī)業(yè)余愛好者Linus Torvalds。
Linux 操作系統(tǒng)是UNIX 操作系統(tǒng)的一種克隆系統(tǒng)。它誕生于1991 年的10 月5 日。以后借助于Internet 網(wǎng)絡(luò),并經(jīng)過全世界各地計(jì)算機(jī)愛好者的共同努力下,現(xiàn)已成為今天世界上使用多的一種UNIX 類操作系統(tǒng),并且使用人數(shù)還在迅猛增長(zhǎng)。
1 引言
Linux具備良好的裁剪性和移植性,并且開源、資源豐富,已成為嵌入式系統(tǒng)的開發(fā)熱點(diǎn)。一個(gè)完整的嵌入式Linux系通通常包括Bootloader、內(nèi)核、文件系統(tǒng)三部分,目標(biāo)板上電后由Bootloader初始化硬件,引導(dǎo)內(nèi)核和文件系統(tǒng)來啟動(dòng)Linux。但是由于在嵌入式開發(fā)中基于MIPS體系的Bootloader較少,開發(fā)者在移植MIPS Bootloader需花費(fèi)大量精力。結(jié)合OCTEON3010(MIPS64)的U-boot移植經(jīng)驗(yàn),分析嵌入式LinuxBootloader的工作原理及功能,設(shè)計(jì)了一個(gè)基于MIPS體系的Bootloader模型。對(duì)OCTEON系列的MIPS處理器Bootloader的設(shè)計(jì)具有參考價(jià)值和指導(dǎo)意義。
BootLoader簡(jiǎn)介:
簡(jiǎn)單地說,BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。
2 Bootloader原理分析
Bootloader是在運(yùn)行操作系統(tǒng)內(nèi)核前所執(zhí)行的一段小程序。通過執(zhí)行這段小程序,實(shí)現(xiàn)初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而為系統(tǒng)的軟硬件環(huán)境設(shè)置一個(gè)合適狀態(tài),以便為終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確環(huán)境。
大多數(shù)Bootloader包含"啟動(dòng)加載"和""兩種操作模式。從終用戶來看,Bootloader就是用來加載操作系統(tǒng),而無工作模式區(qū)別。其中,啟動(dòng)加載模式是Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過程并沒有用戶介入。這種模式是Bootloader的正常工作模式。而在模式下,目標(biāo)機(jī)上的Bootloader通過串口連接或網(wǎng)絡(luò)連接從主機(jī)(Host)文件,例如內(nèi)核映像和根文件系統(tǒng)映像等。
由于實(shí)現(xiàn)Bootloader依賴CPU的體系結(jié)構(gòu),因此大多數(shù)Bootloader分為stage1和stage2兩部分,并依賴于CPU體系結(jié)構(gòu)的代碼,例如:設(shè)備初始化代碼等,通常放在stage1中,一般采用匯編語言。而stage2則通常采用C語言實(shí)現(xiàn)復(fù)雜功能,而且代碼具有良好的可讀性和移植性。stage1步驟通常包括:硬件設(shè)備初始化;為加載Bootloader的stage2準(zhǔn)備RAM空間;拷貝Bootloader的stage2到RAM空間中;設(shè)置好堆棧;跳轉(zhuǎn)到stage2的C入口點(diǎn)。Bootloader的stage2步驟通常包括:初始化當(dāng)前階段使用的硬件設(shè)備;檢測(cè)系統(tǒng)內(nèi)存映射;將Kernel映像和根文件系統(tǒng)映像從Flash上讀到RAM空間中;為內(nèi)核設(shè)置啟動(dòng)參數(shù);調(diào)用內(nèi)核。
3 設(shè)計(jì)移植
3.1 啟動(dòng)流程
針對(duì)具體的硬件內(nèi)容,詳細(xì)分析U-Boot的啟動(dòng)流程后,給出啟動(dòng)流程中需要修改的代碼。
3.2Linux bootloader 編寫方法引導(dǎo)過程概述
首先需要把linux內(nèi)核的setup部分拷貝到9020H:0開始的地址,然后把保護(hù)模式內(nèi)核拷貝到1MB開始的地址,然后根據(jù)Linux Boot Protocol 2.03的內(nèi)容設(shè)定參數(shù)區(qū)的內(nèi)容,基地址就是9000H:0,使用一條ljmp $0x9020,$0跳轉(zhuǎn)到setup段,
3.3 移植分析
片級(jí)移植針對(duì)具體CPU初始化代碼的修改,針對(duì)對(duì)應(yīng)的MIPS平臺(tái),主要包括:通用寄存器的初始化、CP0的初始化、watchdog初始化、Cache初始化、TLB初始化。板級(jí)移植包括:串口驅(qū)動(dòng)、Flash讀寫驅(qū)動(dòng)、HD讀寫驅(qū)動(dòng)、網(wǎng)卡驅(qū)動(dòng)。而功能層擴(kuò)展可根據(jù)需求添加新功能或裁減優(yōu)化,包括調(diào)試功能、啟動(dòng)功能、功能等。
3.4 修改代碼
主要修改的代碼為:makefile添加開發(fā)板的編譯支持;Include/configs/myboard.h開發(fā)板的定義,啟動(dòng)參數(shù)等;cpu/mips/start.s修改初始化代碼和入口;board/myboard/flash.c對(duì)應(yīng)的Nor Flash驅(qū)動(dòng);board/myboard/myboard.c對(duì)應(yīng)的板級(jí)初始化代碼;board/myboard/lowlevel_init.s初始化硬件的匯編代碼;board/myboard/serial.c串口驅(qū)動(dòng)。
4 OCTEON系列CPU的硬件初始化實(shí)例
4.1 開發(fā)環(huán)境及硬件平臺(tái)簡(jiǎn)介
采用的是宿主機(jī)+目標(biāo)板的模式,宿主機(jī)為PC+FC6,目標(biāo)板的CPU采用基于MIPS64 V2體系結(jié)構(gòu)的處理器OCTEON_CN3010,NOR Flash采用AMD公司8 Mb的AM-29DL640G.SDRAM采用三星公司512 Mb的M378T6553CZ3-CD5(64 Mb×8 bit)。存儲(chǔ)部分的硬件連接如圖1所示。
4.2 具體實(shí)現(xiàn)代碼
系統(tǒng)的起始地址統(tǒng)一規(guī)定為0xBFC00000,加電后,CPU從該地址開始執(zhí)行。該地址也就是系統(tǒng)異常處理向量表的項(xiàng)。0xBFC00000處的中斷向量表起始處的跳轉(zhuǎn)命令,跳到了InitTLBStart中,完成了系統(tǒng)的大部分初始化,例如設(shè)置寄存器、CPU、SDRAM、Flash等。以下為具體程序代碼:
系統(tǒng)初始化后,跳轉(zhuǎn)到board.c。在board.c中的checkboard()函數(shù)將進(jìn)一步設(shè)置CPU、SDRAM、Cache、串口等,并將硬件初始化代碼從Flash拷貝到SDRAM中繼續(xù)運(yùn)行,調(diào)用main_loop()函數(shù),進(jìn)入Bootloader的個(gè)c函數(shù)-main_loop()函數(shù),在這個(gè)函數(shù)中將初始化硬件平臺(tái)相關(guān)的參數(shù)、模塊,并優(yōu)化參數(shù),設(shè)置loader參數(shù)等硬件初始化。
4.3 Bootloader的燒錄和啟動(dòng)
使用Flash燒錄器把生成的u-boot.Bin文件燒錄到flash后,將其放人目標(biāo)板的Flash槽。目標(biāo)板通電后,串口輸出數(shù)據(jù)。至此,Bootloader被成功移植。
在專用的嵌入式板子運(yùn)行GNU/Linux系統(tǒng)已經(jīng)變得越來越流行。一個(gè)嵌入式Linux系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(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來作為rootfs。
4、 用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間可能還會(huì)包括一個(gè)嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。
5 結(jié)語
經(jīng)過分析引導(dǎo)轉(zhuǎn)載系統(tǒng)在嵌入式Linux系統(tǒng)中的工作原理及功能,結(jié)合移植經(jīng)驗(yàn),設(shè)計(jì)了一個(gè)基于MIPS體系的引導(dǎo)裝載系統(tǒng)模型,并給出了OCTEON初始化實(shí)例。本引導(dǎo)裝載系統(tǒng)已應(yīng)用于目標(biāo)板中,達(dá)到了預(yù)期效果,這樣證明這種引導(dǎo)裝載系統(tǒng)的模型可行,將對(duì)OCTEON系列的MIPS處理器Bootloader的設(shè)計(jì)有一定參考價(jià)值和指導(dǎo)意義。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04









