应用天地APPLICATION NOTES基于开源软件的嵌入式网络打印服务器首都师范大学 徐远超 中国科学院计算技术研究所 江 涛摘 要传统的基于PC 的打印服务器耗电、成本高、不稳定、易中毒、不易挪动。
提出一种完全基于开源软件的嵌入式打印服务器设计方案,包括CU PS 、ghost script 、foomatic 、f oo2ijs 的编译与安装,CGI 程序的编写、汉化、CU PS 的配置、客户端的连接等,给出主要问题的解决方法。
设计的打印服务器经实验室反复测试,运行十分稳定。
关键词网络打印服务器 嵌入式系统 CU PS 嵌入式L inux 开源软件引 言目前常用的打印机有两种接口形式:U SB 口和Et h ernet 网口。
由于价格相对较低,U SB 口的打印机更为普遍。
U SB 口打印机不能独立工作,必须依附于一台主机。
为了在一个局域网环境中共享使用一台U SB 口打印机,需要为该打印机配备一台服务器,然后通过共享设置实现打印机的网络共享。
这种方式有几个方面的缺陷:需要占用一台服务器资源;耗电;容易中毒导致无法正常打印;由于长时间不间断运行,出现故障的概率高,导致无法打印;占用办公空间。
随着嵌入式处理器主频的不断提高,设计专门的嵌入式网络打印服务器已经成为共识。
H P 等很少的几家打印机公司在几年以前就推出了这样的嵌入式设备,但基本上都只针对本公司特定的几种打印机,无法做到通用。
很多文献,如参考文献[1]、[2]中提到的设计方案不够具体。
基于这些情况,设计并实现了一款基于L inux 的嵌入式网络打印服务器,硬件设计简单,软件完全开源,只要有Linux 下的打印驱动,就可以支持。
1 总体方案设计要把U SB 口打印机连入网络,有两种设计方案,一种是使用U SB/以太网协议转换器,另一种是设计一个带有U SB 口和以太网网口(包含操作系统)的嵌入式设备。
尽管协议转换器软硬件简单,但不支持多用户同时并发打印,也就无法实现共享打印的要求。
1.1 硬件设计笔者是在中科院计算所自主研制基于龙芯1号核的 聚芯SoC 1000C 上实验的,主频266M Hz [3]。
作为产品,只需要提供电源接口、U SB 口和以太网口。
调试阶段,增加串口和JT A G 调试接口。
考虑到多用户并发打印的负载和实际测试效果,因为移植的开源软件有很多依赖库,所占空间较大,故选用的是1GB 容量的Flash 。
打印过程中,打印文件在内存中缓存,为了应对较大的打印文件和提高运行速度,建议选择256M B 以上的SDRA M 。
嵌入式网络打印服务器硬件结构框图如图1所示。
图1嵌入式网络打印服务器硬件结构框图1.2 软件设计软件设计是整个系统设计的重点,也是难点。
在设计思想上,强调尽可能使用开源软件,主要是为了缩短研发周期并能保证打印系统的可靠性和稳定性。
操作系统选择目前主流的Linux 操作系统。
L inux 操作系统下的打印控制系统根据打印机的命令方式,分为文本打印机、Post Script 打印机和其他种类。
文本打印机不需要驱动程序,就可以直接用cat 命令驱动打印机,但只能打印英文,已很少使用。
PostScript (简称PS)是一种绘图能力很强的解释性脚本语言,由Adobe 公司制定。
它因占用系统资源少,处理过程标准化与设备无关而被广泛应用。
直接支持Post Script 的打印机通常都是比较高级的办公打印机,对于这类打印机来说,PS 语言是它们和计算机之间沟通的最简便的方式,应用程序可以将生成的PS 文档直接发给打印机打印。
但大多数情况下使用的是各种比较低档APPLICATION NOTES应用天地的,不能直接支持Post Script的打印机,这类打印机只能识别各厂家自己的指令集。
因此,必须采取一种机制,把Post Script格式转换成打印机能够识别的命令格式,而GhostScript程序就是用来完成这个工作的。
Ghostscript将PostScript转换成各种打印机能够识别的格式。
打印机驱动程序是应用软件与打印机之间交流的桥梁,它可以将转化好的打印文件,按照各种打印机不同的格式发送给打印机,因此不同的打印机都有自己特有的打印驱动程序。
另外,随驱动程序一起发布的还有PPD文档,PPD(Post Script Print er Descript ion)是用来描述打印机功能的文件,里面包含了字体、打印页面等的一些描述。
在使用一款打印机之前,必须找到其相应的PPD文件,并正确地安装到打印管理器程序上。
笔者所用打印机为HP1020plus激光打印机,CU PS不附带此驱动,只能另行安装。
为了让不同的作业在打印的时候不产生冲突,就需要一个打印管理程序。
这类管理程序很多,使用最为广泛的莫过于CU PS。
CUPS接收要打印的文件;通过文件的类型判断是否需要将其转换为PostScript,如果需要,则调用相应的应用程序进行转换;通过PPD文件来判断Ghost Script应使用何种驱动处理此Post Script文件;把Ghost Script处理的结果输出到打印设备上。
在打印管理程序和Ghostscript之间,通常还安装一种统一的打印过滤器程序foomatic rip。
它是用perl编写的脚本程序,打印管理程序通过它调用Ghost script程序,从而把PostScript作业转换成PPD文件描述的打印机自身能够识别的格式。
2 几个关键问题2.1 软件的交叉编译由前面的分析可知,打印服务器需要的开源软件支持,为了运行于嵌入式Linux环境,需要对它们一一进行交叉编译。
通常的编译方法是在宿主机上进行,笔者在反复实验后不得不放弃,原因在于这些开源软件还依赖于很多的其他软件包[4]。
建议编译安装直接在开发板上进行,虽然速度较慢,但可以及时发现缺少的包。
此编译过程大约需要一周的时间。
CU PS的编译与安装:patch Np1 i../cups 1.2.12 security_fixes 2.patch&&./configure&&make&&make installfoomat ic的编译与安装:./configure prefix=/usr sysconfdir=/etc&&make&&make installGhost script的编译与安装:patch Np1 i../espgs 8.15.4 bov_fix 1.patchsed i"s/bbox.dev$/x11.dev/"M akefile.in./configure prefix=/usr enable thread without om nimakemake somake installmake soinstall安装H P Laserjet1020plus驱动:下载源码:http://w ww.linuxprint /ijs/download/ijs 0.35.tar.bz2./configure prefix=/usr enable shared&&make&&make install2.2 CGI程序的编写嵌入式网络设备通常都提供web管理方式,用以修改配置等。
以修改IP地址为例,需要修改源码目录下的cgi bin子目录下的admin.c文件,参照do_am_print er()函数新增函数do_modify_ip,此函数的功能为读取IP地址所在的配置文件,将IP地址、子网掩码、默认网关等显示在页面文本框中,允许修改,提交修改时该函数将新的参数覆盖原配置文件中旧的参数。
为实现这一功能,主要用到了CUPS提供的文件操作函数cupsFileG ets、cupsFi leOpen、cupsFilePrint f,和有关CGI变量的读写函数cgiG etV ariable、cgiSetV ariable和界面的显示函数cgiStartHT M如IP地址L(title)、cgiCopyT emplat eLang ("error_ip.tmpl")、cgiEndH T M L()。
有关文件的读写操作,可参照CU PS目录下的t est file.c文件。
2.3 界面和提示语言汉化CU PS支持多国语言版本,如果汉化,需要对界面标识、提示、按钮等全面进行汉化,工作量较大,需要修改doc/index.html,需要把t emplat es语言版本挪到最外层,需要在locale/cups_zh.po修改或增加新的中英文对照信息。
更详细的信息可参考CU PS运行后通过浏览器访问ht tp://localhost:631/help下的T ranslat ing and Custom izing CU PS文档。
2.4 CU PS配置与调试编辑/et c/cups/cupsd.conf在Location选项中添加容许访问的网段。
为简单起见,在Order allow,deny后直接输入A llow all即可。
编辑/et c/cups/mime.convs,找到applicat ion/oct et stream application/vnd.cups raw0 行,将其注释掉,否则应用天地APPLICATION NOTESpdf、doc等文件格式将不被支持,提示 Print file was not accepted(U nsupported format'applicat ion/oct et stream '!) 错误。
另外,要将防火墙中对631端口的访问控制去掉,否则将提示打印服务器忙。
在CU PS调试过程中,如果将cupsd.conf中的loglev el info改成loglevel debug,可以在var/log/cups/error_log 中看到更多的输出信息,极大地方便了调试,也可借助网络抓包程序辅助调试。
在确认打印机能够工作之前,暂不要通过网络方式驱动打印机,可用命令行的方式添加、使能并测试打印机是否工作正常。
由于没有成熟的文档,过程比较艰辛。
CU PS启动后,可通过浏览器方式管理打印机。
连接好打印机,进入web管理界面,找到 Add print er 。
选择正确的驱动程序,如果所连接打印机的驱动程序不存在,则必须手工添加驱动程序。
添加完成后,可以打印测试页看看打印机是否可以正常工作。
3 客户端连接3.1 Windows客户端在添加打印机时,选择添加的打印机类型为 网络打印机 ,在U RL中输入htt p://printer_server_ip:631/printers/ print e r_name,其中printer_server_ip为CU PS打印服务器的IP地址,631为CUPS服务端口,print er_name为已添加的打印机的名称。