admin管理员组

文章数量:1531688

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

维普资讯

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

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

Design of USB Printer Controller Based on ARM9 Under Embedded Linux 

黄 艳 马旭东 (东南大学自动化学院,江苏南京210096) 

摘 要 

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

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

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

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

Abstract 

The hardware and software design of USB printer controller under embedded Linux is analyzed and realized in this paper 

through studying the printing system of LINUX OS.The printer controller based on S3C2440 microchip has good user interface 

by adapting MiniGUI It also can recognize many kinds of USB printers,edit and print Chinese text files and graphic files 

Keywords:embedded Linux,S3C2440,USB printer,Chinese printing,MiniGUI 

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

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

据、图像从一些仪器或者是家用电器上打印下来,而很少有设备 考虑到实用性和可扩展性,硬件的基本架构如图1所示。 

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

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

JTAG ̄

i i j L 一 

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

j 一… 、l{ 

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

8 j触祧 l~¥3C2440 …~-NANDFl ̄h 

1 Linux系统下打印功能的实现 

SPI ̄il }sDRAM仃骼器I 

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

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

 JUSBHUB 

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

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

IUSB打rl J ̄j【I 优.? I I 

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

图1 USB打印机的硬件架构 

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

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

大小等),而且它对文本和图形实行同样的处理过程,这就给处 ARM920T的16/32位RISC微处理器,主频可达400MHz。该 

理字体带来了极大的灵活性。有一些打印机直接在内部集成了 芯片性价比高,功耗低,含有丰富的片内外设,主要用于手持设 

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

备和移动终端。 

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

SDRAM存储器和NAND Flash都为64M,可以有多余的 

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

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

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

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

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

功能。 

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

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

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

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

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

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

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

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

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

设置打印属性。 

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

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

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

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

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

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

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

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

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

点击网页右列的Printer Listings。进入查询界面后输入打印机 

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

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

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

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

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

维普资讯

《工业控制计算机}2008年21卷第5期 

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

种支持类型的打印机。 

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

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

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

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

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

构关系如图2所示。 

67 

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

gs—sDEVlCE=ijs—sIjsSerVer=hp0s—d IjsUseOutputFD—dSAFER\ 

sDeviceManufacturer=HEWLE丌一PACKARD—sOutputFile="/dev/ 

usb/IpO"k 

sDeviceModel= hp LaserJet 1010 -r300 test.ps 

型号为“HP LaserJet 1010”的HP打印机就能成功打印出 

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

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

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

I J M…【|l nI- l半 l 

l 

总 

领 

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

3.3打印文件过滤器 

将{1 tl J殳¨转化为I, 芷什的过滤器 

脚 

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

r门户 I ̄I'N 

I 再种¨ 机f"lJ 0 f】Jj ̄_,Jj 

本 

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

}~核- 问 

 l底 【 刚I 机垃Ll 动程J  I

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

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

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

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

3.3.1图像文件的转换 

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

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

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

JPEG、BMP、TIFF、GlF等等。 

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

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

3 1 USB打印机接口驱动程序 

的软件,如gif2ps、tiff2ps、jpeg2ps等等,可以将这些软件交叉 

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

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

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

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

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

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

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

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

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

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

定要选中“USB Printer support”,当开发板插上USB打印机 

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

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

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

印机设备被成功识别了。 

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

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

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

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

PS格式。 

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

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

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

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

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

3.3.2中文文本文件的转换 

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

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

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

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

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

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

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

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

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

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

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

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

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

不需要调用中文字库。 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C:hineseText的PS文件。 

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

3.3.3打印文件过滤器的架构 

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

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

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

序,它由Ghostscript的IJS接口调用,实现HP打印机的驱动 

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

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

维普资讯

PLC控制步进电机分度的设计与实现 

的分度。主要优点为:①分度精度高。驱动器在最高细分10000 

工作状态下,孔孔之间分度误差可控制在7.3 m,可以实现 

360。转角误差为0的分度精度要求,满足了工件的分度要求。② 

工作效率高,分度速度快。选用的PLC最高频率为200Hz,在自 

动分度工作状态下,50个孔的分度工作不足十分钟即可完成。 

