电信卡动态下载补丁程序方案制造技术

技术编号:2821350 阅读:514 留言:0更新日期:2012-04-11 18:40
这里描述了一个电信卡动态下载补丁程序方案,方案的提出,主要是由于电信卡OTA3标准要求动态管理下载的补丁,且可把补丁放在任何地址而不影响其运行。随着应用复杂度变高补丁不断变大,补丁被迫使用诸如LCALL/LJMP之类涉及绝对地址的指令。当补丁下载后,由于组成补丁各函数的入口地址发生变化,因此通过LCALL/LJMP指令绝对寻址便会产生问题。本发明专利技术以具有BANK切换机制的芯片作为对象,借助KEIL工具软件特殊编写技巧,使用单独的补丁绝对地址分析工具分析需要重新定位地址信息,利用电信卡内的补丁管理机制,对需要重新定位的地址信息进行信息替换,从而实现对补丁的动态下载。

【技术实现步骤摘要】

本专利技术详细介绍了一种电信卡动态下载补丁程序方案,主要涉及嵌入式系统开发领域。技术背景目前,对于8051或和其兼容的体系芯片,使用最广的开发平台是KEIL。如果要在这样的 平台上,实现动态下载补丁并且正常运行,没有通用的办法。经过研究,我们发现可以利用 KEIL的一些特性以及一些特殊处理在一定程度上实现以上目的。
技术实现思路
本专利技术以具有BANK切换机制的芯片作为对象,将补丁程序下载到芯片中某个BAM的任 意地址,并且能够正常运行。通过借助KEIL工具软件的特殊编写技巧,使用单独的补丁绝对 地址分析工具分析需要重新定位地址信息,利用电信卡内的补丁管理机制,可以将补丁程序 下载到BANK切换机制芯片中某个BANK的任意地址。整个方案主要由三部分组成编写被打 补丁程序(主工程,含有补丁管理模块)、补丁代码的编写(子工程的编写)和补丁绝对地址 信息分析工具。说明因为各个补丁程序可能要被下载到与其编译时不同的地址上去,所以要对下载到 COS中补丁程序某些绝对定位地址信息进行重新定位。而出于对COS内存、代码空间、处理 的速度以及需要处理的数据量等各方面的考虑,补丁中某些绝对地址的重新定位不可能做得 太复杂。操作步骤如下1) 主工程中编写补丁管理模块,预留补丁函数调用主工程BANK函数的函数接口;2) 按照特殊的编程技巧,编写补丁程序并生成补丁HEX文件;3) 对补丁程序编译后产生的HEX文件,利用一个单独的补丁绝对地址信息分析工具,提 取补丁实现部分相关的服X代码,将冊X代码数据按照指令的地址从小到大编排,用0xff填 补编译时所产生的补丁代码数据间断空间,从而形成一个连续的补丁数据块。用补丁入口地 址的相对偏移代替补丁数据块中需要重新定位的地址数据,形成新的补丁程序纯数据块。分 析新补丁程序数据块中需要重新定位的地址所在代码相对于起始代码的指令偏移。计算从补 丁数据块开始到结尾中需要重新定位地址的个数,连同补丁数据块大小以及COS版本、补丁 ID等信息,以一定的结构作为文件头信息和新补丁纯数据块合在一起,形成新的补丁文件;4) 按照0TA3的要求,将各补丁文件以及根据0TA3标准管理补丁的函数生成一个DLL文 件,传送到服务器端;5) 服务器针对每个用户卡内芯片卡商代码和COS版本号来决定是否需要下载补丁,如果 需要,则下载;6) 卡片接收到这些信息后,在准备下载补丁的BANK内,找寻可以下载程序的连续空余 地址,如果满足下载空间需求,则根据补丁管理模块,完成对补丁的下载。下面是整个方案的几个重要部分 1.主工程中包含补丁管理模块并预留补丁程序函数调用主工程BANK函数的函数接口主工程COS里面需要编写一个管理补丁程序的模块,负责新补丁的需要重新定位绝对地 址信息的替换、补丁程序的删除和下载以及补丁入口地址的管理等。COS中补丁管理模块中 存在一张表,用来记录每个补丁的新入口地址、补丁版本、补丁大小、COS版本等标志,下 载完补丁后,更新该表。在下载补丁的时候,分析文件头中需要修改绝对地址的信息,把要相对地址偏移信息加 上一个修正值,再将修正后的代码下到相应的位置上。这个修正值就是新的下载补丁的入口 地址。在KEIL开发平台上,对于具有BANK切换机制的芯片,补丁程序一般设置在某个BANK 内,通过在主工程的公共区建立一个全局函数指针、全局BSR变量和补丁 BANK区函数调 用主工程BANK区函数的接口,可以实现补丁 BANK函数调用主工程BANK区函数,该接 口函数采用没有定义传入参数和返回的特殊方式来定义。这样,当补丁 BANK区函数要调用主工程BANK区函数的时候,只需要先将全局BSR 变量设置成将要调用的主工程函数的BANK号,把主工程中这个函数的地址附值给全局函数 指针,再利用函数指针方式调用该函数。(1) 全局BSR变量如下 BanknFunBSR(2) 接口函数如下—callBankFun:PUSH BSR ;保存当前BSR号MOV DPH, BanknFunPtr+01H ;将要调用主工程函数指针附值给DPTR MOV DPL, BanknFunPtr+02H MOV A, #PC_A_LPUSH ACC ;PC—A:后面POP BSR这句话的PC指针的值 MOV A, #PC_A_H PUSH ACCMOV BSR, BanknFunBSR ;BanknFunBSR,所调用某个BANK的BSR,公共变量;为了防止PATCH调用主工程内的BANK函数,这个函数又调用了其他BANK的函数。 必须通过BSR重新定位B—CURRENTBANK这个变量的值(此处可以参考L51一BANK.A51文 件的处理办法)CLR AJMP @A+DPTR 调用BanknFunPtr所指函数,这个函数返回到下条指令POPBSR处POP BSR ;PC—A: "POP BSR"这句话的PC指针的值,可在编译后获知。RET(3) 全局函数指针如下void (*BanknFunPtr)();(4) 调用方法举例如下-BanknFunBSR= 0x01; BanknFunPtr=(void*)TestBankFuncCall_l;i = (unsigned char)callBankFun(l, 0x7722, 0x8855);〃函数有参数输入,有unsigned char类型返回,无参数情况下可以将三个参数都设置为O。从上面所描述的方法来看,如果在主工程中把接口准备好,补丁的BANK区函数就能非 常方便地调用主工程BANK区中的函数了。2.补丁代码的编写 (1)补丁代码编译器设置原则1)为了方便处理,通过控制编译器,使得编译产生的跳转、调用指令限制为LCALLaddr16, LJMPaddr16。避免产生ACALL与AJMP需要做以下两方面工作* C51编译器使用ROM (LARGE)设置,则只在编译器级别产生LJMP与LCALL。在 KEIL中该设置在Project- Options for Target- Target下,选择Code ROM Size: Large 64K program,不要选择ROM (SMALL),该选择可能会编译出AJMP, ACALL。* Linker/Locater:使用NOAJMP directive。在KEIL中该directive可以在Project - Options for Target-BL51 Misc or LX51 Misc,设置Misc controls: NOAJMP。 补丁绝对地址信息分析工具分析此类指令的绝对跳转地址时,需要判断是在被搬移的区块还是外部区块。如果是外部区块则不分析,如果是在搬移块内,则需要将补丁下载起始地址加上偏移量后替换目标地址。由于要将生成的补丁代码限制在某个BANK区内,补丁中的程序调用主工程公共区的函数,函数入口地址将小于0x8000,而要调用主工程其它BANK区 的函数,则需要将公共区的INTERBANK CALL TABLE作为入口,所以,需要修改的只是补 丁中函数互相调用或者跳转产生的绝对定位代码,这些地址都大于等于0x8000。2) 有关DPTR与PC等绝对地址的指令,如MOV本文档来自技高网...

【技术保护点】
电信卡动态下载补丁程序方案,其特征在于有单独的补丁绝对地址信息分析工具,分析补丁中需要重新定位的绝对地址信息,生成新的补丁文件,再通过OTA3标准规定将各补丁信息获取的函数以及补丁形成动态链接库提交给电信服务器。

【技术特征摘要】

【专利技术属性】
技术研发人员:谢敏
申请(专利权)人:北京中电华大电子设计有限责任公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利