本發(fā)明涉及嵌入式系統(tǒng)BSP技術領域,尤其涉及的是一個BOOTROM引導多核CPU啟動的方法及系統(tǒng)。
背景技術:
BSP是板級支持包,即Board support package,是介于主板硬件和操作系統(tǒng)之間的一層,應該說是屬于操作系統(tǒng)的一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好的運行于硬件主板。
嵌入式系統(tǒng)領域,對于多核的應用分為對稱多處理(即英語:Symmetrical Multi-Processing,簡稱SMP)和非對稱多處理(即英語:Asymmetric-Multi-Processing,縮寫為AMP,ASMP),它們適應各種不同的應用。盡管它們存在很大差異,但是都要把處理器內的多個核啟動,讓它們能執(zhí)行各自指令并工作起來。
在linux系統(tǒng)中,以PowerPC雙核P1021舉例。SMP系統(tǒng),U-BOOT(即Universal Boot Loader)將從核的啟動代碼編譯在一個頁(page)(4KB)的段內,地址為__secondary_start_page,并在U-BOOT啟動時已將這段代碼復制到了隨機存取存儲器(即Random Access Memory,RAM,又稱“隨機存儲器)中。主核要啟動從核時,由于E500 CPU啟動地址都是0xffff-fffc,因此要將從核代碼所在的物理地址通過MMU TLB(即Memory Manage Unit
,內存管理單元,Translation Lookaside Buffers,轉換快表)映射到4G-4K的虛地址空間,然后啟動從核。這樣的弊端就是:如果CPU從local bus Nor Flash(Local Bus總線又稱為CPU總線)啟動(大部分應用都如此),Nor Flash的地址空間在4GB空間的最后64MB(Nor flash的大?。瑔訌暮撕?,由于重新設置了最后4K的虛地址為RAM地址了,那么Nor flash地址空間(除去頂端4KB)將無法訪問,出現(xiàn)數(shù)據(jù)訪問中止(即Data Access abort)異常。
在vxworks系統(tǒng)中,也以PowerPC雙核P1021舉例。AMP系統(tǒng),主從核都有各自獨立的BOOTROM和操作系統(tǒng)映像(即OS image)。那么系統(tǒng)就是存在2個BOOTROM,燒寫在Nor flash上不同位置。主核啟動從核時,設置啟動頁轉換寄存器BPTR(即Boot Page Translation Register)為從核BOOTROM所在的地址,接著啟動從核。這樣從核啟動的流程和主核啟動流程完全一樣。這樣的啟動思路簡單,通俗易懂。但是每次燒錄BOOTROM要燒錄2個,同時也要編譯2個BOOTROM,燒錄與版本維護比較繁瑣。
因此,現(xiàn)有技術還有待于改進和發(fā)展。
技術實現(xiàn)要素:
鑒于上述現(xiàn)有技術的不足之處,本發(fā)明的目的在于提供一個BOOTROM引導多核CPU啟動的方法及系統(tǒng),旨在提出一種代碼維護簡單,只用一份BOOTRM即可啟動多核CPU,并且不影響B(tài)OOTROM空間訪問的方案,解決AMP系統(tǒng)的維護燒錄繁瑣的問題,也解決了SMP系統(tǒng)啟動從核后不能訪問NOR FLASH的問題。
為了達到上述目的,本發(fā)明解決技術問題所采用的技術方案如下:
一個BOOTROM引導多核CPU啟動的方法,包括以下步驟:
A、預先設置區(qū)分CPU的處理器ID寄存器;
B、CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像;
C、在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址;
D、設置啟動頁轉換寄存器地址,啟動從核。
所述的一個BOOTROM引導多核CPU啟動的方法,其中,步驟A具體為,設置處理器ID寄存器是0時為主核,處理器ID寄存器是N時為從核,其中,N為不等于0的數(shù)字。
所述的一個BOOTROM引導多核CPU啟動的方法,其中,步驟B具體包括:
B1、主核從0xffff-fffc取指令初始化內部寄存器,進行初步設置;
B2、通過訪問雙倍速率同步動態(tài)隨機存儲器,將整個BOOTROM代碼復制到隨機存取存儲器RAM空間,地址為RAM-HIGH-ADRS;
B3、通過絕對跳轉指令將程序計數(shù)器移到隨機存取存儲器RAM空間執(zhí)行BOOTROM代碼,初始化網(wǎng)口串口、外設,設置啟動參數(shù)、BOOT菜單、自動啟動;
B4、主核將操作系統(tǒng)映像從FLASH區(qū)域以文件方式讀取到RAM-LOW-ADRS;
B5、主核跳轉到RAM-LOW-ADRS,啟動主核操作系統(tǒng)映像。
所述的一個BOOTROM引導多核CPU啟動的方法,其中,步驟C具體為:在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼以文件方式從NOR FLASH拷貝到從核內存啟動地址512M+RAM-LOW-ADRS的雙倍速率同步動態(tài)隨機存儲器起始地址處。
所述的一個BOOTROM引導多核CPU啟動的方法,其中,步驟D具體包括:
D1、設置啟動頁轉換寄存器地址為0xffff-fffc;
D2、從核在BOOTROM中執(zhí)行,并從0xffff-fffc讀取第一條指令執(zhí)行;
D3、當讀取處理器ID寄存器為從核時,執(zhí)行初始化從核的指令;
D4、接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,進入從核操作系統(tǒng)映像執(zhí)行。
所述的一個BOOTROM引導多核CPU啟動的方法,其中,步驟D3具體包括:
步驟D3中所述的執(zhí)行初始化從核的指令具體為:初始化內部寄存器的值,并設置內存管理單元轉換快表的初始值,給程序計數(shù)寄存器賦值為操作系統(tǒng)映像在內存中的起始地址,令512M+RAM-LOW-ADRS的物理地址映射到RAM-LOW-ADRS的虛擬地址,映射大小為512M。
一個BOOTROM引導多核CPU啟動的系統(tǒng),包括:
預設置模塊,用于預先設置區(qū)分CPU的處理器ID寄存器;
主核啟動模塊,用于CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像;
拷貝模塊,用于在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址;
從核啟動模塊,用于設置啟動頁轉換寄存器地址,啟動從核。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,預設置模塊具體為設置處理器ID寄存器是0時為主核,處理器ID寄存器是N時為從核,其中,N為不等于0的數(shù)字。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,主核啟動模塊包括:
主核初步設置單元,用于主核從0xffff-fffc取指令初始化內部寄存器,進行初步設置;
復制單元,用于通過訪問雙倍速率同步動態(tài)隨機存儲器,將整個BOOTROM代碼復制到隨機存取存儲器RAM空間,地址為RAM-HIGH-ADRS;
跳轉啟動單元,用于通過絕對跳轉指令將程序計數(shù)器移到隨機存取存儲器RAM空間執(zhí)行BOOTROM代碼,初始化網(wǎng)口串口、外設,設置啟動參數(shù)、BOOT菜單、自動啟動;
第一讀取單元,用于主核將操作系統(tǒng)映像從FLASH區(qū)域以文件方式讀取到RAM-LOW-ADRS;
主核啟動單元,用于主核跳轉到RAM-LOW-ADRS,啟動主核操作系統(tǒng)映像。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,拷貝模塊具體為在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼以文件方式從NOR FLASH拷貝到從核內存啟動地址512M+RAM-LOW-ADRS的雙倍速率同步動態(tài)隨機存儲器起始地址處;
從核啟動模塊包括:
地址設置單元,用于設置啟動頁轉換寄存器地址為0xffff-fffc;
第二讀取單元,用于從核在BOOTROM中執(zhí)行,并從0xffff-fffc讀取第一條指令執(zhí)行;
從核初始化單元,用于當讀取處理器ID寄存器為從核時,執(zhí)行初始化從核的指令;
從核啟動單元,用于接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,進入從核操作系統(tǒng)映像執(zhí)行。
有益效果:相較于現(xiàn)有技術,本發(fā)明提供的一個BOOTROM引導多核CPU啟動的方法及系統(tǒng),所述方法包括:A、預先設置區(qū)分CPU的處理器ID寄存器;B、CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像;C、在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址;D、設置啟動頁轉換寄存器地址,啟動從核。所述系統(tǒng)包括:預設置模塊,主核啟動模塊,拷貝模塊,從核啟動模塊。本發(fā)明技術方案中BOOTROM代碼只需編譯一份,就可同時啟動多核CPU,解決了AMP系統(tǒng)中維護燒錄繁瑣的問題,也解決了SMP系統(tǒng)啟動從核后不能訪問NOR FLASH的問題,是一個BOOTROM啟動一個CPU中的多個核心core,與多個BOOTROM啟動一個CPU,和每個CPU擁有獨立的BOOTROM等技術方案完全不同。
附圖說明
圖1為現(xiàn)有技術中AMP系統(tǒng)里4GB雙核CPU地址空間分布圖。
圖2為本發(fā)明提供的一個BOOTROM引導多核CPU啟動的方法較佳實施例的流程圖。
圖3為本發(fā)明提供的一個BOOTROM引導雙核CPU啟動的CPU地址空間分布圖。
圖4為本發(fā)明提供的一個BOOTROM引導多核CPU啟動的系統(tǒng)較佳實施例的功能模塊圖。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚、明確,以下參照附圖并舉實施例對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
請參見圖2,圖2是本發(fā)明提供的一個BOOTROM引導多核CPU啟動的方法較佳實施例流程圖,包括步驟:
S100、預先設置區(qū)分CPU的處理器ID寄存器;
即預先設置區(qū)分CPU的處理器ID寄存器PIR,即Processor Identification Register,用來區(qū)分是處理器CPU的哪個核心,即core。
具體實施時,步驟S100可具體為,設置處理器ID寄存器PIR是0時為主核,處理器ID寄存器PIR是N時為從核,其中,N為不等于0的數(shù)字,比如CPU為雙核時,可設置PIR=0時為主核,PIR=1時為從核,如果CPU為三核,可設置PIR=0為主核,PIR=1代表第一從核,PIR=2代表第二核心,如果CPU為四核及以上等,可依次類推。
BOOTROM在運行過程中根據(jù)PIR來判斷當前運行的是哪個CPU,以雙核為例,比如PIR=0為主核,PIR=1為從核,從而進行相應的指令操作。
S200、CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像;
即CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像,即OS image;
具體來說,CPU上電后,若當前運行為主核時,與傳統(tǒng)的啟動流程一樣,初始化內部寄存器,DDR SDRAM(即Double Data Rate SDRAM,縮寫為DDR SDRAM,即雙倍速率同步動態(tài)隨機存儲器),內存搬移,網(wǎng)口串口初始化等一系列動作,并引導OS image啟動。
以AMP系統(tǒng)為例,單個BOOTROM啟動2個以上核心處理器。請參閱圖1,圖1為現(xiàn)有技術中AMP系統(tǒng)里2個核心4GB CPU地址空間分布圖:主從核BOOTROM處于FLASH ROM(ROM,即Read Only Memory,只讀存儲器)的最高1MB;主從核版本存放在FLASH ROM的剩余63MB;主核image占用0~512MB DDR SDRAM空間;從核占用512M~1024M DDR SDRAM空間;其它空間為CPU內部寄存器,CPLD,PCI,NAND FLASH等空間。
請參閱圖3,圖3為本發(fā)明提供的一個BOOTROM引導雙核CPU啟動的CPU地址空間分布圖,具體來說,圖3是整個BOOTROM引導OS image并啟動從核的過程中地址空間分布圖,整個DDR SDRAM大小為1GB,主核與從核AMP系統(tǒng)各自占用512MB DDR SDRAM空間。
請一并參閱圖1、圖2和圖3,再進一步,在本步驟中,步驟S200具體包括:
S210、CPU上電后,默認主核執(zhí)行指令,主核從0xffff-fffc取指令初始化內部寄存器,進行初步設置;
S220、通過訪問雙倍速率同步動態(tài)隨機存儲器,將整個BOOTROM代碼復制到隨機存取存儲器RAM空間,地址為RAM-HIGH-ADRS;
S230、通過絕對跳轉指令將程序計數(shù)器移到隨機存取存儲器RAM空間執(zhí)行BOOTROM代碼,初始化網(wǎng)口串口、外設,設置啟動參數(shù)、BOOT菜單、自動啟動;
S240、主核將操作系統(tǒng)映像從FLASH區(qū)域以文件方式讀取到RAM-LOW-ADRS;
S250、主核跳轉到RAM-LOW-ADRS,啟動主核操作系統(tǒng)映像。
具體來說,即S210、CPU上電后,默認主核執(zhí)行指令,主核從0xffff-fffc取指令初始化內部寄存器,配置DDR SDRAM控制器,調整MMU TLB(即Memory Management Unit,存儲器管理單元,Translation Look-aside Buffers傳輸后緩沖器,即內存管理單元轉換快表),設置片選屬性等基本的準備工作;
S220、此時DDR SDRAM(即雙倍速率同步動態(tài)隨機存儲器)可以訪問,將整個BOOTROM代碼都復制到RAM空間,地址為RAM-HIGH-ADRS;
S230、通過絕對跳轉指令將PC(即program counter,縮寫為PC,程序計數(shù)器)移到RAM空間執(zhí)行,仍然執(zhí)行BOOTROM代碼,接著初始化網(wǎng)口串口、外設,設置啟動參數(shù)、BOOT菜單、自動啟動等;
S240、啟動OS階段,主核將操作系統(tǒng)映像(即OS image)從FLASH區(qū)域以文件方式讀取到RAM-LOW-ADRS;
S250、主核跳轉到RAM-LOW-ADRS,啟動主核操作系統(tǒng)映像,即啟動主核OS image。
S300、在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址;
即在主核OS image應用程序中,將從核的OS image代碼以文件方式從NOR FLASH拷貝到從核內存啟動地址;
請繼續(xù)參閱圖2和圖3,步驟S300具體為:在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼以文件方式從NOR FLASH拷貝到從核內存啟動地址512M+RAM-LOW-ADRS的雙倍速率同步動態(tài)隨機存儲器DDR SDRAM起始地址處;
即在主核OS image應用程序運行中,將從核的OS image以文件方式讀取到512M+RAM-LOW-ADRS的DDR SDRAM起始地址處。
S400、設置啟動頁轉換寄存器地址,啟動從核;
即設置啟動頁轉換寄存器BPTR地址為0xffff-fffc,并讓從核啟動。
請繼續(xù)參閱圖2和圖3,步驟S400具體包括:
S410、設置啟動頁轉換寄存器地址為0xffff-fffc;
S420、從核在BOOTROM中執(zhí)行,并從0xffff-fffc讀取第一條指令執(zhí)行;
S430、當讀取處理器ID寄存器為從核時,執(zhí)行初始化從核的指令;
S440、接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,進入從核操作系統(tǒng)映像執(zhí)行。
具體來說,即S420、此為從核執(zhí)行,從核在BOOTROM中執(zhí)行,從核從0xffff-fffc取第一條指令執(zhí)行;
S430、讀取PIR寄存器為從核時,執(zhí)行初始化從核的指令;
即讀取PIR寄存器為1后,執(zhí)行初始化從核的指令。
步驟S430中所述的執(zhí)行初始化從核的指令具體為:只初始化內部寄存器的值,并設置內存管理單元轉換快表MMU TLB的初始值,給程序計數(shù)寄存器PC(PC的全稱是Program Counter)賦值為操作系統(tǒng)映像在內存中的起始地址,令512M+RAM-LOW-ADRS的物理地址映射到RAM-LOW-ADRS的虛擬地址,映射大小為512M,那么從核運行的虛地址范圍仍然為0~512MB。
S440、接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,進入從核操作系統(tǒng)映像執(zhí)行。
具體來說,從核從0xffff-fffc取第一條指令執(zhí)行,也就是BOOTROM的代碼,以雙核為例,當讀取PIR=1后,不會再去初始化DDR,網(wǎng)口串口等,而只要初始化內部寄存器的值,并且設置MMU TLB的一些初始值。接著做好跳轉準備,給PC寄存器賦值為OS image在內存中的起始地址,接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,從核就直接跳轉到OS image執(zhí)行了,此刻即進入OS image階段,明顯比主核啟動過程快了很多,比主核簡單。
當然,上述技術方案在SMP系統(tǒng)里也類似,針對SMP系統(tǒng),從核從ROM取指令,并不改變MMU TLB對最后一個4KB page的重新映射。
本發(fā)明技術方案中BOOTROM代碼只需編譯一份,就可同時啟動多核CPU,解決了AMP系統(tǒng)中維護燒錄繁瑣的問題,也解決了SMP系統(tǒng)啟動從核后不能訪問NOR FLASH的問題,是一個BOOTROM啟動一個CPU中的多個核心core。
請參閱圖4,圖4為本發(fā)明提供的一個BOOTROM引導多核CPU啟動的系統(tǒng)較佳實施例的功能模塊圖,包括:
預設置模塊10,用于預先設置區(qū)分CPU的處理器ID寄存器,具體如上所述;
主核啟動模塊20,用于CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像,具體如上所述;
拷貝模塊30,用于在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址,具體如上所述;
從核啟動模塊40,用于設置啟動頁轉換寄存器地址,啟動從核,具體如上所述。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,預設置模塊10具體為設置處理器ID寄存器是0時為主核,處理器ID寄存器是N時為從核,其中,N為不等于0的數(shù)字,具體如上所述。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,主核啟動模塊20包括:
主核初步設置單元,用于主核從0xffff-fffc取指令初始化內部寄存器,進行初步設置,具體如上所述;
復制單元,用于通過訪問雙倍速率同步動態(tài)隨機存儲器,將整個BOOTROM代碼復制到隨機存取存儲器RAM空間,地址為RAM-HIGH-ADRS,具體如上所述;
跳轉啟動單元,用于通過絕對跳轉指令將程序計數(shù)器移到隨機存取存儲器RAM空間執(zhí)行BOOTROM代碼,初始化網(wǎng)口串口、外設,設置啟動參數(shù)、BOOT菜單、自動啟動,具體如上所述;
第一讀取單元,用于主核將操作系統(tǒng)映像從FLASH區(qū)域以文件方式讀取到RAM-LOW-ADRS,具體如上所述;
主核啟動單元,用于主核跳轉到RAM-LOW-ADRS,啟動主核操作系統(tǒng)映像,具體如上所述。
所述的一個BOOTROM引導多核CPU啟動的系統(tǒng),其中,拷貝模塊30具體為在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼以文件方式從NOR FLASH拷貝到從核內存啟動地址512M+RAM-LOW-ADRS的雙倍速率同步動態(tài)隨機存儲器起始地址處,具體如上所述;
從核啟動模塊40包括:
地址設置單元,用于設置啟動頁轉換寄存器地址為0xffff-fffc;
第二讀取單元,用于從核在BOOTROM中執(zhí)行,并從0xffff-fffc讀取第一條指令執(zhí)行,具體如上所述;
從核初始化單元,用于當讀取處理器ID寄存器為從核時,執(zhí)行初始化從核的指令,具體如上所述;
從核啟動單元,用于接著直接以絕對跳轉方式,跳轉到RAM-LOW-ADRS運行,進入從核操作系統(tǒng)映像執(zhí)行,具體如上所述。
綜上所述,本發(fā)明所提供的一種一個BOOTROM引導多核CPU啟動的方法及系統(tǒng),所述方法包括:A、預先設置區(qū)分CPU的處理器ID寄存器;B、CPU上電后,默認主核執(zhí)行指令,啟動主核操作系統(tǒng)映像;C、在主核操作系統(tǒng)映像應用程序中,將從核操作系統(tǒng)映像代碼從NOR FLASH拷貝到從核內存啟動地址;D、設置啟動頁轉換寄存器地址,啟動從核。所述系統(tǒng)包括:預設置模塊,主核啟動模塊,拷貝模塊,從核啟動模塊。本發(fā)明技術方案中BOOTROM代碼只需編譯一份,就可同時啟動多核CPU,解決了AMP系統(tǒng)中維護燒錄繁瑣的問題,也解決了SMP系統(tǒng)啟動從核后不能訪問NOR FLASH的問題,是一個BOOTROM啟動一個CPU中的多個核心core,與多個BOOTROM啟動一個CPU,和每個CPU擁有獨立的BOOTROM等技術方案完全不同。
當然,本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關硬件(如處理器,控制器等)來完成,所述的程序可存儲于一計算機可讀取的存儲介質中,該程序在執(zhí)行時可包括如上述各方法實施例的流程。其中所述的存儲介質可為存儲器、磁碟、光盤等。
應當理解的是,本發(fā)明的應用不限于上述的舉例,對本領域普通技術人員來說,可以根據(jù)上述說明加以改進或變換,所有這些改進和變換都應屬于本發(fā)明所附權利要求的保護范圍。