嵌入式操作系统
嵌入式银行网络安全终端系统的设计
随着国内银行业务量的迅速发展,银行需要能有效解决银行网点前台业务量大,耗时长等问题,并为持卡人提供安全迅捷服务的一种自助型终端产品。网络安全终端系统就是针对这一需求,在银行现有网络的基础上开发的低成本嵌入式产品。本系统的研制对于以银行为代表的各金融企业的终端服务以及方便人们的生活具有重要的意义。
1.网络安全系统的总体设计网络安全终端要实现用户的交易操作,必须将用户的交易信息传递给银行后台。基于银行现有的网络,网络安全终端必需具备网络通信功能才能与银行后台交互数据。网络安全终端是用于银行交易的,一旦网络安全终端传递给银行后台的数据被窃取或篡改,都将导致用户和银行的巨大损失。因此,网络安全终端必须确保其传递数据的安全性。
1.1网络安全终端交易系统的体系框架
基于局域网的网络安全终端交易系统,主要由接入服务器系统、密钥生成与管理系统、终端发卡系统、终端管理系统等部分组成,如图 1所示。
1.2网络安全终端的模块需求设计根据功能需求及技术需求,网络安全终端须具备以下模块:核心处理模块:基于 ARM7TDMI核的 SoC芯片 Garfield作为主处理器,附加 SDRAM,FlasliROM等外围电路并在 Garfield上移植 uCLinux操作系统。该模块负责协调整个系统工作,进行各个模块的管理、数据处理/存储、任务调度及决策等。网卡模块:接入以太网,与接入前置机交互数据,实现基于 TCP/IP协议的数据通信。人机交互模块:人机交互模块是实现用户与终端之间的通讯和对话,通过液晶显示屏和键盘等设备,提供丰富友好的操作界面及人工介入功能等人性化的设计,为用户操作提供可靠的支持。安全处理模块:采用 PSAM卡硬件加密,实现网络安全终端对重要信息的加密,来满足交易系统对网络安全终端安全性的需求。
2.网络安全系统的硬件设计
硬件平台主要分成两部分:主系统和安全处理子系统。主系统和安全处理子系统之间通过串口来实现数据交换。主系统主要包括主处理器、电源模块、存储模块、人机交互模块、网卡模块等,其原理图如图 2所示。
2.1主处理器存储接口电路
由于 16位数据访问方式即可满足网络安全终端对存储速度的要求,与 32位数据访问方式相比,可大大减小硬件布局布线的难度,从而提高产品的性价比,因此网络安全终端选用 16位访问方式。由于处理器的数据宽度配置为 16位访问外部启动存储器,故下面的存储设备均选择 16位数据线连接。存储模块主要包含 8M字节的 FLASH和 16M字节的 SDRAM。
2.2网络模块接口电路
网络安全终端采用 RTL8019AS实现网络模块的物理层。它们之间的通信主要是通过总线和一些控制信号来完成的。由于网卡模块使用的是 Garfield的总线(数据和地址总线 ),所以将网卡模块的低 10根地址线及低 16根数据线与之相应连接。同时由于网卡模块需要有一些控制引脚来实现对网卡模块的控制(如启动、复位、中断、读、写等 ),因此可以使用主处理器的引脚来和这些引脚连接。Garfield的很多引脚可以复用为特殊的控制信号和 GPIO口。所有的 GPIO口都可以通过独立编程来控制它的输入输出方向和输出电平的高低,而且可以将 GPIO引脚设置为中断功能,可以灵活地监测各种类型信号的变化,来实现对网卡模块的监控,其电路图如 4所示。
2.3安全处理子系统电路
安全处理子系统主要包含:协处理器 C52,磁卡读卡器和 PSAM卡。安全处理子系统的工作如下:协处理器 C52读取磁卡信息,将信息传递给 PSAM卡进行加密,并将 PSAM卡加密后的信息传递给主系统,安全处理子系统与网络安全终端的集成接口如下图 5所示。
3.网络安全终端的软件设计
在对嵌入式产品的体系模型研究的基础上,进行基于 Garfield的网络安全终端的软件框架设计。软件实现部分包括: uClinux在 Garfield处理器上的移植、 uClinux的网卡驱动移植、安全网络通信的设计,以及交易流程的实现。
3.1 uClinux在 Garfield处理器上的移植
首先是内核配置系统,配置信息保存在配置文件.config中,原有的 .config文件被更名为.config.old。Makefile根据.config中的配置信息,构造并编译源文件列表,通过链接器脚本,把目标代码链接到一起,最终形成 Linux Kernel Image 。然后设置内核启动入口,入口代码是 linux/arch/armnommu/kernel/head-army.S。对于中断处理, uClinux Kernel的 C代码入口函数 start_kernel()定义在 linux/init/main.c中。该函数首先调用 setup_arch()处理内核启动参数等内容,然后对中断进行处理。
最后进行系统时钟设计,Garfield中的定时器是片内集成的定时器,能够向系统提供定时中断。网络安全终端使用 Garfield的 Timed的重启计数模式,将其作为系统时钟源。
3.2网络设备驱动的实现网络设备驱动程序主要由初始化部分和数据包的发送与接收部分组成,相关程序代码在
linux-2.4.x/drivers/net/ne.c和 linux-2.4.x/drivers/net/8390.c中,其实现的关键代码如下:
主要的初始化函数 int init ne}robe(struct net device *dev)
检测网卡的复位响应代码如下:
bad card=((dev->basa_ addr != 0)&&(de->mem end==0xbad));
{ unsigned long reset start time = jiffies;
Outb(inb(ioaddr+NE_RESET), ioaddr+NE_RESET);
while ((inb_p(ioaddr+ENO_ISR)& RNISR_RESET)==0)
if(jiffies-reset_start_time>2*HZ/100){
if (bad card){ printk(" (warning: no reset ack)");
break; }else{
printk(" not found (no reset ack)\n");
ret= - ENODEV;
goto err_out; } }
outb}(oxff, ioaddr+ENO_ ISR); }
3.3安全性通信的实现
网络安全终端的主系统通过将重要信息发送给安全处理子系统,由安全处理子系统将信息加密。主系统接收该密文并发送,信息以密文的形式在网络中传递,这样可以满足终端安全的需求。网络安全终端是通过主处理器的 uart2与安全处理子系统的协处理器 C52进行串口通信的。
串口通信编程的实现过程如下:
(1) 串口操作涉及的头文件,linux/include/asm/arch-GFD/serial.h。
(2) 打开串口,Linux下串口的设备文件是 /dev/ttySO, /dev/ttySl等。
(3) 设置串口,最基本的设置串口包括波特率设置,校验位和停止位设置。串口的设置主要是设置 struct ermios结构体的各成员值。
(4) 写数据到端口,数据到端口只需要使用 write系统调用去传送数据。
(5) 从端口读数据,以行数据模式操作端口,每个 read系统调用都会返回,不论多少字符实际存在于串行输入缓冲中。如果没有字符存在,调用将阻塞 (等待)到有字符进入,或出现超时和错误。
3.4用户主程序
主程序主要为本系统提供应用操作,包含在自定义的 user/ethterminal文件夹中。系统初始化定义在 SysInit()中,对自定义的参数进行初始化,如消息等。由于这里的人机交互模块是自定义的 LCD显示,没有用 minigui等来实现,而采用自定义图形显示函数来实现的键盘采用轮询方式检测,故有一部分设备初始化工作在这里完成。
系统自检:定义在 SystemCheck()中。对安全处理子系统、网络模块、存储模块等进行检测,并在显示器给出相应提示信息。
与监控服务器连接:定义在 SendDevStaToRemCtrl()中。主要用于通过网络来实现本系统的软件管理以及后继版本升级等。
在完成与监控服务器的连接后,网络安全终端 LCD屏上会显示“XX银行”的操作界面,开始等待用户的操作;若操作超时,将进入液晶屏保护程序,否则进入主菜单循环。
4结束语
本文在银行交易系统对银行自助终端需求分析的基础上,提出了利用东南大学国家专用集成电路系统工程技术研究中心自主研发的ARM7TDMI内核的嵌入式SoC芯片Garfield,设计出基于 ucLinux操作系统和 TCP/IP网络的银行自助设备——网络安全终端,通过原理图设计、操作系统移植、接口和应用程序的开发,本系统样机通过了银行模拟交易系统的测试,该终端系统达到了设计的要求。
参考文献
[1]刘峥嵘等,《嵌入式 Linux应用开发详解》,机械工业出版社
[2]田泽,丁敦山,盛世敏,《ARM SOC体系结构》,北京航空航天大学出版社
[3]范建华等,《TCP/IP详解卷 1:协议》,机械工业出版社
[4]杜春蕾,《ARM体系结构与编程》,清华大学出版社
[5]龚俭等著,《计算机网络安全导论》,东南大学出版社
[6] 叶玮琼,余永权,刘志煌.智能家居电力线总线研究与实现 [J].微计算机信息,2008, 3-2: 305-307。
全部0条评论
快来发表一下你的评论吧 !