发明内容
有鉴于此,本发明实施例提供了一种芯片及其启动方法,用以解决现有技术中存在的boot代码维护成本较高及出错可能性较高的问题。
第一方面,提供了一种芯片启动方法,包括:
中央处理器CPU在上电后,获取引导镜像文件,所述引导镜像文件中包括通用引导代码和差异引导代码,所述通用引导代码由不同芯片的引导代码中的通用部分编译得到,所述通用引导代码包括第一引导代码段和第二引导代码段,所述差异引导代码由所述CPU所属芯片与其它芯片的引导代码中的差异部分编译得到;
所述CPU从所述引导镜像文件中读取所述第一引导代码段,并运行所述第一引导代码段;
所述CPU从所述第一引导代码段中读取所述差异引导代码的指示信息;
所述CPU根据所述差异引导代码的指示信息,从所述引导镜像文件中读取并运行所述差异引导代码;
所述CPU运行所述第二引导代码段,以完成所述CPU所属芯片的引导。
结合第一方面,在第一方面的第一种可能的实现方式中,所述差异引导代码至少用于初始化双倍速率同步动态随机存储器DDR,所述读取并运行所述差异引导代码之后,所述方法还包括:
所述DDR根据运行后的所述差异引导代码完成初始化;
所述CPU运行所述第二引导代码段包括:
在所述DDR初始化后,所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第二引导代码段中包括操作系统OS镜像文件的指示信息,所述OS镜像文件用于启动OS;
所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段包括:
所述CPU从所述第二引导代码段中获取所述OS镜像文件的指示信息;
所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段之后,所述方法还包括:
所述CPU根据所述OS镜像文件的指示信息将所述OS镜像文件读取到所述DDR中并运行所述OS镜像文件。
结合第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述CPU运行所述第二引导代码段之前,所述方法还包括:
所述CPU在所述DDR初始化后,将所述第一引导代码段、所述差异引导代码和所述第二引导代码段读取到所述DDR中,以共同完成所述CPU所属芯片的引导。
结合第一方面或第一方面的第一种至第三种任一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述第一引导代码段和所述第二引导代码段之间是非连续存储的,所述差异引导代码存储在所述第一引导代码段和所述第二引导代码段的非连续部分;或者,所述第一引导代码段和所述第二引导代码段之间是连续存储的。
第二方面,提供了一种芯片,包括:
中央处理器CPU,用于在上电后,获取引导镜像文件,所述引导镜像文件中包括通用引导代码和差异引导代码,所述通用引导代码由不同芯片的引导代码中的通用部分编译得到,所述通用引导代码包括第一引导代码段和第二引导代码段,所述差异引导代码由所述CPU所属芯片与其它芯片的引导代码中的差异部分编译得到;从所述引导镜像文件中读取所述第一引导代码段,并运行所述第一引导代码段;从所述第一引导代码段中读取所述差异引导代码的指示信息;根据所述差异引导代码的指示信息,从所述引导镜像文件中读取并运行所述差异引导代码;以及,运行所述第二引导代码段,以完成所述CPU所属芯片的引导。
结合第二方面,在第二方面的第一种可能的实现方式中,所述差异引导代码至少用于初始化双倍速率同步动态随机存储器DDR,所述芯片还包括:
DDR,用于根据运行后的所述差异引导代码完成初始化;
所述CPU具体用于在所述DDR初始化后,所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述第二引导代码段中包括操作系统OS镜像文件的指示信息,所述OS镜像文件用于启动OS;
所述CPU具体用于从所述第二引导代码段中获取所述OS镜像文件的指示信息;根据所述OS镜像文件的指示信息将所述OS镜像文件读取到所述DDR中并运行所述OS镜像文件。
结合第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,所述CPU还用于:
在所述DDR初始化后,将所述第一引导代码段、所述差异引导代码和所述第二引导代码段读取到所述DDR中,以共同完成所述CPU所属芯片的引导。
结合第二方面或第二方面的第一种至第三种任一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述第一引导代码段和所述第二引导代码段之间是非连续存储的,所述差异引导代码存储在所述第一引导代码段和所述第二引导代码段之间的非连续部分;或者,所述第一引导代码段和所述第二引导代码段之间是连续存储的。
通过上述技术方案,将不同芯片的差异代码从boot代码中分离处理,boot代码中仅保存不同芯片的通用代码,这样就可以使同一产品领域的芯片甚至同一厂商的多款芯片共用一份boot代码,进而降低维护的代码数量,降低维护成本以及降低出错可能性。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种芯片启动方法的流程示意图,包括:
11:CPU在上电后,获取引导镜像文件,所述引导镜像文件中包括通用引导代码和差异引导代码。
所述通用引导代码为所述特定芯片的引导代码中的通用部分编译得到,在本发明中,所述引导代码的通用部分是指引导代码中的可以适用于多种芯片的通用代码。在实际产品中,不同芯片对应的引导镜像文件中总会有内容相同或者功能相同的、通用的引导代码段,在本发明实施例中,提取内容相同或者功能相同的、通用的代码段作为通用引导代码。
所述通用引导代码包括第一引导代码段和第二引导代码段,所述差异引导代码由所述CPU所属芯片与其它芯片的引导代码中的差异部分编译得到;
本发明实施例中,每个芯片中有各自的CPU,每个芯片有各自对应的引导镜像文件,每个CPU可以读取自身芯片对应的引导镜像文件。与现有技术不同的是,现有技术中,引导镜像文件中包括由boot代码编译后得到的代码,该boot代码中不仅包括不同芯片间的通用代码,还包括不同芯片间的差异代码。
而本发明实施例中,引导镜像文件中包括的通用引导代码是由不同芯片的引导代码中的通用部分编译得到,例如,由现有的各芯片的boot代码中的通用部分编译得到;而差异引导代码是由该CPU所属芯片与其它芯片的引导代码中的差异部分编译得到,例如,CPU所属芯片为芯片A,那么该CPU获取的引导镜像文件中的差异引导代码是芯片A与其它芯片的boot代码中的差异部分编译得到。上述的差异引导代码也可以称为二进制文件。因此,本发明实施例可以将不同芯片间的差异代码从boot代码中分离出来,将该差异代码编译后形成独立的二进制文件,而boot代码仅保存不同芯片的通用代码,将该仅保存不同芯片的通用代码编译后得到引导代码。
上述的差异代码(或者说该CPU所属芯片与其它芯片引导代码中的差异部分)是指不同芯片间所具有的不同的代码,例如,参见图2,前面是寄存器地址,后面是需要进行的操作,这些代码经过编译后可以组成上述的二进制文件(或者称为差异引导代码)。
上述的通用代码(或者称为不同芯片的引导代码中的通用部分)是指不同芯片间所具有的相同的代码。根据厂商和芯片系列的不同,通用代码和差异代码是可以配置的。通常来讲,通用代码是某个厂商或某个芯片序列中通用模块所定义的标准代码,例如,用于启动和/或初始化串口、网口、USB接口等标准化接口的代码,差异代码是指配置给芯片的除了通用代码之外的代码。
另外,本发明实施例中的通用引导代码可以分为两部分,可以称为第一引导代码段和第二引导代码段。第一引导代码段和第二引导代码段之间在存储时可以是连续存储的,可以组成一个连续存储的整体,或者,第一引导代码段和第二引导代码段之间在存储时也可以分别是非连续存储的,差异化引导代码位于第一引导代码段和第二引导代码段之间的非连续存储部分。
12:所述CPU从所述引导镜像文件中读取所述第一引导代码段,并运行所述第一引导代码段。
第一引导代码段中记录差异引导代码的指示信息,通过运行第一引导代码段可以获取引导镜像文件中的差异引导代码。在本发明实施例中,所述指示信息可以为差异引导代码的位置信息,用来调用所述差异引导代码的命令信息,或者其他用于锁定并运行所述差异引导代码的参数信息。第一引导代码段可以理解为是引导镜像文件的入口文件,以读取初步的引导镜像文件,完成初步的CPU配置。
13:所述CPU从所述第一引导代码段中读取所述差异引导代码的指示信息;
由于第一引导代码段中记录二进制文件的信息,根据运行后的第一引导代码段可以获取差异引导代码的指示信息。
14:所述CPU根据所述差异引导代码的指示信息,从所述引导镜像文件中读取并运行所述差异引导代码。
差异引导代码是由CPU所属芯片与其它芯片的差异代码编译得到的,用于一些硬件的配置,该硬件配置至少包括DDR的初始化,除此之外,还可以用于CPU模式切换、通用寄存器配置或flash控制器的初始化等。
通过读取并运行差异引导代码可以完成DDR的初始化,DDR的初始化例如可以包括DDR控制器的初始化和DDR物理接口(DDR PHY)的初始化,DDR控制器的初始化例如包括配置控制接口时序、配置读写访问时序、配置低功耗设置、配置自刷新设置等。DDR PHY的初始化例如包括匹配基准时钟和数据采样时钟。
15:所述CPU运行所述第二引导代码段,以完成所述CPU所属芯片的引导。可选的,在读取并运行差异引导代码后,可以完成DDR的初始化,即14之后还可以包括:
所述DDR根据运行后的所述差异引导代码完成初始化;
所述CPU运行所述第二引导代码段包括:
在所述DDR初始化后,所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段。
可选的,所述第二引导代码段中包括OS镜像文件的指示信息,所述OS镜像文件用于启动OS;
所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段包括:
所述CPU从所述第二引导代码段中获取所述OS镜像文件的指示信息;
所述CPU将所述第二引导代码段读取到所述DDR中并运行所述第二引导代码段之后,所述方法还包括:
所述CPU根据所述OS镜像文件的指示信息将所述OS镜像文件读取到所述DDR中并运行所述OS镜像文件。之后可以启动OS。
可选的,上述的引导镜像文件以及OS镜像文件可以存储在flash中。本发明实施例中的镜像文件(包括引导镜像文件和OS镜像文件)是指经过编译后的能够在CPU中运行的代码。
本实施例通过将不同芯片间的差异代码从boot代码中分离处理,boot代码中仅保存不同芯片的通用代码,这样就可以使同一产品领域的芯片甚至同一厂商的多款芯片共用一份boot代码,进而降低维护的代码数量,降低维护成本以及降低出错可能性。
图3为本发明实施例提供的另一种芯片启动方法的流程示意图,本实施例以引导代码分为两部分,二进制文件位于两部分的引导代码之间为例。
参见图4,为图3对应的系统结构示意图,该系统包括CPU 41、DDR 42和闪存(flash)43,引导镜像文件保存在flash中,引导镜像文件包括通用引导代码和差异引导代码,本实施例以通用引导代码分为两部分为例,分别用boot1和boot2表示,差异引导代码用reg_info.bin表示。可以理解的是,该flash中还可以保存OS镜像文件,OS镜像文件是对OS代码进行编译后可以由CPU执行的文件,以及其它一些镜像文件,如文件系统镜像文件(file system)。boot1和boot2是可以配置的,只要保证boot1中至少记录差异引导代码的指示信息。本实施例以boot1用于记录差异引导代码的指示信息,boot2用于完成必要的硬件配置为例。
在编译引导镜像文件时,可以在boot1和boot2之间预留一段空白空间,规定好起始地址和长度,在得到reg_info.bin后,将reg_info.bin插入到boot1和boot2之间的空白空间。也就是说,本实施例中boot1自身是连续存储的,boot2自身也是连续存储的,但是,boot1和boot2之间是非连续存储的,reg_info.bin自身是连续存储的,且reg_info.bin位于boot1和boot2之间非连续存储的位置,使得boot1、reg_info.bin和boot2依次连续存储。
reg_info.bin可以是对差异代码进行编译后得到。其中,通用代码可以通过Excel表格编译后得到通用引导代码,差异代码可以通过Excel表格编译后得到差异引导代码。之后将差异引导代码(Reg_info.bin)和通用引导代码(包括boot1以及boot2)一起烧录到flash中。
参见图3,本实施例包括:
31:CPU上电后,从flash的设定位置读取并运行boot1。
如图4的(1)所示。
其中,设定位置可以是CPU中默认的位置信息,例如,通常默认从地址0开始读取,同时boot1的起始位置也是地址0。因此CPU可以从地址0开始读取并运行boot1。
通过读取并运行boot1,可以完成初步的CPU配置,并为后续解析差异引导代码提供信息。
32:CPU根据boot1从flash中读取并运行差异引导代码reg_info.bin。差异引导代码至少用于完成DDR的初始化,还可以用于其它硬件的配置和初始化。
如图4的(2)所示。
其中,boot1中可以包含该reg_info.bin的指示信息,CPU根据该boot1可以读取并运行reg_info.bin。
DDR的初始化内容可以参见14的具体内容。
其它硬件的配置和初始化例如包括CPU模式切换、通用寄存器的配置、flash控制器的初始化等。
其中,CPU模式切换可以包括将CPU的模式从超级保护(SVC32)模式切换到slow模式,再从slow模式切换到normal模式。通用寄存器的配置可以包括管脚配置、开启时钟、开启供电等。Flash控制器的初始化可以包括撤销复位、开启时钟等。
33:在至少DDR初始化后,CPU将flash中的引导镜像文件(boot1+reg_info.bin+boot2)拷贝到DDR中,并运行boot2,以及,在boot2运行之后,CPU将flash中的OS镜像文件拷贝到DDR中,并运行该OS镜像文件,以启动操作系统。
如图4的(3)所示。
其中,CPU可以驱动flash控制器将上述的镜像文件(包括引导镜像文件和OS镜像文件)从flash中拷贝到DDR。
boot1中可以记录boot2的入口信息,或者,可以预先配置boot2的开始几条代码是可以直接执行的,那么根据boot1的记录或者直接执行的代码可以运行boot2。通过运行boot2可以完成一些必要的硬件的初始化,例如串口、网口等的初始化。
boot2中可以记录OS镜像文件的指示信息,在boot2运行后,CPU可以根据boot2中记录的OS镜像文件的指示信息从flash中将OS镜像文件读取到DDR中,并运行OS镜像文件,以启动OS。
本实施例通过将reg_info.bin和通用引导代码(boot1+boot2)进行分离处理,reg_info.bin由自身芯片与其它芯片间的差异代码编译得到,通用引导代码由不同芯片间的通用代码编译得到,可以保证不同芯片的通用引导代码(boot1+boot2)是一样的,不同芯片只需要维护reg_info.bin这个差异引导代码即可,通用引导代码(boot1+boot2)只需要维护一份,进而可以降低维护成本,降低出错率。
图5为本发明实施例提供的另一种芯片启动方法的流程示意图,本实施例以引导代码为整体为例。
参见图6,为图5对应的系统结构示意图,该系统包括CPU 61、DDR 62和闪存(flash)63,引导镜像文件保存在flash中,引导镜像文件包括通用引导代码和差异引导代码,本实施例以通用引导代码为一部分为例,用boot表示,差异引导代码用Reg_info.bin表示。也就是说,本实施例中boot自身是连续存储的,reg_info.bin自身是连续存储的,使得boot和reg_info.bin依次连续存储。
可以理解的是,该flash中还可以保存OS镜像文件,OS镜像文件是对OS代码进行编译后可以由CPU执行的文件,以及其它一些镜像文件,如文件系统镜像文件,如文件系统代码(file system)。
其中,通用代码可以通过Excel表格编译后得到通用引导代码,差异代码可以通过Excel表格编译后得到差异引导代码。之后将差异引导代码(reg_info.bin)和通用引导代码boot)一起烧录到flash中。
参见图5,本实施例包括:
51:CPU上电后,从flash的设定位置读取并运行boot。
如图6的(1)所示。
其中,设定位置可以是CPU中默认的位置信息,例如,通常默认从地址0开始读取,同时boot的起始位置也是地址0。因此CPU可以从地址0开始读取并运行boot。
此时运行的boot可以是整个boot中的一部分,该部分可以完成对CPU的初步配置,并且可以根据该部分运行差异引导代码reg_info.bin。
52:CPU根据运行的部分boot从flash中读取并运行差异引导代码reg_info.bin。差异引导代码至少用于完成DDR的初始化,还可以用于其它硬件的配置和初始化。
如图6的(2)所示。
其中,运行的部分boot中可以包含该reg_info.bin的指示信息,CPU根据该运行的部分boot可以读取并运行reg_info.bin。
其中,boot中可以记录结束的信息,通过从设定位置读取并运行boot后,可以通过依次执行代码直至代码表明结束,该结束之前的boot即为上述运行的部分boot。
运行的部分boot和剩余的部分boot可以类似上一实施例的boot1和boot2,该两部分也是可以配置的,只要保证运行的部分boot中至少记录差异引导代码的指示信息。本实施例以运行的部分boot用于记录差异引导代码的指示信息,剩余的部分boot用于完成必要的硬件配置为例。
DDR的初始化内容可以参见14的具体内容。
其它硬件的配置和初始化可以参见32的具体内容。
53:在至少DDR初始化后,CPU将flash中的引导镜像文件(boot+reg_info.bin)拷贝到DDR中,并运行剩余的部分boot,以及,在剩余的部分boot运行之后,CPU将flash中的OS镜像文件拷贝到DDR中,并运行该OS镜像文件,以启动操作系统(OS)。
如图6的(3)所示。
其中,CPU可以驱动flash控制器将上述的镜像文件(包括引导镜像文件和OS镜像文件)从flash中拷贝到DDR。
51中已经运行的部分boot中可以记录未运行的另一部分boot(即剩余的部分boot)的入口信息,或者,可以预先配置剩余的部分boot的开始几条代码是可以直接执行的,那么根据已经运行的部分boot的记录或者直接执行的代码可以运行该剩余的部分boot。通过运行该剩余的部分boot可以完成一些必要的硬件的初始化,例如串口、网口等的初始化。
剩余部分boot中可以记录OS镜像文件的指示信息,在剩余部分boot运行后,CPU可以根据剩余部分boot中记录的OS镜像文件的指示信息从flash中将OS镜像文件读取到DDR中,并运行OS镜像文件,以启动OS。
本实施例通过将reg_info.bin和通用引导代码(boot)进行分离处理,reg_info.bin由自身芯片与其它芯片间的差异代码编译得到,通用引导代码由不同芯片间的通用代码编译得到,可以保证不同芯片的通用引导代码(boot)是一样的,不同芯片只需要维护reg_info.bin这个的差异引导代码即可,通用引导代码(boot)代码只需要维护一份,进而可以降低维护成本,降低出错率。
图7为本发明实施例提供的一种芯片的结构示意图,该芯片70包括CPU71,CPU 71用于在上电后,获取引导镜像文件,所述引导镜像文件中包括通用引导代码和差异引导代码,所述通用引导代码由不同芯片的引导代码中的通用部分编译得到,所述通用引导代码包括第一引导代码段和第二引导代码段,所述差异引导代码由所述CPU所属芯片与其它芯片的引导代码中的差异部分编译得到;从所述引导镜像文件中读取所述第一引导代码段,并运行所述第一引导代码段;从所述第一引导代码段中读取所述差异引导代码的指示信息;根据所述差异引导代码的指示信息,从所述引导镜像文件中读取并运行所述差异引导代码;以及,运行所述第二引导代码段,以完成所述CPU所属芯片的引导。
可选的,所述差异引导代码至少用于初始化DDR,所述芯片还包括:DDR72,DDR 72用于根据运行后的所述差异引导代码完成初始化;所述CPU 71具体用于在所述DDR 72初始化后,所述CPU 71将所述第二引导代码段读取到所述DDR 72中并运行所述第二引导代码段。
可选的,所述第二引导代码段中包括OS镜像文件的指示信息,所述OS镜像文件用于启动OS;所述CPU 71具体用于从所述第二引导代码段中获取所述OS镜像文件的指示信息;根据所述OS镜像文件的指示信息将所述OS镜像文件读取到所述DDR 72中并运行所述OS镜像文件。
可选的,所述CPU 71还用于:在所述DDR 72初始化后,将所述第一引导代码段、所述差异引导代码和所述第二引导代码段读取到所述DDR 72中,以共同完成所述CPU 71所属芯片的引导。
可选的,所述第一引导代码段和所述第二引导代码段之间是非连续存储的,所述差异引导代码存储在所述第一引导代码段和所述第二引导代码段之间的非连续部分;或者,所述第一引导代码段和所述第二引导代码段之间是连续存储的。
可选的,引导镜像文件和OS镜像文件可以存储在flash中。
本实施例通过将不同芯片的差异代码从boot代码中分离处理,boot代码中仅保存不同芯片的通用代码,这样就可以使同一产品领域的芯片甚至同一厂商的多款芯片共用一份boot代码,进而降低维护的代码数量,降低维护成本以及降低出错可能性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。