本发明涉及嵌入式系统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等技术方案完全不同。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。