admin管理员组

文章数量:1532344

2024年6月11日发(作者:)

66

嵌入式Linux下基于ARM9的USB打印机控制器的设计

嵌入式Linux下基于ARM9的USB打印机控制器的设计

Design

ofUSBPrinterControllerBased

on

ARM9UnderEmbeddedLinux

黄艳

马旭东

(东南大学自动化学院,江苏南京210096)

摘要

对Linux操作系统下的打印体系进行研究,分析并给出了嵌入式Linux下USB打印机控制器的软硬件设计。该打印机

控制器基于S3C2440微处理器,采用MiniGUI实现了友好的人机交互界面,能识.-10多种USB打印机。完成中文文本文件

以及各种格式图形文件的编辑和打印工作。

关键词:嵌入式Linux,S3C2440,USB打印机,中文打印。MiniGUI

Abstract

Thehardwareandsoftware

design

of

USB

printer

controllerunderembeddedLinuxis

analyzed

andrealized

in

this

paper

throughstudying

the

printingsystem

ofLINUXOS.The

printer

controllerbased

byadapting

MiniGUI.Italso

can

on

S3C2440

microchip

has

good

user

interface

recognizemany

kindsofUSB

printers,edit

and

print

Chinesetextfilesand

graphic

files.

printing.MIniGUIKeywords:embedded

Linux,¥3C2440,USB

printer.Chinese

无论是在工业现场还是在人们日常生活中,常常需要把数

据、图像从一些仪器或者是家用电器上打印下来,而很少有设备

直接带有打印功能,需要先把要打印的文件拷贝到PC机上。通

过连接打印机的PC机将其打印出来。本文采用ARM处理器设

计了嵌入式的打印机控制器,可以将打印功能集成在一些需要

打印的设备中,摆脱了PC的束缚。

USB打印机控制器的硬件设计

考虑到实用性和可扩展性,硬件的基本架构如图1所示。

Linux系统下打印功能的实现

在Linux中,PostScript是产生打印文档事实上的标准。需

要打印的文件首先通过应用程序生成PostScript文件,在通过

一系列过滤器后送给打印机打印。PostScript语言是由Adobe

公司开发的,它是一个成熟的、用于描述一个文档每一页面内容

的程序语言。它也是一种与设备无关的打印机语言,即在定义图

像时可以根本不考虑输出设备的特性(如打印机的分辨率、纸张

大小等),而且它对文本和图形实行同样的处理过程,这就给处

理字体带来了极大的灵活性。有一些打印机直接在内部集成了

PostScript语言解释器,可以直接将PostScript文件不经过任

何过滤器送给其打印。但是因为使用这种技术需要向Adobe公

司付费,相对来说比较昂贵。所以一般低廉的打印机是不能解释

PostScript文件的,需要经由一系列的过滤器将PostScript文

件翻译成该打印机能够识别的打印命令进行打印输出。

随着Linux的发展,其打印系统也在不断地进步,打印管理

程序已经由传统的基于假脱机程序的BSDLPD打印系统发展

图1

USB打印机的硬件架构

采用S3C2440微处理器,它是一款由三星公司推出的基于

ARM920T的16/32位RISC微处理器,主频可达400MHz。该

芯片性价比高,功耗低,含有丰富的片内外设,主要用于手持设

备和移动终端。

SDRAM存储器和NAND

Flash都为64M,可以有多余的

存储空间用来扩展打印机的功能。SPI通信模块可以让打印机

控制器完成与其他设备的通信功能,实现多处理器协调工作的

功能。

USB集线器引出4个USB端口,不仅可以插USB打印

机,还可以插优盘、USB键盘等USB设备,方便用户的使用。

用户将要打印的文件存在SD卡或者优盘上,通过薄膜键

盘和触摸屏与打印机控制器交互,选择或者编辑要打印的文件,

设置打印属性。

成为更加智能的通用Unix打印系统(CUPS)。CUPS软件支持

多种打印机,功能很丰富,界面也非常友好,被越来越多的应用

程序支持。CUPS的工作原理如下:首先接收需要打印的文件,

