當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]PPCBoot在MPC8250上的移植方法

摘要:The Bootloader(引導(dǎo)加載程序)是嵌入式系統(tǒng)CPU加電后即開始運(yùn)行的第一段代碼,它把Linux內(nèi)核與硬件平臺(tái)銜接在一起,對(duì)于嵌入式系統(tǒng)的后續(xù)軟件開發(fā)十分重要。PPCBoot是功能十分強(qiáng)大的Bootloader。深入研究了PPCBOOt的工作機(jī)理,詳細(xì)分析了PPCBoot在基于MPC8250型處理器的嵌入式系統(tǒng)板上的移植方法、過程與移植要點(diǎn)。
關(guān)鍵詞:Bootloader;PPCBoot;MPC8250;嵌入式系統(tǒng)

1 引言
    Boodoader(引導(dǎo)加載程序)是CPU復(fù)位后和進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,主要用于完成由硬件啟動(dòng)到操作系統(tǒng)啟動(dòng)的過渡,為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU、堆棧、存儲(chǔ)器系統(tǒng)等。Bootloader代碼與CPU的內(nèi)核結(jié)構(gòu)、具體型號(hào)等因素有關(guān),其功能類似于通用PC的BOIS程序。除了依賴CPU的體系結(jié)構(gòu)外,Bootloader實(shí)際上還依賴于具體的嵌入式板級(jí)設(shè)備的配置。也就是說,對(duì)于二塊不同的嵌入式板,即使它們使用相同的CPU構(gòu)建,要想讓運(yùn)行在其中一塊板上的Bootloader程序也能運(yùn)行在另一塊板上,通常也都需要修改Boofloader的源程序。因此,在嵌入式系統(tǒng)的開發(fā)中不可能有通用的Bootloader,開發(fā)時(shí)用戶要根據(jù)具體的系統(tǒng)設(shè)計(jì)要求進(jìn)行移植。

    從嵌入式系統(tǒng)的實(shí)際開發(fā)角度講,嵌入式操作系統(tǒng)的引導(dǎo)、配置甚至應(yīng)用程序的運(yùn)行狀況都與Bootloader有一定的關(guān)聯(lián),可以說,掌握Bootloader移植是順利進(jìn)行嵌入式系統(tǒng)開發(fā)的重要利器。在嵌入式Linux系統(tǒng)中,PPCBoot是功能強(qiáng)大的Boot-loader,它支持多種CPU體系結(jié)構(gòu),但相對(duì)也比較復(fù)雜。

    本文以MPC8250微處理器和嵌入式Linux為背景,針對(duì)性的提供了PPCBOOt在開發(fā)板上的移植方法,可以應(yīng)用在基于MPC82xx系列處理器的嵌入式Linux系統(tǒng)應(yīng)用開發(fā)中。

2 PPCBoot簡(jiǎn)介
    PPCBoot是德國DENX小組開發(fā)的用于多種嵌入式CPU的Bootloader引導(dǎo)程序,主要由德國的工程師Wolfgang Denk和Intemet上的一群自由開發(fā)人員對(duì)其進(jìn)行維護(hù)和開發(fā)。支持PowerPC、ARM、MIPS、m68K等多種處理器平臺(tái),易于裁剪和調(diào)試。

    PPCBoot遵循GPL(通用公共許可)公約,完全開放源代碼。PPCBoot源代碼可以在sourceforge網(wǎng)站的社區(qū)服務(wù)器中獲得,它的項(xiàng)目主頁是http://sourceforge. net/projects/ppcboot,也可以從DENX的網(wǎng)站htrp://www.denx.de下載。筆者使用的版本是PPCBoot-2.0.0。

    PPCBoot的主要特點(diǎn)如表1所列。

3 PPCBoot的運(yùn)行流程
   
