Openwrt实现Cups打印
2015-11-11 10:06
1111 查看
下面,我根据自己的理解稍微介绍一下cups的工作流程,最上面的cups server是表示的是从客户端传送给cups的一些打印文件,cups接收到了文件后,调用cups的Postscript解释器,对文件进行解释,然后可能会调用pstops在对解释后的文件进行再次解释。到目前为止都是可以通过cups自身完成的,但是要传送到打印机,除非是那种Postscript打印机可以直接将处理后的文件流传入打印机,否则还需要借助其他的软件进行文件流转换,方能传入打印机。
上图中,包含有Ghostscript与Pstoraster,二条不同的路线,其实这是一条路线,当时在详细设计中不知怎么画了这样一个图,现在思路要清晰许多,Ghostscript是一个文件格式的转换器,基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件,在这里主要用于处理Postscript解释后的文件。Pstoraster是一个脚本,在运行此脚本时,本身需要依赖于Ghostscript才能进行转换,所以他们可以当做是一个东西,当然Ghostscript还可以用于PDF文件转换为Postscript文件,这是airprint需要的东西,这里不做过多的解释。
我们转送的打印文件到此时已经通过Ghostscript转换为raster文件,此时,就需要用到你使用的是何种PPD文件,如果你使用的PPD文件属于gutenprint的打印方式,则会用到一个叫rastertogutenprint的解释器,这是gutenprint种的东西,相同的Hplip也一样,我们用的就是这种方式进行打印。最后传送到backend中,backend与打印机相连。
基本原理在这里就说这么多,都是根据我自己的理解进行阐述的,可能存在不妥的地方。
下面,我们再来总结一下我们需要的东西
(1)cups (2)Ghostscript (3)Pstoraster(早期的cups版本是存在的,目前已经没有了,可以在网上自己下载一个) (4)gutenprint 或Hplip(再次注意,PPD文件是在编译这二个软件的时候,gutenprint需要制定编译选项,Hplip会直接生成)
Openwrt官网上就有cups的Makefile直接可以用,这里不做过多的说明,主要还是说明一下Ghostscript的编译。
其实,网上已经有了几篇关于Ghostscript交叉编译错误及解决方案的问题,部分可以借鉴,但是正对Openwrt的编译平台,还需要做其他的考虑。
问题一 error: libtiff configure scriptfailed
在makefile中,配置选项--with-system-libtiff
问题二error: jbig2dec configurescript failed
在makefile中,添加配置选项--without-jbig2dec
问题三就是checking for bigendian... configure: error: in `
这是大小端问题引起的,我的解决方案是,直接在源码Makefile中检查大小端的代码去掉了。
问题四
./obj/aux/echogs:Command not found
./obj/aux/genconf: Command not found
./obj/aux/genarch: Command not found
这是由于echogs,genconf,genarch不能进行交叉编译,需要修改它的编译方式,在Makefile中将他们的编译方式强制指定为gcc编译。这里不是最终的目标程序,不需要进行交叉编译。
问题五:./obj/aux/mkromfs:/lib/ld-uClibc.so.0: bad ELF interpreter: No such file or directory
这是由于mkromfs_0也不能通过交叉编译,生成出来的mkromfs_0命令无法使用,修改编译方式,并将gcc编译生成的。
问题六:
./obj/jccoefct.c:In function 'compress_data':
./obj/jccoefct.c:153:3:error: 'forward_DCT_ptr' undeclared (first use in this function)
./obj/jccoefct.c:153:3:note: each undeclared identifier is reported only once for each function itappears in
./obj/jccoefct.c:153:19:error: expected ';' before 'forward_DCT'
./obj/jccoefct.c:172:2:error: 'forward_DCT' undeclared (first use in this function)
./obj/jccoefct.c:172:40:error: subscripted value is pointer to function
./obj/jccoefct.c:187:8:warning: implicit declaration of function 'FMEMZERO'
这也是由于编译jccoefct.c出现问题,所以修改它的编译方式,这里你可以先参照在x86平台下的编译jccoefct.c的选项,对照交叉编译的选项进行修改,去掉交叉编译多出来的编译选项。在以后的编译过程中还会遇到类似的编译问题,jmemmgr.c,jcdctmgr.c,jcarith.c,jcmaster.c,jdcoefct.c,jdinput.c,jdarith.c,jdmarker.c,按照同样的方式修改编译方式。
交叉编译gutenprint
问题一:
gutenprint-5.2.9/src/xml/.libs/lt-extract-strings: /lib/ld-uClibc.so.0:bad ELF interpreter: No such file or directory
主要是由于extract-strings不能进行交叉编译,需要gcc编译。
先说到这里吧!以后有机会再来添加这篇博客,有什么意见或者问题,可以留言向我提出来。 http://m.blog.csdn.net/blog/u011743648/10493757
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区