浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 其它綜合

PPCBoot在MPC8250上的移植方法

發(fā)布時間:2007/8/29 0:00:00 訪問次數(shù):812

作者:西安電子科技大學(xué)ISN國家重點實驗室 馮俊平,黃建忠,王新梅


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


關(guān)鍵詞:Bootloader;PPCBoot;MPC8250;嵌入式系統(tǒng)


1 引言


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


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


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


2 PPCBoot簡介


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


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


PPCBoot的主要特點如表1所列。



3 PPCBoot的運行流程


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


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


(1)運行start.S(/ppcboot/cpu/mpc8260/start.S)從一start:標(biā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寄存器、時基(timebase)寄存器、PIT(周期中斷寄存器)、鎖相環(huán)、系統(tǒng)定時器、存儲控制器和CPM等。


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


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


(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)行初始化后

作者:西安電子科技大學(xué)ISN國家重點實驗室 馮俊平,黃建忠,王新梅


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


關(guān)鍵詞:Bootloader;PPCBoot;MPC8250;嵌入式系統(tǒng)


1 引言


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


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


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


2 PPCBoot簡介


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


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


PPCBoot的主要特點如表1所列。



3 PPCBoot的運行流程


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


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


(1)運行start.S(/ppcboot/cpu/mpc8260/start.S)從一start:標(biā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寄存器、時基(timebase)寄存器、PIT(周期中斷寄存器)、鎖相環(huán)、系統(tǒng)定時器、存儲控制器和CPM等。


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


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


(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)行初始化后

相關(guān)IC型號

熱門點擊

 

推薦技術(shù)資料

羅盤誤差及補償
    造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13692101218  13751165337
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!