基于嵌入式Linux的通用打印系统的研究与设计
- 格式:doc
- 大小:33.00 KB
- 文档页数:8
基于嵌入式Linux的通用打印系统的研究与设计摘要:首先通过对Linux打印系统原理进行了分析研究,然后结合嵌入式应用的特点设计了一种基于嵌入式Linux的通用打印系统方案,实现了脱离PC机驱动并具有复杂打印的功能,并在S3C2410平台上进行了实验验证,且给出了系统的软件方案的设计。
关键词:嵌入式打印;Linux打印;CUPS;交叉编译0 引言随着嵌入式技术的飞速发展和Linux开源操作系统的优越性,目前出现许多以嵌入式linux为平台的电子产品。
在许多的产品中都需要有打印的功能,但是目前绝大部分的嵌入式产品的打印方案都是采用基于热敏式的打印机,这种方案的打印只能进行一些简单的打印功能,不能进行复杂的、彩色的打印需求,有很大的局限性;另外的一种方案是采用外置一台PC机进行打印机驱动,这种方案虽然可以实现完整的打印功能,但同时造成了资源的浪费,不符合嵌入式技术的设计原则。
基于以上的考虑,本文设计了一种基于嵌入式Linux平台的打印方案,它能够实现基于PC机驱动的打印效果,又不需要外置一台PC机进行驱动,在一定的程度上为嵌入式产品提供了一种相对完美的打印解决方案。
1 Linux打印系统原理Linux采用的打印系统是标准的通用Unix打印系统(CUPS)。
CUPS实际上是一个集成的打印服务程序,包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间层则是打印驱动。
CUPS驱动其实是一系列的程序加定义文件的总和,这些各种文件是进行各式文件格式转换的程序和格式定义文件。
CPUS的执行原理是当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将bmp等各种文件先转换成PostScript格式。
然后进一步将PostScript格式转换成CUPS内部格式,这个称为PostScript到CUPS-PostScript转换,这两种PostScript格式还是有差别的,在MIME中定义了这两种不同的PostScript。
以上这些都是CPUS打印过程中的预处理工作,接下来CUPS的工作围绕PostScript展开,CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。
PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件,PPD 包含有关输出设备的信息,CUPS使用PPD文件中的信息来确定在打印文档时向打印机发送哪些PostScript 信息。
CPUS最大的特点是它把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(PsToRaster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成PostScript打印机。
CPUS根据打印机类型的不同把打印流程分为3种处理方式,第一种是把打印文件直接转换成PostScript格式文件,然后送入打印机进行打印。
后面两种是分别用CUPS的PsToRaster 或GhostScript文件转换程序来进行转换为CPUS-PostScript文件格式,虚拟出一台PostScript打印机,然后再通过这台虚拟PostScript打印驱动打印机进行打印。
CPUS提供的这3种处理方式决定了它能够支持各种不同的打印机,因此这也是CUPS兼容性非常好的原因。
CPUS打印的流程原理如图1所示。
2 Linux打印系统在嵌入式平台上的设计根据对Linux打印系统原理的深入分析,了解到Linux打印过程的各种处理方式的具体过程,那么在嵌入式这种小内存平台的设计打印方案也就有了一定的理论基础。
因为在嵌入式平台中受限于硬件平台,如果直接把CPUS和GhostScript进行交叉编译并移植到嵌入式平台上,那么其实所需要的内存空间在80多M以上,对于嵌入式平台是不现实的。
本文的设计方案是对CPUS 打印的原理进行了更深入的研究分析,提取其中的最基本模块进行组合修改设计成一个最精小的微型嵌入打印系统,再将其交叉编译移植到嵌入式平台之上。
2.1 基于PostScript格式的打印方案通过以上的分析得知Linux打印模块中有3种打印处理机制,第一种是直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,打印机接收PostScript打印文件流后进行信息提取并按格式进行打印,其流程图如图2所示。
此方案支持的打印机必须是基于主机类型的打印机,然而这种打印属于高端打印机,价格非常高,不符合嵌入式产品设计的初衷。
2.2 基于Raster格式的打印方案基于raster格式的打印方案是把预转换的文件交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,是打印机生产商为客户的接口开发定义的一种光栅格式,方便客户设计相应的打印机的接口程序。
具体的处理流程如图3所示。
此方案的优点是打印的流程最短,所需要执行的处理也最简洁,因此移植到嵌入式平台所需要的资源也最小,但是由于受限于打印机厂商的raster格式的定义,此方案支持的打印机也受到了限制,所以此方案只能适用于专用的打印机的嵌入式打印方案。
2.3 基于GhostScript格式的打印方案GhostScript格式的驱动模的打印方案支持打印机型号最多。
其和基于raster格式的机制极为类似,只把CUPS的解释器换成了外置的GhostScript来解释PostScript文件。
GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,且很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。
此方案的打印流程如图4所示。
此方案的优点是支持的打印机类型多,而且打印机的驱动安装方便,缺陷是GhostScript程序相对较大,不经过修改的编译后有将近60多M以上的大小。
3 嵌入式Linux打印系统的实现与实验根据以上对3种打印流程对应的方案的对比分析,再经过对Linux源码的深入分析,结合Rater和GhostScript的方案的优点,分别提取其中的核心模块设计了一种相对可行的同时又具有支持多种打印机的打印方案。
最终在S3C2010平台上进行了实验验证。
(1)方案设计的基本原理是提取CPUS中的过虑器imagetoraster、rastertohp、rastertoepson的相应代码,进行修改得到imagetoraster和rastertoprint两个过滤器程序,提取GhostSciprt 中的image-bmp程序来进行bmp位图的处理,最后使用MiniGUI1.6设计了一个打印驱动选取界面程序。
(2)方案的开发环境为:ubuntu 9.10 + gcc3.3.2 + cups-1.4.2 + ghostscript7.1。
(3)方案的代码设计:在image-bmp.c中修改Xppi / yppi 这两参数来设置每英寸多少像素;在imagetoraster.c中修改Xprint / yprint 这两参数来确定可打印的区域;在interpret.c中修改HWResolution参数来设置打印分辨率等。
交叉编译的Makefile配置./configureCC=arm-linux-gcc ./configure --prefix=/root/mycupsinstall--host=arm-linux –-build=i386-linuxLDFLAGS=--static …其中的LDFLAGS=--static为静态编译,把链接模块也整体编译进去,因为在arm-linux中的许多共享库是没有的。
最后编译出来了几个转换程序,需要使用bash脚本进行调协工作,具体脚本代码如下:#!/bin/bashexport PPD=/UTPrint/PPD/thePPD/d5468.ppd/UTPrint/bin/imagetoraster 10 "" "" 1 "" "/UTPrint/printFile/01.bmp" | /UTPrint/bin /rastertohp 10 "" "" 1 "" | cat > /dev/usb/lp0各程序之间使用管道来进行数据传递。
(4)打印测试程序的界面设计。
本文为打印方案设计了一个可视化界面的打印测试程序,此程序实现了打印驱动以及打印文件的选择,并且可以进行打印机的型号自动检测从而进行自动匹配驱动的功能。
MiniGUI软件界面的设计如图5所示。
通过实验验证了本文的嵌入式Linux打印系统的可行性,并且此方案能够支持各种打印机型号,打印的驱动添加简便,是一种非常适用的嵌入式Linux打印通用方案。
4 结束语本文设计了一种基于嵌入式Linux的通用打印系统方案,最终在S3C2410 ARM9+Linux2.6内核平台上进行移植,并进行了实验测试,都能进行清晰的打印且具有较快的打印速度。
因此,本文设计的这种嵌入式Linux打印方案,是一种既能够支持复杂式打印又能够在嵌入式平台上简便实现的解决方案,为嵌入式Linux打印技术的发展提供了一定的理论和实践经验。
参考文献:[1] 赵远东,张臻.基于ARM9和Linux的嵌入式打印终端系统[J].微计算机信息,2008(24).[2] 朱伟伟,黄锦安.基于ARM和Linux的嵌入式的研究以及打印模块的实现[J].计算机工程与应用,2008.[3] 赵炯.Linux内核完全剖析[M].北京:科学出版社,2000.[4] CORBET J,RUBINI A.LINUX设备驱动程序(第三版)[M].北京:中国电力出版社,2006.The Research and Design of General Print System Based on Embedded LinuxAbstract:This paper firstly study the principle of Linux printsystem,then according to the characteristics of the embedded application design based on embedded Linux general print system solutions which with complicated printed function but have no need to have a PC to run it.We validated by experiment it on S3C2410 platform,and gives the solution design of system software.Key Words:Embedded Print; Linux Print; CPUS;Cross-compilation。