新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Linux的电子收款机税源数据采集方案

基于Linux的电子收款机税源数据采集方案

作者:时间:2012-10-30来源:网络收藏

摘要:采集数据,对加强税务监控有着重要意义。本文税控标准GB18240.1~GB18240.6,以使用 操作系统、并口打印机的为平台,以采集销售明细数据并在打印***上增加税控码为目的,提出了一种利用内核打印驱动模块修改和netlink socket 技术实现的

本文引用地址:http://www.eepw.com.cn/article/148299.htm

1. 引言

税收是国家财政的重要组成部分,但是在税收领域依法纳税意识淡薄,偷税逃税现象依然比较严重,尤其是对财务核算不健全的*,税务机关难以实施有效监控。这种现状不但严重扰乱正常的经济秩序,而且导致国家税收大量流失。为了进一步加强监控,堵塞税收漏洞,减少税收流失,国家先后出台了税控标准GB18240.1~GB18240.6 等六个部分,建立了以收款机+税控器+税控IC 卡+税控收款机管理系统的基本工作模式,明确了以票控税的基本原则。要求每当收款机上完成一笔销售时,收集其销售明细数据,将其交由税控器记录统计,并将税控器依据销售明细数据生成的税控码添加到销售小票上,以此来表示此笔销售已被税务机关记录。本文所讨论的便是一种从电子收款机采集税源数据即销售明细数据的解决

因为电子收款机使用的操作系统有很多种,对于不同操作系统采集税源数据的都有所不同。本文具体讨论 操作系统下使用并口打印机的电子收款机的税源方案,使用串口打印机的情形亦可参照。Windows 操作系统下的采集方案请查阅参考文献。

2 方案设计

系统将打印机设备视为文件,通过对该文件的写操作来实现打印功能。通常情况下,对文件系统的监控是通过系统调用劫持来实现的。但是1) Linux 2.6 版本之后的内核,系统调用表的地址已经不能导出,系统调用劫持的实现难度加大;2) 劫持 sys_write 系统调用后,所有的文件写入操作都会被劫持,对系统的性能有较大影响;3) 修改后的打印数据必须存入销售软件进程的用户内存空间,才能调用文件驱动模块write 函数将其打印出来。而侵入销售软件进程将大大降低系统的独立性和可靠性。

以上考虑,选择了通过修改内核打印驱动模块来实现对电子收款机上销售小票打印数据的截获。

然而设备驱动运行于内核态,具有很大的局限性,如不能在终端上打印、不能做大延时的操作、不能使用C 的库函数等等,难以满足税源系统的功能需要。所以需要一个用户态的守护进程常驻内存,对内核态采集到的数据进行处理。

这样整个税源数据采集系统可以分为如下两个部分:

1)内核空间

在 Linux 并口打印驱动模块中增加一个拦截函数,替换原有的lp_write 函数,负责将打印数据发送给用户态的守护进程,并在收到守护进程返回的新的打印数据之后,将其打印出来。

2)用户空间

实现一个常驻内存的用户态守护进程,负责接收内核截取到的打印数据,并在进行处理后回送给内核。

Linux 电子收款机税源数据采集系统框架图

图 1 Linux 电子收款机税源数据采集系统框架图

3 关键实现技术

实现上述设计的关键在于解决“内核态与用户态的进程间通信”、“拦截并口打印驱动的write 操作”、“打印进程的阻塞及唤醒”三个问题。

3.1 内核态与用户态的进程间通信

本方案这种分为内核空间和用户空间两部分的结构设计,首先需要解决的就是内核态与用户态的进程间通信(interprocess communicatiON, IPC)。而在各种IPC 方法中,最适合此处设计需要的就是netlink socket 技术。

Netlink socket 最早出现于Linux 2.2 版的内核中,并在2. 4 版以后的版本中作为主要的内核与用户空间的通信方式而被广泛使用。相对于系统调用、ioctl 以及proc 文件系统等IPC方法而言,它具有简单易用、异步通信(适合大数据传输)、无编译依赖(可模块实现)、支持多播、支持内核发起会话等优点。其中“异步通信、无编译依赖、支持内核发起会话”

这三点正是本系统需要的关键特性,也是选用该技术的最主要原因。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