⑧操作灵活、简便。该数控分度头实现调整(不分度)、手动或自 

动分度等电气操作。人工分度方式需要测量、画线等费工费时, 

由PLC控制的步进电机自动分度方式只需输人分度数,即可实 

现分度的多种控制。④该数控分度头经济、实用。投入使用后,较 

好地解决了以往大型轴承内、外套的分度存在的问题,提高了轴 

承产品质量,降低工人劳动强度。 

参考文献 

[1]孙振强,等.可编程控制器原理及应用教程[M].北京:清华大学出版 

社,2005 

[2]宋伯生,等PLC编程理论、算法、及技巧[M].北京:机械工业出版 

社,2005 

[3]刘乘启.新编铣工计算手册[M].北京:机械工业出版社,2003 

[收稿日期:2007.12.26] 

图1 分度算法梯形图 

(上接第67页) 

披收¨.=l it¨ 制rIli卫¨} ℃ 

童",ti] PDF_l匝 市趋童 

i 

{《 …I J一啦II吲j JII J之f'l垃¨ll J≯盐 

ul 17ilc ,I  ̄iUi 

i 

0 

—— ----一L~…

西 

 

亚 ~~ 蔓曩椰 矗 ,i,“Jl J  嚣 }.r 

1lIf{ _J ”擅 _

一一 

~ 

撷为P s 0{ I I 

~~ 

— …一~

“ “” ‘ a }、l “‘n 

。 ! 旦亡 

I 

… “ 刊 ”机 t- 

 『

图3文件过滤器的架构 

图4总领脚本的程序流程图 

3.4基于M GUI的打印设置程序 

M GUI是一款高性能的国产自由GUI软件,它是在Linux 

打印机驱动程序,实现最终的打印。 

4结束语 

控制台上运行的多窗口图形操作系统,系统资源消耗小,可以应 

用在电视机顶盒、实时控制系统、掌上电脑等诸多嵌入式设备 

本设计对于嵌入式系统开发人员具有很好的借鉴作用,可 

以将本文设计的打印系统根据自己的需要加以改进增加到其它 

嵌入式设备上。比如一些仪器需要将数据库中的报表打印出来, 

可以去掉GUI用户打印设置和图像打印部分,采用自己默认的 

打印设置,也可以自己编写将文件转化为PostScript的程序实 

现特定的打印功能,具有很大的灵活性和可扩展性。 

参考文献 

[1]孙天泽,袁文.嵌入式设计及Linux驱动开发指南:基于ARM9处理 

器[M].北京:电子工业出版社,2007 

[2]王乾,何波,王永清,等.基于嵌入式Linux的打印控制系统的设计 

上。为了方便用户与打印机控制器的交互,采用M GUI开发打 

印机控制器的图形用户界面,完成以下功能: 

1)当用户打印图像文件时,将图像文件在液晶屏上显示,用 

户可以对图像进行编辑,比如缩放或者旋转等等; 

2)显示默认的打印参数设置,用户可以直观的修改如打印 

机类型、打印纸张大小、打印文件份数等等打印属性,当用户设 

置有错时进行错误提示; 

3)接收总领脚本的信号,向用户反馈打印任务进度状态以 

及打印机的出错信息。 

3.5打印管理的总领脚本 

考虑到嵌人式系统的硬件资源有限,所以不采用耗费大量 

[J].微计算机信息,2007,1(23):1O1—102 

[3]Glenn C.Reid.Thinking In PostScript[M].Addison—Wesley 

Publishing Company.1 99O 

系统资源的打印管理软件CUPS,自己编写一个Shell总领脚本 

实现打印管理,协调各个模块的工作,Shell脚本的程序流程如 

图4所示。 

[4]北京飞漫软件技术有限公司M GUI编程指南(MINIGUI—PR0G— 

GUIDE-V1 6一C.pdf)[EB/OL].北京:北京飞漫软件技术有限公司. 

2004 

总领脚本启动图形用户界面,获得用户对打印文件及打印 

属性的参数设置,使用系统命令将结果传递给文件过滤器以及 

[收稿日期:2008.1.221 

本文标签: 打印打印机文件分度控制器