智能卡片内操作系统补丁的实现方法

文档序号:6498944阅读:311来源:国知局
智能卡片内操作系统补丁的实现方法
【专利摘要】本发明公开了一种智能卡片内操作系统补丁的实现方法,将片内操作系统的主程序存放在ROM中,在主程序中建立第一函数指针数组,将要打补丁的函数地址填入第一函数指针数组,并产生相对应的索引;将片内操作系统的补丁程序存入EEPROM中,在补丁程序中,在固定的EEPROM地址上建立第二函数指针数组;在主程序中定义一个工作数组指针,用来存放函数指针数组的首地址;在主程序中先确定好补丁程序中的第二函数指针数组的首地址和补丁标识的存放地址;主程序执行时先检查是否有补丁标识,若无标识,则将第一函数指针数组的首地址付给工作数组指针;若发现补丁标识,则将第二函数指针数组的首地址付给工作数组指针。本发明能够提高COS的运行效率。
【专利说明】智能卡片内操作系统补丁的实现方法
【技术领域】
[0001]本发明涉及智能卡操作系统软件开发领域,特别是涉及一种智能卡COS (ChipOperating System,片内操作系统)补丁的实现方法。
【背景技术】
[0002]智能卡片内操作系统程序一般是在智能卡生产时将操作系统的程序通过掩膜的方式固化在芯片ROM内,程序不允许再修改。如果要修改操作系统程序错误(BUG)或增加新的功能,一般使用补丁来实现,补丁程序代码一般是存放在可多次擦写的EEPROM中。
[0003]COS补丁的一般实现方法是每个补丁函数运行时都要去判断这个函数否打过补丁,如果有补丁,就运行补丁程序,否则运行原程序。这种方法的缺点是会使COS的运行速度降低。

【发明内容】

[0004]本发明要解决的技术问题是提供一种智能卡片内操作系统补丁的实现方法,能够提闻COS的运行效率。
[0005]为解决上述技术问题,本发明的智能卡片内操作系统补丁的实现方法,包括如下步骤:
[0006]步骤一,将智能卡片内操作系统的主程序存放在ROM中,在所述主程序中建立第一函数指针数组,将需要打补丁的函数地址填入该第一函数指针数组,并产生相对应的索弓I ;
[0007]将智能卡片内操作系统的补丁程序存入EEPROM中,在所述补丁程序中,在固定的EEPROM地址上建立第二函数指针数组;
[0008]步骤二,在所述主程序中定义一个工作数组指针,用来存放函数指针数组的首地址;由工作数组指针来选择第一函数指针数组或第二函数指针数组;
[0009]步骤三,在所述主程序中先确定好补丁程序中的第二函数指针数组的首地址和补丁标识的存放地址;
[0010]步骤四,主程序执行时先检查是否有补丁标识,若无标识,则将第一函数指针数组的首地址付给所述工作数组指针;若发现补丁标识,则将第二函数指针数组的首地址付给工作数组指针。
[0011]采用本发明的方法,通过两个函数指针数组,使主程序只需在上电时判断一次片内操作系统是否有补丁标识,并选择其中的一个函数指针数组工作,之后的流程与是否有补丁无关,即无需再判断补丁标识;片内操作系统即使打补丁也不影响其运行速度,提高了COS运行效率。
【专利附图】

