固件扩展方法以及固件生成器的制作方法

文档序号:6583857阅读:191来源:国知局

专利名称::固件扩展方法以及固件生成器的制作方法
技术领域
:本发明有关于固件扩展(firmwareextension),更具体地,有关于往基准固件映像(baselinefirmwareimage)中增加使用者定制功能且不影响基准固件原代码的方法。
背景技术
:在产品的生产线上通常需要固件扩展,尤其在上游供货商和下游供货商之间。上游供货商通常提供与基准固件映像捆绑在一起的硬件,当需要在单个嵌入式系统中部署各种附加应用时,基准固件映像仅仅能提供基本功能,而无法执行变化的功能。因此,下游供货商需要在售出产品前进一步修改基准固件映像以提供附加的功能。传统上,修改基准固件映像的功能时需要原代码,然而上游供货商通常不希望释放原代码,因为其可能涉及到与硬件设计相关的机密信息。图1为传统的固件修改的流程图。步骤101中,上游供货商释放基准固件映像的原代码,包括头文件(headerfile)、库和目标文件(objectfile)。步骤103中,下游供货商修改原代码以完成硬件的扩展功能。步骤103中,从修改后的原代码中编译修改的固件映像,其中原始的固件映像被替代。由于头文件、库和目标文件包含不期望被影响到的机密信息,因此有必要提出一种高级固件扩展方法。
发明内容有鉴于此,本发明提供一种固件扩展方法以及一种固件生成器。根据本发明之一实施例,提供一种固件扩展方法,用于嵌入式系统,所述方法包括提供基准固件映像和与所述基准固件映像相关的头文件;根据所述头文件生成扩展固件映像,所述扩展固件映像包括一个或多个扩展功能;产生回调表,所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针;以及合并所述基准固件映像、所述扩展固件映像和所述回调表,以产生合并的固件映像。根据本发明之另一实施例,提供一种固件生成器,用于嵌入式系统中基准固件映像功能的扩展,所述固件生成器包括编译器,根据与所述基准固件映像相关的头文件,编译一个或多个扩展功能的原代码为扩展固件映像;以及构建模块,产生回调表,并合并所述扩展固件映像、所述基准固件映像和所述回调表,以产生合并的固件映像,其中所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针。根据本发明之另一实施例,提供一种固件生成器,用于嵌入式系统中基准固件映像功能的扩展,所述固件生成器包括编译器,根据与所述基准固件映像相关的头文件,编译一个或多个扩展功能的原代码为扩展固件映像,并产生回调表,其中所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针;以及构建模块,合并所述扩展固件映像、所述基准固件映像和所述回调表,产生合并的固件映像。本发明所提供的固件扩展方法以及固件生成器,无需上游供货商提供基准固件映像的原代码,即可进行固件扩展,能够保护可能涉及硬件设计相关机密信息的原代码。图1为传统的固件修改的流程图。图2a为合并的固件映像的实施例。图2b显示了基于图2a的基准固件映像和符号表的实施例。图2c显示了基于图2a的扩展固件映像和回调表的实施例。图3a显示了固件生成器的实施例。图3b为根据本发明固件扩展方法的流程图。图4为应用合并固件的实施例的流程图。具体实施例方式为了让本发明目的、特征、及优点能更明显易懂,下文特举较佳实施例做详细说明。实施例是为说明本发明之用,并非用以限制本发明。本发明的保护范围以所附申请专利权利要求为准。图2a为合并的(merged)固件映像的实施例。合并的固件映像200包括基准固件映像210和扩展固件映像220,两者通过回调表(callbacktable)222连接。基准固件映像210由上游供货商提供,且在与扩展固件映像220合并时,并不会受到影响(imcompromised)。不会受到影响即是指,通过各种已知的码保护技术,基准固件映像210是可执行的,但是却难以通过逆向工程(reverseengineering)进行反编译(decompiled)。同时,基于开放的标准产生扩展固件映像220,允许下游供货商完成附加功能。最初,基准固件映像210储存于嵌入式系统的内存设备(图中未显示),且内存设备的容量有限。基准固件映像210保持在相同的位置,而扩展固件映像220和回调表222可储存于内存设备的空闲空间(freespace)。为说明在内存设备中有多少可用容量,上游供货商可提供配置字段202,用于记录内存配置参数,例如空闲空间的大小和扩展固件映像220的基址(baseaddress)。在本实施例中,基准固件映像210可周期性或条件性地根据扩展指针204切换到回调表222,使得能够加载并执行扩展固件映像220中的扩展功能。特别的,回调表222的入口地址可以是内存设备中的绝对地址,并且当合并扩展固件映像220和回调表222时,即获取并将入口地址写入至扩展指针204。图2b显示了基于图2a的基准固件映像210和符号表(symboltable)212的实施例。基准固件映像210可包括扩展固件映像220所需的多个基本应用程序接口(ApplicationProgramInterface,API)功會g。API功會g可以是硬件抽象化层(hardwareabstractionlayer)功能,例如I/O、DMA、编译码器、DSP和其它硬件驱动器,也可以是软件库,例如标准0/0++、数学、科学和工程子程序(sub-routines)。如图2b所示,API功能API1、API2...APIn分别储存在绝对地址ADDR1、ADDR2...ADDRn。为了共享API功能上游供货商提供符号表212,符号表212用于指示API功能的入口地址以及头文件甜,其中头文件甜揭示API功能定义。藉此,在编译时间和运行时间,扩展功能即可参考API功能。图2c显示了基于图2a的的扩展固件映像220和回调表222的实施例。扩展固件映像220由下游供货商提供,通常包括一个或多个扩展功能FUNCl、FUNC2...FUNCn。当扩展固件映像220从下游供货商原代码进行编译时,每个功能有一相对的入口地址PTR1、PTR2...PTRn。建立回调表222以储存入口地址,其中当开始相应的中断时,则加载并执行扩展功能。并且,回调表222可包括使能标志224,以标示扩展功能是否被使能。如果执行基准固件映像210读取使能标志224时,其中扩展功能被标示为失能(disabled),则不会加载和执行扩展固件映像220中的功能。回调表222可进一步包含备用空间用于储存与扩展功能相关的使用者定制的配置。图3a显示了固件生成器300的实施例,通过该固件生成器300,从基准固件映像210、原代码#SRC和头文件甜可产生图2a中的合并的固件映像200。固件生成器300包括构建模块310和编译器320。基于头文件ffil,编译器320编译与基准固件映像210相关的原代码ftSRC。在编译期间,也使用配置字段202和符号表222中的信息。当获得扩展固件映像220后,从扩展固件映像220中产生图2c所示的回调表222,包括指向扩展固件映像220中扩展功能入口的指针。构建模块310可于合并扩展固件映像220和基准固件映像210的同时产生回调表222。另一种方法,由于回调表222包含与扩展固件映像220相关的信息,因此编译扩展固件映像220的时候,也可由编译器320产生回调表222。产生回调表222后,构建模块310接着将回调表222与基准固件映像210和扩展固件映像220合并,以产生合并的固件映像200。如上所述,基准固件映像210具有配置字段202,配置字段202包括内存配置参数(例如用于储存扩展固件映像的可用容量)和扩展固件映像的基址。通过内存配置参数,编译器320可控制扩展固件映像220的大小并正确获取扩展固件映像220中每个功能的入口地址。扩展指针204是用于储存回调表222入口的保护区域,回调表222中的使能标志224定义了扩展功能是否被使能。基准固件映像210可周期性地或者有条件地触发子功能调用(sub-functioncall)以经由扩展指针204检查使能标志224。举例而言,可配置定时器,以便周期性执行扩展功能。也可定义特定事件或者中断以触发子功能调用,并且如果使能标志224将扩展功能使能,则加载并执行该特定事件或者中断。基准固件映像210可包括多个API功能,并采用头文件甜揭示API功能定义。上游供货商提供符号表212,符号表212包括指向API功能入口的指针。符号表212可以是基准固件映像210的一部分,或者和头文件甜一样,是独立文件。下游供货商生产原代码#SRC时可包含头文件甜,并且编译器320接着编译原代码#SRC与头文件甜以及符号表212,产生扩展固件映像220,以使API功能可以为扩展功能所用。基本上,固件生成器300可以是在产品制造阶段采用的软件模块。图3b为根据本发明固件扩展方法的流程图。当下游供货商需要往原始基准固件映像中增加新的功能时,尤其需要采用固件扩展方法,且该方法不需要上游供货商的任何原代码。步骤301中,下游供货商开始固件扩展程序。步骤303中,从上游供货商处获取基准固件映像210、预定义的配置字段202、头文件甜以及符号表212。保留扩展指针204,以便储存之后所决定的值。步骤305中,下游供货商应用头文件甜产生一个或多个扩展功能的原代码#SRC。步骤307中,以头文件甜作参考,将原代码#SRC编译为扩展固件映像220。步骤309中,从扩展固件映像220中建立回调表222,回调表222包括每个扩展功能的入口地址。步骤311中,基准固件映像210、扩展固件映像220和回调表222合并为一个合并的固件映像200。合并的固件映像200可储存在与基准固件映像210相同的内存设备中,其中基准固件映像210被替代。步骤313中,基准固件映像210包含的扩展指针204,其内容被更新为回调表222的入口地址(藉此可参考回调表222),以便当基准固件映像210中的子功能调用被有条件地触发时,以加载扩展固件映像220中的扩展功能。图4为应用合并的固件的实施例流程图。由于在基准固件映像210中没有提前定义扩展固件映像220中的扩展功能的主体(body),因此需要触发扩展功能的机制。步骤401中,启动采用合并的固件映像200的嵌入式系统。步骤403中,执行基准固件映像210。请注意,在基准固件映像210中提前完成子功能调用以支持固件扩展。步骤405中,周期性或有条件地执行基准固件映像210中的子功能调用,以便根据储存于使能标志224中的值,确定扩展固件映像220是否被使能。举例而言,可由特定事件或中断触发子功能调用。如果扩展固件映像220没有被使能,则子功能调用回到零(皿11),并且程序回到步骤403。否则,如果扩展固件映像220被使能,则在步骤407中,子功能调用参考回调表222,以便从扩展固件映像220中加载执行相应的扩展功能。当扩展功能执行完成后,程序回到步骤403。通常,扩展固件映像220与基准固件映像210共享相同的堆栈内存。合并的固件映像200可从内存设备中直接读取并由处理器执行,或者在执行前加载至内存设备。基准固件映像210和扩展固件映像220可同时共享一些全局变量(globalvariable),这些全局变量可与API功能一同储存在符号表212中。本发明虽以较佳实施例描述,然而并不限于此。各种变形、修改和所述实施例各种特征的组合均属于本发明所主张的范围,本发明的权利范围应以申请专利权利要求为准。权利要求一种固件扩展方法,用于嵌入式系统,所述方法包括提供基准固件映像和与所述基准固件映像相关的头文件;根据所述头文件生成扩展固件映像,所述扩展固件映像包括一个或多个扩展功能;产生回调表,所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针;以及合并所述基准固件映像、所述扩展固件映像和所述回调表,以产生合并的固件映像。2.根据权利要求1所述的固件扩展方法,其特征在于,进一步包括提供内存配置参数,包括用于储存所述扩展固件映像的可用容量和所述扩展固件映像的基址;以及根据所述内存配置参数执行所述合并的步骤。3.根据权利要求2所述的固件扩展方法,其特征在于,所述合并的步骤包括将所述回调表的入口储存至扩展指针。4.根据权利要求3所述的固件扩展方法,其特征在于所述回调表包括使能标志,用于指示所述扩展功能是否被使能;以及根据所述扩展指针和所述使能标志,通过所述回调表,所述基准固件映像有条件地加载并执行所述扩展功能。5.根据权利要求1所述的固件扩展方法,其特征在于所述基准固件映像包括多个应用程序接口功能;以及所述头文件揭示所述应用程序接口功能,所述应用程序接口功能可应用于所述扩展功能。6.根据权利要求5所述的固件扩展方法,其特征在于,所述扩展固件映像的产生包括提供所述扩展功能的原代码;提供符号表,所述符号表包括指向所述应用程序接口功能的入口的指针;以及编译所述原代码与所述头文件以及所述符号表,产生所述扩展固件映像。7.—种固件生成器,用于嵌入式系统中基准固件映像功能的扩展,所述固件生成器包括编译器,根据与所述基准固件映像相关的头文件,编译一个或多个扩展功能的原代码为扩展固件映像;以及构建模块,产生回调表,并合并所述扩展固件映像、所述基准固件映像和所述回调表,以产生合并的固件映像,其中所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针。8.根据权利要求7所述的固件生成器,其特征在于所述基准固件映像包括内存配置参数,所述内存配置参数包括用于储存所述扩展固件映像的可用容量和所述扩展固件映像的基址;以及所述构建模块根据所述内存配置参数合并所述基准固件映像、所述扩展固件映像和所述回调表。9.根据权利要求8所述的固件生成器,其特征在于所述基准固件映像包括扩展指针;以及所述构建模块将所述回调表的入口储存至所述扩展指针。10.根据权利要求9所述的固件生成器,其特征在于所述回调表包括使能标志,用于指示所述扩展功能是否被使能;以及根据所述扩展指针和所述使能标志,通过所述回调表,所述基准固件映像有条件地加载并执行所述扩展功能。11.根据权利要求7所述的固件生成器,其特征在于,所述基准固件映像包括多个应用程序接口功能;以及所述头文件揭示所述应用程序接口功能,所述应用程序接口功能可应用于所述扩展功能。12.根据权利要求11所述的固件生成器,其特征在于所述编译器编译所述原代码和所述头文件以及符号表,产生所述扩展固件映像;以及所述符号表包括指向所述应用程序接口功能的入口的指针。13.—种固件生成器,用于嵌入式系统中基准固件映像功能的扩展,所述固件生成器包括编译器,根据与所述基准固件映像相关的头文件,编译一个或多个扩展功能的原代码为扩展固件映像,并产生回调表,其中所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针;以及构建模块,合并所述扩展固件映像、所述基准固件映像和所述回调表,产生合并的固件映像。14.根据权利要求13所述的固件生成器,其特征在于所述基准固件映像包括内存配置参数,所述内存配置参数包括用于储存所述扩展固件映像的可用容量和所述扩展固件映像的基址;以及所述构建模块根据所述内存配置参数合并所述基准固件映像、所述扩展固件映像和所述回调表。15.根据权利要求14所述的固件生成器,其特征在于所述基准固件映像包括扩展指针;以及所述构建模块将所述回调表的入口储存至所述扩展指针。16.根据权利要求15所述的固件生成器,其特征在于所述回调表包括使能标志,用于指示所述扩展功能是否被使能;以及根据所述扩展指针和所述使能标志,通过所述回调表,所述基准固件映像有条件地加载并执行所述扩展功能。17.根据权利要求13所述的固件生成器,其特征在于所述基准固件映像包括多个应用程序接口功能;以及所述头文件揭示所述应用程序接口功能,所述应用程序接口功能可应用于所述扩展功能。18.根据权利要求17所述的固件生成器,其特征在于所述编译器编译所述原代码和所述头文件以及符号表,产生所述扩展固件映像;以及所述符号表包括指向所述应用程序接口功能的入口的指针。全文摘要本发明提供一种固件扩展方法以及固件生成器,用于嵌入式系统,固件扩展方法包括提供基准固件映像和与所述基准固件映像相关的头文件;根据所述头文件生成扩展固件映像,所述扩展固件映像包括一个或多个扩展功能;产生回调表,所述回调表包括指向所述扩展固件映像中所述扩展功能的入口的指针;以及合并所述基准固件映像、所述扩展固件映像和所述回调表,以产生合并的固件映像。本发明所提供的固件扩展方法以及固件生成器,无需上游供货商提供基准固件映像的原代码,即可进行固件扩展,能够保护可能涉及硬件设计相关机密信息的原代码。文档编号G06F9/45GK101776990SQ20091022331公开日2010年7月14日申请日期2009年11月17日优先权日2009年1月13日发明者丘伟源,蔡崇谚,蔡建良申请人:联发科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1