调用应用程序将其转换为PostScript文件,通过PPD文件来判

断Ghostscript应使用何种打印机驱动处理此PostScript文件;

把Ghostscript处理的结果输出到打印机上。其中PPD文件主

要提供以下与打印机有关的特定信息:默认/最高分辨率。是否

支持半色调监控、用户设定的监控信息、页面大小定义、页面可

打印区域、默认字体(通常为Courier),是否支持双面打印等等。

每一种不同的打印机都分别对应有专门的PPD文件。

因为本设计采用的是嵌入式Linux操作系统,所以不支持

Linux的打印机不能在本打印机控制器上使用。想知道Linux支

不支持某种打印机可以查看:http://www.1inuxprinting.org/站

点,这里包含了的这里包含了大量关于在Linux上打印的信息。

点击网页右列的Printer

Listings。进入查询界面后输入打印机

厂商和型号后,即可进行查询。通常会得到四个查询结果:①

perfectly(完全支持Linux下打印);②mostly(大部分功能支持

Linux下打印);⑧partially(只有一部分功能支持Linux下打

万方数据 

<工业控制计算机)2008年21卷第5期

67

印);(鸯paperweight(完全不支持Unux下打印)。最好选择前两

种支持类型的打印机。

件移植到板子上。在开发板下执行命令:

gs-sDEVICE=ijs-sljsServer=hpijs-dljsUseOutputFD—dSAFER\

一sDeviceManufacturer=HEWLE'I-F-PACKARD-sOutputFile=。/dev/

usb/IpO"\

-sDeviceModel="hpLaserJet

1010"-r300

test.ps

USB打印机控制器的软件设计

根据对于Linux打印系统的研究,将嵌入式系统下打印机

控制模块分成四个部分:底层USB打印机接El驱动程序;各种

打印机的专有驱动程序;打印文件过滤器;基于MiniGUI的打印

设置程序。打印管理的总领脚本将后面三个部分衔接起来。其结

构关系如图2所示。

型号为。HP

LaserJet

1010”的HP打印机就能成功打印出

test.ps文件描述的打印页。在gs命令中加入一些参数,可以设

置打印机分辨率,调整打印机纸张大小,打印图像的位置以及在

页面上的视觉比例等等,这些功能很灵活地满足了用户的要求。

具体的命令参数可以参阅Gostscript的用户手册。

3.3打印文件过滤器

撼中MiniGUI的打印设置科序

将打印文件转化为I略文件的过滤器

Gostscript能够处理的打印文件格式为PostScript,要充分

发挥打印机的能力,打印多种类型的文件格式,就必须有能将这

些格式文件转化为标准PostScript格式的打印文件过滤器。下

面根据打印文件的类型介绍打印文件过滤器的实现。

3.3.1图像文件的转换

用户窄间

备种打日I机的々有驱动程序

内核纪间

底瞄UsB打印机接u驱动=I!|!序

图2打印机控制器的软件架构

打印机控制器软件部分要实现的功能是:支持尽可能多的

打印机;支持打印机的即插即用;支持文本文件和各种格式图像

文件的打印;使打印系统本地化,支持中文文本的打印。下面根

据软件架构的不同部分来详细讨论其具体的实现。

3.1

图像的文件格式多达几百种,常用的也有几十种,例如

JPEG、BMP、TIFF、GIF等等。

Linux系统中有一些直接将这些图像格式转换成PS格式

的软件,如gif2ps、ti仟2ps、jpe92ps等等,可以将这些软件交叉

编译后移植到板子上,各种图像格式使用相应的程序进行转换。

但是这样会产生一个问题,它们最终生成的PS格式文件描述

的图像分辨率不统一,调整起来很不方便。在这里选择使用

Netpbm软件,它会自动调整图像的分辨率,并且包含了一百多

种图形格式的转换程序,可以实现这些图像文件格式的相互转

化,功能十分强大。Netpbm有直接支持ARM板的安装包,不需

要交叉编译,直接在开发板下安装就能使用了。为了编写脚本的

方便起见,将pnm格式作为过渡格式,先把各种不同的图像格

式转换为pnm格式,再通过pnmtops命令将pnm格式转为

PS格式。

USB打印机接口驱动程序

使用USB接El的打印机,首先要在内核中增加对于USB

打印机驱动的支持。嵌入式Linux中,低版本的内核并不支持

USB设备,因此在做开发的时候Linux的内核版本要升级到

2.4.10以上,这里采用的是2.6.13版本的内核。在宿主机(PC)

上交叉编译嵌入式Linux内核,选择USB的相关支持选项时一

定要选中“USB

Printer

supporl”,当开发板插上USB打印机

时,根目录下面出现了“/dev/usb/Ip0”这一目录,表示USB打

印机设备被成功识别了。

Linux内核空间的USB打印机接El驱动程序实现了USB

打印机底层的协议,负责与USB接口的通信,使得USB打印机

设备可以即插即用,用户空间的程序直接将打印机作为一个字

符设备文件来对它进行操作,实现打印功能。

3.2用户空间的打印机专有驱动程序的实现

对于不能直接识别PostScript语言的打印机来说。必须采

用各个打印机专有的驱动程序将PostScript格式的页面描述语

言转换成为这些打印机能够识别的打印命令。而Ghostscript软

件就是用来实现这个功能的。它集成了很多类型打印机的免费

对于pdf格式的文件,直接使用Ghostscript的命令将其转

换为PS格式的文件,执行效率更高。

3.3.2中文文本文件的转换

中文打印一直是困扰中文Linux系统实现打印本地化的一

、个难题,Linux的打印机制在开始的时候根本没有考虑中文打

\印,目前GhostScript的正式发行版本中也不支持中文字体。本

设计采用的比较简单的方法解决这个问题,就是将中文文本文

件直接转换为内嵌中文点阵字体的PostScript文件,

Ghostscript在处理的时候直接将汉字像图像一样打印出来,而

不需要调用中文字库。

的驱动,能够通过命令调用相应的打印机的驱动来解析

PostScript文件,将其转换为打印机能够识别的命令并把处理

的结果输出到打印设备上。此外Ghostscript还具有多种类型的

文件格式转换和PS文件的显示功能。

本设计使用的是Ghostscript8.50版本,将它在宿主机上交

叉编译,生成可执行文件gs,将该文件以及Ghostscript运行需

要的库和一些字体资源文件移植到开发板根目录下面,就可以

执行Ghostscript的命令了。在命令行下使用“gs—h’’这个命令

可以查看Ghostscript支持的打印机列表。如果你的打印机设备

不被当前的Ghostscript支持,如果有该打印机设备的驱动程

序,也可以自行添加到Ghostscript的源程序文件中并修改

Makefile,重新编译生成可执行文件就会包含对该款打印机的驱

动支持,这样做可以任意增添USB打印机控制器支持的打印设

备,使打印机控制器支持尽可能多的打印机,突破了局限性。

如果是HP公司的打印机,通常还需要用到hpijs驱动程

序,它由Ghostscdpt的lJS接1:1调用,实现HP打印机的驱动

功能。将hpijs软件在宿主机上交叉编译后生成hpijs可执行文

在Linux发行版中,将中文文本转换为PS文件,经常使用

的软件是b95ps,但经过尝试发现该软件并不适合用在硬件资

源有限的ARM开发板上,因为b95ps采用Python语言开发,

除了移植软件本身,中文字库以外,还得移植近10M的Python。

蔡依道先生编写的基于汉字点阵字库(HBF)的cnprint软件短

小精悍,能够将中文文本转换为内嵌中文点阵字体的PS文件,

也可以调整PS文件描述的打印页的字体大小,页边距,纸张大

小等等。将cnprint软件交叉编译后,和HBF字库一起移植到开

发板下面,直接执行“cnprint—WChineseText”命令就可以得到

ChineseText的PS文件。

3.3.3打印文件过滤器的架构

将打印控制器的文件过滤器的架构总结如图3所示,

在Shell脚本中实现这一功能,根据用户要求打印的文件格式,

选择不同的转换软件进行转换得到PS文件。(下转第84页)

万方数据 

本文标签: 打印机打印文件支持转换