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