用于嵌入式系统的安全引导装置及方法

文档序号:6471802阅读:125来源:国知局

专利名称::用于嵌入式系统的安全引导装置及方法
技术领域
:本发明涉及嵌入式系统,具体地说,本发明涉及一种用于嵌入式系统的安全引导方法。
背景技术
:随着网络通信技术、芯片技术和软件技术的飞速发展,嵌入式系统的应用也越来越广泛。数字电视因其广泛的市场需求前景和巨大的商业价值,使得机顶盒成为嵌入式系统的一个广泛应用领域。目前,嵌入式操作系统主要有Vxworks,Li皿x,WinCE,0S20,Psos,u/C0S-I1,eC0S等。其中u/C0S-I1,eC0S,Li皿x,Vxworks应用最为广泛。u/C0S-I1操作系统为公开源码的实时操作系统,内核针对实时系统的要求来设计实现,相对较简单,同时u/COS-II具有代码尺寸小,易于移植的特性。Li皿x操作系统同样也是完全开放源码的,提供标准的应用程序接口(API),嵌入式Linux内核是为特殊的硬件资源进行裁减和修改后的Li皿x内核,已越来越多地应用于各种嵌入式系统中。Vxworks是一种嵌入式实时操作系统,具有高性能的内核、友好的用户开发环境,具有很好的实时性,在军方和通信业得到了广泛的应用。嵌入式计算机系统通过装载模块(Loader)来实现对系统的安全引导。目前的嵌入式系统中,Loader主要实现对CPU的初始化、串口初始化、内存DDR-SDRAM(或DDR2等)及Flash等主要硬件的初始化和加载驱动的功能。另外,某些嵌入式系统的Loader还具有在线升级功能,但现有的在线升级本质上是被动升级(主要是由于现有Loader功能简单,无法对码流进行实时分析和相应处理)。当需要从Loader升级上层应用程序时,采用读取Flash中特定扇区(Sector)的频点和调制方式等信息来锁频和下载(如机顶盒的DVB应用或IPTV应用),而上述升级相关信息是在前次关机前或重新启动前由上层应用程序根据是否有新应用程序版本需要升级而写入的。因此,当相关的上层应用程序出现故障时,可能就无法进行在线升级或修复。另外,由于所述升级相关信息均放置在Flash的写保护区之外(如图1所示,该图是现有技术中的机顶盒的Flash分区示意图),所述升级相关信息容易受到非法破坏(如黑客攻击),导致系统无法正常升级。另外,由于现有Loader的功能较为简单,在安全引导阶段也无法实现其它一些较为复杂的功能。比如现有Loader无法对写保护区内外的Image数据逐级进行完整性校验;现有Loader不能支持图形界面,因此开机画面必须在Loader运行完并启动操作系统后才能出现,这就造成用户等待时间过长,体验不佳的问题。
发明内容本发明的目的是为在嵌入式系统提供一种在Loader中嵌入操作系统以执行复杂功能的安全引导装置;本发明还提供一种能够实现主动在线升级的安全引导方法,所述引导装置及方法还能够进行逐级校验和提供快速开机画面。为实现上述发明目的,本发明提供的用于嵌入式系统的安全引导装置,包括安装在存储器写保护区域内的装载模块,其特征在于,所述装载模块包括第一引导程序模块、装载区操作系统和第二引导程序模块;所述第一引导程序模块用于开机后将系统硬件初始化,然后启动所述装载区操作系统;所述装载区操作系统具有跳转线程,所述跳转线程用于在装载区操作系统的其它线程执行完后,将程序跳转至第二引导程序模块的起始地址;所述第二引导程序模块用于将系统硬件重新初始化,然后启动主操作系统。上述技术方案中,所述装载区操作系统还具有在线升级线程,所述在线升级线程用于搜索并下载新版本的上层应用程序和/或主操作系统内核。上述技术方案中,所述装载区操作系统还包括校验功能模块,所述校验功能模块用于判断上层应用程序和/或主操作系统内核是否遭到破坏,如判断为是,则启动装载区操作系统的在线升级线程重新下载所述上层应用程序和/或主操作系统内核。上述技术方案中,所述在线升级线程还用于在检测到强制升级信号时,根据所述强制升级信号下载并安装目前最新版本的上层应用程序和或主操作系统内核。上述技术方案中,所述存储器为flash存储器,所述装载区操作系统和使用ELF文件格式,经无损压縮后存储在所述flash存储器的写保护区域内;所述第一引导程序模块还用于解析ELF文件和解无损压縮。上述技术方案中,所述第二引导程序模块的链接地址与第一引导程序模块不同,所述第二引导程序模块的烧写地址与第一引导程序模块不同。所述第二引导程序模块生成过程如下使用重定位技术修改第一引导程序的链接地址并对第一引导程序重新编译,然后按照修改后的链接地址,将重新编译后的引导程序模块烧写进所述存储器的写保护区域内。上述技术方案中,所述装载区操作系统还具有开机画面显示线程,所述开机画面显示线程的优先级高于所述跳转线程的优先级。上述技术方案中,所述装载区操作系统为u/COS-II、eCOS、Psos或Vxworks操作系统;所述主操作系统为Li皿x、Vxworks,WinCE,0S20,Psos,u/C0S-11或eC0S操作系统。为实现另一发明目的,本发明提供的用于嵌入式系统的安全引导方法,包括如下步骤1)系统上电,启动第一引导程序模块,将系统硬件初始化,然后启动所述装载区操作系统;2)装载区操作系统执行在线升级线程,所述在线升级线程用于搜索并下载新版本的上层应用程序和/或主操作系统内核;3)装载区操作系统执行跳转线程,将指针指向第二引导程序模块的起始地址;4)第二引导程序模块重新将系统硬件初始化,然后启动主操作系统。上述技术方案中,所述步骤2)还包括校验主操作系统的上层应用程序和/或主操作系统内核是否遭到破坏,如遭到破坏,则启动在线升级线程重新下载所述上层应用程序和/或主操作系统内核。上述技术方案中,所述步骤2)还包括启动开机画面显示线程,为用户提供开机画面;所述校验线程利用数字签名技术进行校验。上述技术方案中,所述步骤1)还包括在系统硬件初始化后,对装载区操作系统和第二引导程序模块的数字签名进行校验,如果校验正确,则启动所述装载区操作系统;如果校验错误,则向用户告警。上述技术方案中,所述步骤2)还包括检测强制升级信号,当检测到强制升级信号时,根据所述强制升级信号下载并安装目前最新版本的上层应用程序和/或主操作系统内核。上述技术方案中,当装载区操作系统以ELF文件和无损压縮的形式存储时,所述步骤1)还包括对所述装载区操作系统进行ELF文件解析和解无损压縮。本发明的一些事实方案与现有技术相比,具有如下技术效果1)本发明在Loader中嵌入了一个专用于安全引导的操作系统(如u/COS-II),能够通过运行该专用操作系统的各种功能线程在安全引导阶段实现多种复杂功能。2)本发明的一些实施例具有主动在线升级上层应用程序和主操作系统内核的功能,即使Flash中上层应用程序或主操作系统内核被破坏,本发明仍然能够自动在线升级应用程序和主操作系统内核。3)本发明的一些实施例能够对Flash各部分映像文件进行逐级校验,确保系统安全启动。对Flash上层应用程序或主操作系统内核的恶意破坏将导致系统告警和停止运行,能够防止黑客恶意替换上层应用程序或主操作系统内核。4)本发明的一些实施例采用无损压縮和ELF格式文件,使得Loader中的操作系统编译压縮文件占用的Flash空间较小(约200KB左右)。5)本发明的一些实施例还可以实现上电后快速显示出彩色开机画面,比在Linux启动后出彩色开机画面,具有更好的用户体验。以下,结合附图来详细说明本发明的实施例,其中图1为现有技术中的机顶盒的Flash分区示意图;图2为本发明一个实施例中的Flash分区示意图;图3为本发明一个实施例的多操作系统嵌入式平台软件启动流程图。具体实施例方式下面结合附图和具体实施方式对本发明做进一步说明。安全引导是嵌入式系统启动操作系统前的一个必要步骤。弓I导装置主要由装载模块(Loader)构成。现有技术中,由于Loader自身能力的限制,安全引导过程只能实现一些基本的功能。而本实施例主要构思是在Loader中嵌入一个专用于安全引导的操作系统,并依托该专用操作系统来实现一些复杂的功能,如实现主动在线升级、实现开机画面的快速显示、对数据完整性进行校检等。如图2所示,本实施例的Loader中嵌入了u/C0S_II操作系统,称为装载区操作系统。对数据完整性进行校检通过数字签名来实现,图2中数字签名1用于对Loader整个Image(映像)文件进行完整性校验,数字签名2用于对主操作系统(本实施例为Linux)内核和上层应用程序进行完整性校验。另一方面,本实施例设计了两个引导程序(Boot程序)模块,第一引导程序模块用于实现对CPU和板级硬件的初始化,并在初始化后引导装载区操作系统启动,第二引导程序模块主要用于引导主操作系统启动。同时,本实施例在装载区操作系统设计了一个跳转线程,用于将指针指向第二引导程序模块的起始地址。一般来说,跳转线程的优先级较低,这样在装载区操作系统运行完其它功能线程后,进入跳转线程,通过所述跳转线程自动进入第二引导程序,从而实现主操作系统的启动。本实施例中设置两个引导程序模块,由Loader中的装载区操作系统先跳转到第二个引导程序,再由第二个引导程序跳转到主操作系统,实现了系统软件的分层架构,简化系统软件的设计,避免了直接从Loader中的装载区操作系统跳转到主操作系统的复杂操作。本实施例中,所述第二个引导程序可以在第一个引导程序的基础上采用重定位技术获得,这样技术实现上较为方便。再者,本实施例还采用了ELF文件格式以及无损压縮技术,从而大幅压縮了Loader所占的存储空间,以嵌入u/COS-II操作系统为例,编译的压縮Image文件代码尺寸可以縮小到200KB。如图2所示,本实施例的Loader包括第一引导程序模块、装载区操作系统和第二引导程序模块。由于整个Loader均存储在Flash的写保护区(WP)内,因此装载区操作系统的所有线程都具有很强的安全性和稳定性。以实现在线升级为例,本实施例只需启动装载区操作系统并运行在线升级线程即可。而对比图1,现有技术的在线升级需要利用到存储在Flash写保护区(WP)外的升级相关信息,一旦这些升级相关信息遭到篡改,将无法实现在线升级功能。参考图3,本实施例的嵌入式系统的安全引导流程如下步骤l)系统上电后,启动第一个Boot程序,对CPU、串口、内存DDR(或DDR2)、Flash等进行初始化,加载Flash驱动,配置DDR(或DDR2)的时序参数等,系统启动。步骤2)读取Flash中数字签名l,校验u/C0S_II的IMAGE(映像)文件与第二个Boot的数字签名,如果正确,则执行步骤3),否则系统进行LED或串口告警指示。步骤3)对Flash分区中的u/C0S_II文件进行解无损压縮,再进行ELF格式解析。执行u/COS-II应用程序的相关功能(如开机画面显示,判断是否有新版本的升级下载流,判断是否需要遥控器强制升级等,如需要升级,新版本应用程序升级后需相应更改其数字签名2),然后跳转到第二个Boot程序的地址。步骤4)执行第二个Boot程序,实现对Linux内核和其应用程序的签名校验,如果正确,则执行步骤5),否则为上层应用程序或主操作系统内核被破坏,系统LED或串口告警指示,并进入Loader在线升级程序模块,应用程序升级后由Loader相应更改其数字签名2,并写入Flash中相应地址。步骤5)对Flash分区中的Li皿x无损压縮内核文件进行解无损压縮,进行ELF格式解析,启动带根文件系统的RAMDISK自启动Linux内核。RAMDISK顾名词义,是在RAM中模拟一个硬盘分区,功能犹如块设备。步骤6)由带根文件系统的RAMDISK的Linux内核,启动上层应用程序。本实施例的引导装置通过以下步骤实现步骤1)编写特定嵌入式硬件平台Boot程序,实现对CPU的初始化,串口初始化、内存DDR-SDRAM(或DDR2)及Flash等主要硬件的驱动和初始化,进行Flash分区等。本实施例的步骤1)为编写特定嵌入式平台的Boot程序,Boot程序一般由汇编和C混合编写完成。实现对CPU的初始化,对串口芯片,加载Flash芯片的驱动,配置内存芯片DDR-SDRAM(DDR2)的时序参数,进行Flash分区等。对内存DDR(DDR2)的初始化关键在于设计内存的时序与处理器的时序配合,对内存时序影响大并且与寄存器配置有关的参数列表如下,计算这些参数,采用汇编写入相应的配置寄存器。表1为内存芯片的一些常用参数配置。表1<table>tableseeoriginaldocumentpage8</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>Flash驱动采用汇编程序完成,采用C编写Flash分区程序。例如Flash的分区如下,采用以下数据结构ypedefstructnewflash_part_t{intfp_size;char氺fp—n咖e;}newflash_part_t;typedefstructnewflash_probe_t{longflash_phys;/氺Flash白勺净勿王里t也J:止氺/intflash_size;/*Flash总的存储空间大小*/intflasn_flags;/*Flash的总线连接方式*/intflash—type;/*Flash的类型*/intflash_cmdset;/*Flash的命令设置*/intflash_nsectors;/氺扇区白勺数量氺/intflash—sectors[FLASH—MAXSECT0RS];/*以下为Flash的芯片数量*/intflash_nchips;/*〃flash_size〃仅仅是一个Flash芯片的存储空间大小*//*以下用于Flash的分区数量*/intflash_nparts;/*如为0则表示Flash不进行分区newflash_part_tflash_parts[FLASH_MAX_PARTITI0NS];int(氺flash_ioctl_hook)(cfe—devctx—t氺ctx,iocb—buffer—t氺buffer);/*flash引擎,用于不同厂家的Flash芯片*/int(氺flash_engine_hook)(flashinstr—t氺prog);}newflash_probe_t;fprobe.flash_叩arts=8;fprobe.flash__partsfp—size=0;fprobe.flash__partsfp—n膽6=〃ApplicationProgramfprobe.flash__parts[1]fp—size=128*1024;fprobe.flash__parts[1]fp—n膽6=〃FirstBoot〃;fprobe.flash__parts[2]fp—siz6=256*1024;fprobe.flash__parts[2]fp—n膽6=〃UcosII";fprobe.flash__parts[3]fp—siz6=128*1024;fprobe.flash__parts[3]fp—n膽6=〃SecondBoot〃;fprobe.flash__parts[4]fp—siz6=128*1024;fprobe.flash__parts[4]fp—n膽6="Baselnformation";fprobe.flash__parts[5]fp—siz6=128*1024;fprobe.flash__parts[5]fp—n膽6=〃NITand0thers〃;fprobe.flash__parts[6]fp—siz6=128*1024;fprobe.flash__parts[6]fp—n膽6=〃0therlnformation〃fprobe.flash__parts[7]fp—siz6=0x400000-896*1024;fprobe.flash__parts[7]fp—n膽6=〃Li皿xKernel〃;步骤2)编写ELF文件解析格式程序。ELF全称为(ExecutableandLinkingFormat),ELF的文件主要包含以下几个部分21)ELF头(ELFHeader),每一个ELF的开始部分为一个ELF头,它是一个类型为Elf32—Ehdr类型的结构体,保护有描述文件组织情况的信息。22)程序头表(programheadertable):通知系统如何创建进程Image。用于建立一个进程Image的文件需要有一个程序头表,重定位文件没有。23)节(section):含有目标文件的大部分信息,如指令、数据、符号表、重定位信息等。其中,较为重要的几个节为(l).init初始化节,它包含有进程初始化时所执行的代码。当程序开始运行时,系统在调用main之前执行本节代码。(2).shstrtab节名节,含有节名,以字符串形式联系存储。(3).strtab字符串节,含有字符串,通常是代表与符号表入口相关名字的串。(4).symtab符号表节,含有一个符号表。(5).text正文节,含有程序的可执行指令。24)节头表(sectionheadertable):含有文件中所包含节的入口信息。每个节在节头表中有一个入口,每个入口给出了节名、节大小等信息。在连接过程中,所使用的文件需要有一个节头表。步骤3)编写解无损压縮程序(特别以gzip为典型)和数字签名校验程序。本实施例利用gzip无损解压縮技术,实现对u/COS-II与Linux的无损压縮Image文件的无损解压縮。有损压縮主要应用于图像、语音信号等,具有很高的压縮比,能够大大减小数据的存储空间,但信息受到了损失。而无损压縮应用于对宿主数据要求很高,信息量没有任何损失。这里采用gzip无损解压縮算法,Loader可以解gzip压縮的文件。压縮算法的重要三个输入对象是输入数据流、输出数据流和一张用于编码的字符串表。输入数据流是指被压縮数据;输出数据流是指压縮后输出的数据流;字符串表存储的是数据的索引号,相同块的数据只输出第一块的索引号,从而实现了数据的压縮。解压縮是其逆过程。本实施例对ELF的无损压縮可执行文件的主要步骤如下31)解无损压縮gzip文件32)ELF格式文件解析33)读入ELF可执行文件的头部信息以确定其文件格式及地址空间的大小;34)以段的形式划分地址空间;35)将可执行程序读入地址空间中的各个段,建立虚实地址间的映射关系;36)将BBS段清零;37)创建堆栈段;38)建立程序参数、环境变量等程序运行过程中所需的信息;39)启动运行。步骤4)由步骤1)、步骤2)、步骤3)组合成Boot程序,实现对CPU和硬件的初始化,同时具有解无损压縮和解析ELF格式文件的功能,烧写入Flash相应开始启动地址。本实施例主要实现在Loader中集成u/C0S_II操作系统,u/C0S_II为公开源码的实时系统,内核是针对实时系统的要求来实现的,相对比较简单,可满足较高的实时性要求。内核提供任务调度和管理、时钟管理、任务间同步和通信、内存管理和中断服务等功能。支持多任务,易于移植,适合于在Loader中完成在线系统升级等功能。步骤5)编写基于u/COS-II操作系统的应用程序,实现对嵌入式平台硬件驱动的支持,可实现系统在线升级等功能,执行完相应功能后,进行强制地址跳转,跳转到步骤6)中第二个Boot在Flash中的烧写地址。生成ELF文件格式的无损压縮IMAGE文件。最后将其烧写入Flash的Boot程序下一个分区的起始地址。—方面,本实施例需要编写在线升级的相关程序。下面,以下嵌入式系统以DVB-C机顶盒为例说明本实施例中在线升级的主要步骤,本领域技术人员可以根据这些步骤来编写在线升级的相关程序。51)DVB-C机顶盒采用电缆与前端设备进行连接,采用QAM调制方式(如常采用QAM64方式)来传输数字信号。52)本实施例的Loader带有操作系统,支持各种硬件资源的驱动,支持前面板的驱动,因此Loader系统可接收遥控器信号。在系统启动时规定遥控器的某些按键组合(如按键为7658等)为强制升级信号,当Loader收到该信号后则进入升级流程,采用该方法来实现强制升级。53)本实施例的Loader带有操作系统,对于DVB-C信号,可按照一定的步骤主动进行一定频点和调制信息的码流搜索和锁定、进行节目映射表PMT、节目关联表PAT、网络信息表NIT等表的解析和处理,寻找特定PID的升级码流;规定前端服务器和终端采用特定包标识符PID的码流进行新版本的操作系统内核与应用程序Image的升级,码流的打包方式和相应的解析方式由前端和终端系统设计时确定。54)启动Loader中的操作系统后,首先加载Tuner的驱动程序,实现对一定频点、符号率和调制方式的信号进行锁定,先根据Flash中特定存储区域的频率、调制信息来搜索码流,看是否能正常锁定;如果可以正常锁定,则进入步骤55);否则再按照运营商指定的几个常用的下载升级码流的频率、调制信息来尝试是否可重新尝试锁定码流;如果可以正常锁定,则进入步骤55);否则搜索网络信息表NIT,搜索相关频率和调制信息的码流,网络信息表NIT提供关于多组传输流和传输网络相关的信息,其中包含传输流描述符、通道频率、卫星发射器号码、调制特性等信息。搜索NIT表看是否可正常锁定;如果可以正常锁定,则进入步骤55);否则继续搜索NIT表。55)升级程序线程解析PAT表,得到节目映射表(PMT),寻找对特定升级用的特定PID的下载流。PAT表用MPEG指定的PID(OO)标明,通常用PID=0表示。它的主要作用是针对复用的每一路传输流,提供传输流中包含哪些节目、节目的编号以及对应节目的节目映射表(PMT)的位置,即PMT的TS包的包标识符(PID)的值,同时还提供网络信息表(NIT)的位置,即NIT的TS包的包标识符(PID)的值。56)寻找到下载流后,然后根据前端发送的相应的打包方式来进行相应的解析,在内存中开辟缓冲区,将各个Section的数据收入缓冲区,最后当全部包收齐后,重新按序号进行组合得到新的主操作系统内核与应用程序的整个Image。57)带有操作系统的Loader,将内存中收到的新版本的操作系统内核与应用程序的Image,烧写到Flash中的相应地址,同时修改相应的数字签名。58)最后带操作系统的Loader在升级完成后,进行软复位,进行系统重新启动。59)对于IPTV机顶盒,所需下载的升级码流通过网口进入系统,而不是电缆的方式,与之相似,带有Loader的操作系统同样可以完成在线升级的功能。另一方面,本实施例需要实现对Loader中u/COS-II与第二个Boot程序的数字签名,同时也要实现对Linux内核和上层应用程序的数字签名。数字签名主要的功能是保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。在Flash中采用数字签名主要为了验证Flash中所存储的Image的完整性。基于公钥密码体制和私钥密码体制都可以获得数字签名,目前主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou-Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。数字签名的基本原理如下由发送者把要签名的信息作Hash运算,得到一段难以伪造的并且长度固定的数据摘要。发送者用自己的私钥把数据摘要加密成数字签名。并将其与信息一并发送给接收者。接收者收到信息和数字签名后,对信息作Hash运算得到报文的数据摘要,再用公钥把数字签名解密为数据摘要。比较这两份数据摘要,如果相同则签名有效,否则签名无效。这样就确定了信息的真实性。本实施例中的Image文件,和相应的数字签名一块存储于Flash相应分区中。本实施例的数字签名算法可采用多种签名算法,数字签名算法程序应放入Loader中。在步骤5)中,u/COS-II操作系统还提供快速开机画面和强制地址跳转功能。所述快速开机画面和强制地址跳转功能采用2个不同的线程来实现,一个线程用于实现对图形部分相应寄存器的初始化,显示彩色开机画面,该线程具有较高的优先级;另一个线程用于完成地址跳转,具有较低的优先级。当彩色开机画面显示完成后,具有较低优先级的跳转线程获得时间片进行运行,从而跳转到第二个Boot写入FLASH的起始地址。跳转的实现方式如下,先进行关中断、然后将一个空函数的函数指针设置为需跳转的目标地址,执行该函数,即跳转到第二个Boot写入FLASH的起始地址,采用u/COS-II操作系统,在此跳转过程中开机画面仍保持不变,一直保持到Li皿x应用程序重新初始化芯片的图形显示部分寄存器。采用该技术,可实现机顶盒快速开机画面,一般在系统上电后4秒左右(与具体的嵌入式系统处理器的速度有关)即可以显示彩色开机画面。以下为跳转函数的一种简单实现方法,例如跳转地址为voidSTBJump(void){/*函数声明*/void(*RESETJ卿Ptr)(void);/*关中断*/0S_ENTER_CRITICAL();/*这里设置空函数的指针为跳转地址为0xbfC60000*/RESETJumpPtr=(void(*)(void))(0xbfc60000);/*进行跳转*/RESETJ卿Ptr();/*设置为U/C0S-II较低的优先级,优先级低于图形初始化和加载开机画面的优先级*/OSTaskDel(55);}步骤6)采用重定位技术(relocation),修改Boot程序的链接地址并重新编译生成目标文件。将利用重定位技术修改后的Boot程序链接地址做为为第二个Boot烧写入Flash的Sector的起始地址。编译器在编译生成目标文件时,通常都使用从零开始的相对地址。然而,在链接过程中,链接器将从一个指定的地址开始,根据输入的目标文件的顺序以段为单位将目标文件一个接一个的拼装起来。除了目标文件的拼装之外,在重定位的过程中还完成了两个任务一是生成最终的符号表;二是对代码段中的某些位置进行修改,所有需要修改的位置都由编译器生成的重定位表指出。以下以BroadcomBCM7309平台为例进行说明,第一个Boot程序烧写入Flash的地址为0x9FC00000;第二个Boot程序烧写入Flash的地址为0x9FC60000,需要相应修改cfe_rom_reloc_cached.Ids文件如下OUTPUT—ARCH(mips)ENTRY(vec_reset)SECTIONS:0149]{:0150].=0x9FC60000;/*地址由0x9FC00000修改为0x9FC60000*/:0151].text::0152]AT(0xBFC60000):0153]{:0154]—ftext=.;:0155]*(.init):0156]印rol=.;:0157]*(.text):0158]P,IDE(—runtime—reloc—start=.);:0159]>K.rel.sdata):0160]PROVIDE(_runtime_:reloc_stop=.);:0161]*(.fini):0162]氺(.rodata):0163]—etext=.;:0164]}:0165].data0x80001000::0166]AT(((ADDR(text)|OxBOOOOOOO)+SIZEOF(text)+15)&:0167]OxFFFFFFFO):0168]{:0169]—gp=ALIGN(16)+0x8000;:0170]_fdata=.;:0171]*(.rdata):0172]*(.data):0173]CONSTRUCTORS:0174]*(.sdata):0175]}:0176].=ALIGN(16);:0177]—edata=.;:0178]—fbss=;.sbss:{*(.sbss)*(.scommon)}.bss:{*(.bss)*(COMMON)}.=ALIGN(16);<formula>formulaseeoriginaldocumentpage15</formula>步骤7)Flash中第一个Boot文件、u/C0S-I1IMAGE与第二个Boot均存储在Flash的写保护区,在本实施例中,Loader包括第一个Boot文件、u/C0S-11IMAGE与第二个Boot文件。步骤8)按顺序读取Flash中从u/C0S-I1IMAGE文件的分区到第二个Boot文件末尾的所有数据,生成数字签名l,写入第二个Boot的下一个分区中,数字签名l所在Flash的Sector也应为写保护区。步骤9)生成带有根文件系统,支持RAMDISK的Li皿x内核Image文件,该内核应为自启动的方式,格式为ELF格式,并进行gzip无损压縮。自启动和非自启动内核的根文件系统不同。生成的Li皿x内核与步骤10)中上层应用程序的数字签名2,写入FLASH相应地址,一般可连续烧写,烧写地址为数字签名1的下一个Sector首地址。例如,Spansion的FlashS29GL128N,共具有128个Sector,每个Sector的尺寸大小为128K字节。步骤9)中,MTD存储设备(这里为Flash)采用JFFS2文件格式,其功能就是在管理MTD设备上实现日志型文件系统。与其它的存储设备设备存储方案相比,JFFS2会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。除了提供具有断电可靠性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现"耗损平衡"和"数据压縮"等特性。JFFS2的"耗损平衡"的功能,是由于Flash设备中每个块的擦除操作有次数上的限制,通常为100000次,但不同的制造商之间可能会有差异。一旦块的擦除次数达到这个上限,制造商就无法保证该块的正常运行。为避免过度使用某些块让设备的寿命因而縮短,JFFS2实现了一个算法,可确保Flash设备上所有区块具有一致的使用率,因此可平衡每个区块的损耗程度。同时JFFS2还具有将数据经过压縮节省空间的功能,并在使用数据前将之解压縮到RAM中。由于JFFS2的这些优越特性,已广泛用于各种MTD设备的文件系统选项。Li皿x内核在系统启动期间进行的最后操作之一就是安装根文件系统。根文件系统是所有Linux系统不可缺少的组件。本实施例步骤9)的细节步骤如下1)建立loop设备的临时挂载点#mkdir/mnt/loop2)建立文件系统映象#ddif=/dev/zeroof=/tmp/loop_tmpbs=lkcount=153603)mke2fs_F_v_mO/tmp/loop_tmp此处-F选项将可迫使mkefs2在文件上运行。否则mke2fs会抱怨/tmp/loop_tmp不是个块设备(/tmp/lo0p_tmp文件映象需要是块设备文件,前面的做法是用块设备文件/dev/loop0与之相关联)。-v选项指出mke2fs应该以verbose模式执行,_m0指出不必在文件系统上为"超级用户"保留任何区块,因为在嵌入式系统中通常是单用户系统,为"超级用户"保留区块没有意义。4)挂载映象文件#moimt_oloop/tmp/loop_tmp/mnt/loop挂载后,在/mnt/loop下就可以对文件系统的内容进行操作。5)cp操作,用cp-af命令将所需要文件拷贝到虚拟盘上6)卸载映象文件#umoimt/mnt/loop7)压縮映象文件#gzip_v9/tmp/loop_tmp自启动的Linux内核,其主要实现方法为,Linux内核启动后运行一个脚本文件,通过该脚本文件,进行mountFlash的应用程序的相应分区,加载板级驱动程序,从而运行系统的上层应用程序。步骤10)开发上层基于Li皿x的应用程序,分别烧写入Flash的相应地址。值得说明的是,本发明中,Loader中所嵌入的操作系统,除了u/C0S_II操作系统外,还可以是eCOS、Psos、Vxworks操作系统;上层主操作系统除Linux夕卜,还可以是Vxworks,WinCE,0S20,Psos,u/C0S_II,eC0S操作系统。无损压縮方式除了gzip夕卜,还可以是tar的方式;数字签名技术也可以被数字指纹、无损数字水印等方法来替代。最后所应说明的是,以上仅用以说明本发明理论原理和技术方案而非限制。本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。1权利要求一种用于嵌入式系统的安全引导装置,包括安装在存储器写保护区域内的装载模块,其特征在于,所述装载模块包括第一引导程序模块、装载区操作系统和第二引导程序模块;所述第一引导程序模块用于开机后将系统硬件初始化,然后启动所述装载区操作系统;所述装载区操作系统具有跳转线程,所述跳转线程用于在装载区操作系统的其它线程执行完后,将程序跳转至第二引导程序模块的起始地址;所述第二引导程序模块用于将系统硬件重新初始化,然后启动主操作系统。2.根据权利要求1所述的安全引导装置,其特征在于,所述装载区操作系统还具有在线升级线程,所述在线升级线程用于搜索并下载新版本的上层应用程序和/或主操作系统内核。3.根据权利要求1所述的安全引导装置,其特征在于,所述装载区操作系统还包括校验功能模块,所述校验功能模块用于判断上层应用程序和/或主操作系统内核是否遭到破坏,如判断为是,则启动装载区操作系统的在线升级线程重新下载所述上层应用程序和/或主操作系统内核。4.根据权利要求2所述的安全引导装置,其特征在于,所述在线升级线程还用于在检测到强制升级信号时,根据所述强制升级信号下载并安装目前最新版本的上层应用程序和/或主操作系统内核。5.根据权利要求1所述的安全引导装置,其特征在于,所述存储器为flash存储器,所述装载区操作系统和使用ELF文件格式,经无损压縮后存储在所述flash存储器的写保护区域内;所述第一引导程序模块还用于解析ELF文件和解无损压縮。6.根据权利要求1所述的安全引导装置,其特征在于,所述装载区操作系统还具有开机画面显示线程,所述开机画面显示线程的优先级高于所述跳转线程的优先级。7.根据权利要求l所述的安全引导装置,其特征在于,所述装载区操作系统为u/C0S-II、eC0S、Psos或Vxworks操作系统;所述主操作系统为Li皿x、Vxworks,WinCE,0S20,Psos,u/C0S-I1或eC0S操作系统。8.—种利用权利要求1所述的安全引导装置进行安全引导的方法,包括如下步骤1)系统上电,启动第一引导程序模块,将系统硬件初始化,然后启动所述装载区操作系统;2)装载区操作系统执行在线升级线程,所述在线升级线程用于搜索并下载新版本的上层应用程序和/或主操作系统内核;3)装载区操作系统执行跳转线程,将指针指向第二引导程序模块的起始地址;4)第二引导程序模块重新将系统硬件初始化,然后启动主操作系统。9.根据权利要求8所述的安全引导方法,其特征在于,所述步骤2)还包括校验主操作系统的上层应用程序和/或主操作系统内核是否遭到破坏,如遭到破坏,则启动在线升级线程重新下载所述上层应用程序和/或主操作系统内核。10.根据权利要求8所述的安全引导方法,其特征在于,所述步骤2)还包括启动开机画面显示线程,为用户提供开机画面;所述校验线程利用数字签名技术进行校验。11.根据权利要求10所述的安全引导方法,其特征在于,所述步骤1)还包括在系统硬件初始化后,对装载区操作系统和第二引导程序模块的数字签名进行校验,如果校验正确,则启动所述装载区操作系统;如果校验错误,则向用户告警。12.根据权利要求8所述的安全引导方法,其特征在于,所述步骤2)还包括检测强制升级信号,当检测到强制升级信号时,根据所述强制升级信号下载并安装目前最新版本的上层应用程序和/或主操作系统内核。13.根据权利要求8所述的安全引导方法,其特征在于,当装载区操作系统以ELF文件和无损压縮的形式存储时,所述步骤1)还包括对所述装载区操作系统进行ELF文件解析和解无损压縮。全文摘要本发明提供一种用于嵌入式系统的安全引导装置,包括安装在存储器写保护区域内的装载模块,其特征在于,所述装载模块包括第一引导程序模块、装载区操作系统和第二引导程序模块;所述第一引导程序模块用于开机后将系统硬件初始化,然后启动所述装载区操作系统;所述装载区操作系统具有跳转线程,所述跳转线程用于在装载区操作系统的其它线程执行完后,将程序跳转至第二引导程序模块的起始地址;所述第二引导程序模块用于将系统硬件重新初始化,然后启动主操作系统。另外,本发明还提供了相应的安全引导方法。本发明能够在安全引导阶段实现多种复杂功能,如主动在线升级上层应用程序和主操作系统内核,快速显示出彩色开机画面,实现逐级校检等。文档编号G06F9/445GK101751273SQ20081023992公开日2010年6月23日申请日期2008年12月15日优先权日2008年12月15日发明者潘梁,郭志川,韩锐,高超申请人:中国科学院声学研究所;北京中科智网传媒技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1