找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 智能卡COS底层无关性设计

[复制链接]
admin 发表于 2013-3-24 18:18:43 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 介绍了智能卡COS现状及存在的问题,针对底层通用问题,借鉴Java智能卡的优点实现与底层无关的COS,即针对不同的硬件平台,无需重新编写代码。根据参数的不同提出了几种不同的解决方案。
关键词: 智能卡;移植;硬件
    智能卡在计算机技术、网络技术、数据库处理技术、高频技术、数据保护和密码学等的应用日趋广泛,因此智能卡的数量也在直线上升,因此在各个卡之间应用的移植问题引起了人们的关注。
 智能卡操作系统COS(Chip Operating System)是针对某一种特定芯片开发的,该操作系统通常由芯片生产商开发,因为只有他们才真正了解芯片底层的技术细节。每个厂家芯片COS开发的环境都不一样,在COS支持的上层应用不变的情况下,当更换不同的硬件时,需要了解新硬件COS的开发环境、新硬件底层的技术细节,重新将上层逻辑应用移植到新的硬件上时,移植的工作量非常大,不低于重新编写一次COS,而且移植过后COS的稳定性也需要重新测试,这样极大制约了智能卡应用的快速发展。另外,智能卡COS目前使用的开放式系统研发环境,存在较高的版权费用,软件成本偏高;而使用自然语言开发的COS,目前大多使用层次结构,效率较低,编写的代码量较大,降低了硬件的效率并增加了存储成本。针对以上问题本文提出了解决不同硬件之间操作系统移植的解决方案。通过对COS结构底层模块的研究,结合Java卡的硬件无关的优点,设计出与底层无关的COS。
1 COS结构模型
 智能卡的设计一般分为三层结构:硬件抽象层、核心层和应用层。其中硬件抽象层设计与智能卡芯片物理结构相关的功能,使其对上层透明;核心层包含了智能卡的主要结构和功能:卡启动程序及初始化、内外部认证、命令解析、安全问题及文件系统等核心功能;应用层主要提供基于硬件抽象层和核心层的不同应用。随着技术的发展,应用层将提供更多的有利且方便用户的应用[1]。智能卡结构如图1所示。
    20121107050705426423958.gif
   2 Java智能卡
 Java卡是在智能卡硬件系统基础上通过软件构造的一个支持Java程序下载/安装并运行的软/硬件系统。通过引入Java虚拟机技术,Java智能卡在保留了原有智能卡应用的便捷、安全等特性的同时,继承了Java技术的硬件无关特性,将智能卡应用程序的开发同智能卡硬件系统相分离,简化了应用程序的开发,提高了应用程序的可重用性。Java智能卡包括:智能卡硬件系统、与智能卡硬件系统相关的本地方法集、Java智能卡虚拟机JCVM、Java智能卡类库、Java智能卡应用管理组件、Java智能卡运行环境JCRE以及Java智能卡应用[2]。其系统结构如图2所示。
    20121107050705473293959.gif
    智能卡COS与Java卡的区别:
 从图1、图2可以看出,智能卡模块之间的调用是直接利用下层的函数与各模块的相互作用来实现应用程序,而Java卡是通过一个虚拟机来实现。此虚拟机即是Java卡与硬件无关特性的关键模块,卡内的虚拟机负责依据不同的智能卡硬件和操作系统特性来执行安装到卡上的CAP文件中的字节码。
3 智能卡的设计及其可行性分析
 根据Java卡的特性,提供本地方法集将与硬件相关的问题包含在一个模块内,同时提供Java智能卡类库,为应用程序调用下层函数提供统一接口。同时Java智能卡类库还包含了所有可能用到的类库及应用扩展类库,以方便用户安装尽可能多的应用。
将此思想应用到C编写的智能卡,可以将所有智能卡底层的硬件驱动全部包含进来,使得硬件驱动模块成为硬件驱动集模块,同时又保持API接口不变,这样上层应用设计时就不需改变调用接口,还是以同一接口调用,即可完成应用的移植问题。
 硬件驱动集,使上层都使用统一接口。考虑到所有函数调用都使用相同意义的参数,根本无法区别驱动集中的任一相应函数。因此,不可能将所有驱动的参数都放到接口的参数列表中来调用对应的底层函数。因为这样从参数的个数来区别驱动集的函数不可行。为此本智能卡的设计采用了如下方法:
 (1)借鉴网络编程时,通过参数来指定协议确定通信,因此可以增加一个参数来指定智能卡的类型来确定需要调用的函数。例如对于readflash函数:void fs_read_Flash(unsigned char*XRamAddr,unsigned long sAddr, unsigned int Length)通过增加参数char TYPE来确定类型。此时函数变为:
void fs_read_Flash(char TYPE,unsigned char*XRamAddr, unsigned long sAddr, unsigned int Length)
 然后通过swith…case即可以区分各个驱动函数从而实现驱动集的分类。而对于各个具体的驱动函数则通过它们的硬件名来命名其函数名以区分各个驱动函数。这样就不会混合各个驱动函数。改进的微内核层结构如图3所示。
    20121107050705520173960.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-26 11:37 , Processed in 0.058052 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表