【附图说明】
[0012]下面结合附图与【具体实施方式】对本发明作进一步详细的说明:[0013]附图是智能卡片内操作系统补丁的实现方法流程图。
【具体实施方式】
[0014]所述智能卡片内操作系统补丁的实现方法,将整个智能卡片内操作系统分为两个部分,一部分是存放在ROM中的主程序,另一部分是存放在EEPROM中的补丁程序,两部分程序中都有一个函数指针数组。在ROM的主程序中建立第一函数指针数组,将所有需要打补丁的函数的地址放入在该数组中,并产生相对应的索引,即用需要打补丁的函数地址初始化第一函数指针数组。同时,在EERPOM的地址范围内,在一个确定的地址上建立第二函数指针数组。两个函数指针数组的索引号相同,但内容将会有所不同;两个函数指针数组相同的内容是在EEPROM中没有重复定义的补丁函数的地址,不同的是在开发补丁程序时实际已经更新补丁函数的地址。即,在所述补丁程序中实现要打补丁的函数,并将第二函数指针数组中要打补丁的函数地址更新为新的补丁函数地址;如果在所述补丁程序中有补丁函数做了重新定义,则将这个重新定义的补丁函数的地址更新到所述第二函数指针数组的相应位置。
[0015]结合附图所示,主程序执行时,用需要打补丁的函数地址初始化第一函数指针;主程序通过读取EEPROM中的补丁标识,判断EEPROM中是否有补丁标识;若有补丁标识,则将第二函数指针数组的首地址交付给工作数组指针,若无补丁标识,则将第一函数指针数组的首地址交付给工作数组指针;所述第二函数指针数组的首地址,在所述主程序中作为一个常量引用。
[0016]补丁程序先在第二函数指针数组中找到需要打补丁的函数地址,然后将该地址更换为新的补丁函数的地址。
[0017]在所述主程序中,所有需要打补丁的函数不是被直接调用,而是通过工作数组指针选择的函数指针数组中的地址调用相应的函数。
[0018]在所述主程序中,对于未来可能会增加的新功能,先定义一定数量的空函数,即只定义函数,该函数不做任何事;并将该函数当作正常的将要打补丁的函数同样处理,将所述空函数地址填入第一函数指针数组中。
[0019]存放在ROM的主程序具体实现方法,包括如下步骤:
[0020]步骤1,先定义一个工作数组指针,用于存放第一函数指针数组或第二函数指针数组的首地址。程序一开始,会判断是否有补丁标识(位于EEPROM的地址范围中,事先确定为具体地址),如无补丁标识,则将第一函数指针数组的首地址付给工作数组指针;如发现补丁标识,则将第二函数指针数组的首地址付给工作数组指针。
[0021]步骤2,在主程序中,当要调用函数时,将通过工作数组指针,找到函数指针数组内相对应的函数地址,通过此地址调用函数,实现功能。
[0022]存放在EEPROM中的补丁程序具体实现方法,包括如下步骤:
[0023]第I步,在确定的EEPROM地址上建立第二函数指针数组,更新真正想要打补丁的函数,并将此函数地址写入第二函数指针数组相应的位置。
[0024]第2步,在EEPROM确定的地址位置上置补丁标识。
[0025]补丁标识是存放在EEPROM中,智能卡芯片内的EEPR0M,在没写入具体值时,它是一个不确定值,可以用2个字节作为标识,如0X55AA等,这个确定的值,如果不是通过人为写入,它是不会出现在EEPROM中;采用下载工具下载补丁时,同时将此标识写入EEPROM中。
[0026]补丁标识和补丁程序通过下载工具写入EEPROM中。
[0027]实施例一,存放在ROM中的主程序代码:
[0028]
【权利要求】
1.一种智能卡片内操作系统补丁的实现方法,其特征在于: 步骤一,将智能卡片内操作系统的主程序存放在ROM中,在所述主程序中建立第一函数指针数组,将要打补丁的函数地址填入该第一函数指针数组,并产生相对应的索引; 将智能卡片内操作系统的补丁程序存入EEPROM中,在所述补丁程序中,在固定的EEPROM地址上建立第二函数指针数组; 步骤二,在所述主程序中定义一个工作数组指针,用来存放函数指针数组的首地址;由工作数组指针来选择第一函数指针数组或第二函数指针数组; 步骤三,在所述主程序中先确定好补丁程序中的第二函数指针数组的首地址和补丁标识的存放地址; 步骤四,主程序执行时先检查是否有补丁标识,若无标识,则将第一函数指针数组的首地址付给所述工作数组指针;若发现补丁标识,则将第二函数指针数组的首地址付给工作数组指针。
2.根据权利要求1所述的方法,其特征在于:在所述主程序中,所有需要打补丁的函数不是被直接调用,而是通过函数指针数组中的地址调用相应的函数。
3.根据权利要求1所述的方法,其特征在于:在所述主程序中,对于未来会增加的新功能,先定义一定数量的空函数,即只定义函数,该函数不做任何事;并将该函数当作正常的将要打补丁的函数同样处理,将所述空函数地址填入第一函数指针数组中。
4.根据权利要求1所述的方法,其特征在于:两个函数指针数组的索引号相同,并且具有相同的在EEPROM中没有重复定义的补丁函数的地址。
5.根据权利要求1或4所述的方法,其特征在于:在所述补丁程序中实现要打补丁的函数,并将第二函数指针数组中要打补丁的函数地址更新为新的补丁函数地址;如果在所述补丁程序中有补丁函数做了重新定义,则将这个重新定义的补丁函数的地址更新到所述第二函数指针数组的相应位置。
6.根据权利要求1所述的方法,其特征在于:所述第二函数指针数组的首地址,在所述主程序中作为一个常量引用。
7.根据权利要求1所述的方法,其特征在于:所述补丁标识为2字节,存放在EEPROM中;智能卡芯片内的EEPR0M,在没写入具体值时,它是一个不确定值。
【文档编号】G06F9/445GK103927189SQ201310009473
【公开日】2014年7月16日 申请日期:2013年1月11日 优先权日:2013年1月11日
【发明者】刘玉兵 申请人:上海华虹集成电路有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1