當(dāng)MPC8250上電或者施加復(fù)位信號(hào)時(shí),CPU通過讀取數(shù)據(jù)總線D[0:3l]上的值或根據(jù)內(nèi)部的缺省常數(shù)D[0:31]=0x00000000,確定它的狀態(tài)。如果CPU在讀取總線值時(shí),RSTCONF#滯表示低電平有效,以下類同)為低電平,則硬復(fù)位配置字(HRCW)從總線上讀取,若RSTCONF#為高電平,則HRCW選用內(nèi)部的默認(rèn)值。

    上電后,啟動(dòng)存儲(chǔ)控制器CSO#(對(duì)應(yīng)于Flash的片選信號(hào))有效,選中Flash,CPU地址線上輸出硬件復(fù)位中斷向量對(duì)應(yīng)的地址0x00000100,開始讀第1條指令,在PPCBoot中,這條指令對(duì)應(yīng)于/ppcboot/cpu/mpc8260/start.S中的_start:標(biāo)號(hào)處。下面介紹具體的啟動(dòng)過程。

    (1)運(yùn)行start.S(/ppcboot/cpu/mpc8260/start.S)從一start:標(biāo)號(hào)處執(zhí)行。在完成CPU本身基本的初始化后,主要是初始化CPU內(nèi)部寄存器的一些狀態(tài),主要設(shè)置IMMR、ICTRL、D-cache、I-cache等。從in_flash:處執(zhí)行,設(shè)置C語言工作環(huán)境,再調(diào)轉(zhuǎn)到代碼bl cpu_init_f(第2步)和bl board_init_f(第3步)。

    (2)CPU的底層初始化(/ppcboot/cpu/mpc8260/epu_init.C)從start.S中跳轉(zhuǎn)到函數(shù)cpu_init_f(volatileimmap_t*immr)處,進(jìn)行CPU的底層初始化,主要設(shè)置了watchdog、SIUMCR寄存器、時(shí)基(timebase)寄存器、PIT(周期中斷寄存器)、鎖相環(huán)、系統(tǒng)定時(shí)器、存儲(chǔ)控制器和CPM等。

    (3)板上的第1次初始化(/ppcboot/lib_ppc/board.c)完成第2步后,返回地址放人LR寄存器中,再從start.S中跳轉(zhuǎn)到函數(shù)board_init_f(ulong bootflag)處,該函數(shù)實(shí)現(xiàn)板上的第1次初始化,完成SMC初始化和一些硬件測(cè)試。尤其是RAM初始化,并分配內(nèi)存空間,保存板子的信息,準(zhǔn)備好在RAM中重定向代碼。然后調(diào)用relocate_code函數(shù),將PPCBoot移到RAM中運(yùn)行。

    (4)搬運(yùn)代碼到內(nèi)存中(/ppeboot/cpu/mpc8260/8tart.s)
    從函數(shù)board_init_f跳到/ppcboot/cpu/mpc8260/start.S中的relocate_code()函數(shù)處,然后將代碼搬至SDRAM工作,調(diào)整GOT表,做一些重定位后開始在RAM中運(yùn)行代碼。

    (5)板上的第2次初始化(/ppcboot/lib_ppc/board.C)在relocate_code()函數(shù)后將跳轉(zhuǎn)到board_init_r()函數(shù)處執(zhí)行第2次初始化,主要完成一些數(shù)據(jù)結(jié)構(gòu)、高端模塊及系統(tǒng)設(shè)備的相關(guān)初始化。

    (6)命令的解析與執(zhí)行(/ppcboot/commom/main.C)在進(jìn)行初始化后,PPCBoot會(huì)執(zhí)行函數(shù)board_init_r()中的main_loop()函數(shù)循環(huán),即監(jiān)控程序。PPCBoot的監(jiān)控程序會(huì)根據(jù)用戶從控制臺(tái)的輸入完成預(yù)先設(shè)定的工作。該函數(shù)在/ppebooffeommom/main.c中。在函數(shù)main_loop()會(huì)調(diào)用/ppeboot/com-mom/main.C中的run_command()函數(shù)完成命令的解析,并轉(zhuǎn)去執(zhí)行相應(yīng)的處理函數(shù)。

4 PPCBoot源代碼的修改和編譯
   
要將PPCBoot移植到新的開發(fā)板上,應(yīng)該根據(jù)具體的系統(tǒng)設(shè)計(jì)要求,按照系統(tǒng)硬件配置修改PPC-Boot的源代碼。

    移植主要包括2個(gè)層面的移植,第1層是針對(duì)CPU的移植,PPCBoot支持的CPU類型在目錄/cpu中,MPC8250對(duì)應(yīng)在/cpu/mpe8260目錄;第2層是針對(duì)具體board的移植,這主要根據(jù)開發(fā)者自己的具體設(shè)計(jì)修改代碼。為了減少工作量,可以從PPC-Boot支持的demo板選擇1個(gè)和自己的開發(fā)板硬件相似的板子作為模板,這里,筆者選擇MPC8260ADS板作為參考板,直接修改與該板上相關(guān)的源代碼文件。

4.1 開發(fā)板硬件
   
在修改PPCBoot源代碼之前,要了解開發(fā)板的硬件配置情況,根據(jù)硬件配置對(duì)源代碼中的配置值做相應(yīng)的修改,表2列舉出板子的硬件基本信息。另外,MPC8250開發(fā)板的外圍設(shè)備接口主要有10/100M自適應(yīng)網(wǎng)卡接口、RS232串口、PCI接口和全功能JTAG調(diào)試接口等。

4.2 修改PPCBoot源代碼
   
從移植PPCBoot的最小要求和PPCBOOt能正常啟動(dòng)的角度出發(fā),并比較MPC8260ADS板和開發(fā)目標(biāo)板異同之后,主要考慮修改以下文件。

    (1)修改頭文件mpc8260ads.h。mpe8260ads.h是板子的配置文件,它配置了板子的CPU、系統(tǒng)時(shí)鐘、SDRAM、Flash系統(tǒng)及其他所有開發(fā)板的信息,是需要修改的最重要的文件。

    在該文件中設(shè)置IMMR CPU寄存器基地址,注意該值必須與操作系統(tǒng)的設(shè)置一樣。
    #define CFG—IMMR 0xF0000000
    設(shè)置CPU時(shí)鐘
    #define CONFIG_8260_CLKIN 33333333 /*in Hz */
    設(shè)置:Flash、SDRAM,包括基址、大小、環(huán)境參數(shù)的偏移和大小,還有內(nèi)存刷新周期,都要根據(jù)目標(biāo)板的具體情況設(shè)置;設(shè)置環(huán)境參數(shù),用于網(wǎng)絡(luò)下載、啟動(dòng);另外,BR0、OR0、BR1、OR1等內(nèi)存控制值,Watch.dog及一些目標(biāo)板特定的參數(shù)也要根據(jù)實(shí)際情況設(shè)置。

    (2)Linux啟動(dòng)時(shí),要從PPCBoot獲得內(nèi)存基地址和大小、時(shí)鐘頻率、波特率、IP地址等參數(shù),所以ppcbooth文件中定義的結(jié)構(gòu)體bd-info的成員順序必須與Linux操作系統(tǒng)的定義保持一致,實(shí)現(xiàn)參數(shù)的正確傳遞。

    (3)修改mpc8260ads.c。mpe8260ads.c中配置了I/O端口表,初始化SDRAM,完成板子的校驗(yàn)工作。其中,I/O端口表配置了網(wǎng)絡(luò)端口和板上其他一些通用I/O端口,函數(shù)initdram根據(jù)SDRAM寄存器的配置完成SDRAM的初始化。

    (4)修改config.mk。修改ppcboot/board/mpc826Oads/config.mk,設(shè)置TEXT_BASE=0xEF000000,使得TEXT_BASE的值和頭文件中CFG_FLASH_BASE的值一樣,這個(gè)值定義啟動(dòng)地址。

4.3 編譯PPCBoot
    在代碼修改完成后,就要進(jìn)行重新編譯,對(duì)PPC-Boot的編譯需要在Linux主機(jī)上建立PowerPC的交叉編譯環(huán)境器。自己動(dòng)手一步一步建立交叉編譯環(huán)境通常比較復(fù)雜,最簡(jiǎn)單的方法是使用別人編譯好的交叉編譯工具。筆者使用的是MontaVista提供的完整的開發(fā)工具集CDK。

    在RedHat Linux9.O主機(jī)上建立好交叉編譯工具后,要修改PPCboot目錄下的Makefile文件,指定交叉編譯器的完整路徑名,然后用下面的命令進(jìn)行配置和編譯:
    #make MPC8260ADS_ config
    #make
    編譯完成后,得到3個(gè)文件:
    * ppcboot:這是ELF(Executable and Link Format)格式的文件,可以被大多數(shù)Debug程序識(shí)別。
    *ppcboot.bin:這是二進(jìn)制bin文件,純粹的ppeboot的二進(jìn)制執(zhí)行代碼,不包含ELF格式和調(diào)試信息。這個(gè)文件一般用于安裝燒錄ppcboot到用戶的開發(fā)板。
    *ppcboot.srec:Motorola的S-Record格式.是可以通過串口下載到開發(fā)板中的文件。

5 移植PPCBoot
    編譯好的ppcboot.bin文件通過JTAG接口下載到Flash的起始地址處,再次上電后,就可以看到PPCBoot的啟動(dòng)信息:
    PPCBoot 2.0.O(Jul 12 2005—18:21:391
    RewinTeeh:Fengjunping&&Huangjianzhong MPC8260
    Reset Status:External Soft.Extemal Hard MPC8260
    Clock Configuration
    —Bus—to—C0re Mull 5x.VCO Div 2,60x Bus Freq 20—60,Core Freq 100-300一dtbrg 0,coreenf Oxob,busdf 5,cpmdf 1,plldf 0,pnmf 2
    一vco__out 199999998,scc_elk 49999999,brg_elk49999999
    一cpu_clk 166666665,epm_clk 99999999,bus_clk33333333
    CPU: MPC8260(Rev 14,Mask unknown[immr=0x0064,k=0x002d])at 166.666 MHz
    Board:Motorola MPC8260ADS
    I2C:ready
    DRAM:16MB
    F1ash:16 MB
    ***Warning—bad CRC.using default environment
    In: serial
    Out:serial
    Err:serial
    stan linux now(y/n):=>

    輸入help得到所有命令列表,help command列出該命令的功能。緊接著測(cè)試Flash和網(wǎng)卡,如果都正常工作,表明移植PPCBoot的工作基本完成,可以接著調(diào)試內(nèi)核和文件系統(tǒng)。

    實(shí)際過程中可能由于考慮不周而需要多次修改。移植成功后,也可以添加一些其他功能(如LED的驅(qū)動(dòng)等),在此基礎(chǔ)上添加功能相對(duì)比較容易。

6 結(jié)束語
    Bootloader在嵌入式開發(fā)中是操作系統(tǒng)和硬件的樞紐,它為操作系統(tǒng)內(nèi)核的啟動(dòng)提供了必要的條件和參數(shù)。在移植過程中,開發(fā)人員除了要掌握Bootloader的結(jié)構(gòu)和工作流程外,還要對(duì)相關(guān)硬件有一定的了解。目前,筆者移植的PPCBoot已經(jīng)能夠穩(wěn)定地運(yùn)行在開發(fā)板上,而且可以通過FIash和網(wǎng)絡(luò)加載內(nèi)核和文件系統(tǒng),為后續(xù)開發(fā)特別是驅(qū)動(dòng)程序的開發(fā)奠定了良好的基礎(chǔ)。對(duì)于不同的CPU和開發(fā)板,其基本方法和步驟是相同的,筆者希望自己的經(jīng)驗(yàn)?zāi)軐?duì)有關(guān)嵌入式設(shè)計(jì)人員提供幫助。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