嵌入式arm usb打印机完整教程ghostscript-8.15+foo2zjs

嵌入式arm usb打印机完整教程 - 行业资讯 - 电子产品设计开发与电子技术学习交流!

1。 编译foo2zjs

先直接使用gcc编译,直接敲入make指令,一切顺利,然后将其中的arm2hpdl拉出来保存好。

然后交叉编译,这个交叉编译比较简单,修改makefile,使CC=arm-linux-gcc,然后make,一切顺利。

再使用编译出来的getweb程序,命令./getweb 1020得到(对应hp1020打印机的固件程序)

这时候再用我们刚才用x86 gcc编译的arm2hpdl工具将转化为(这一步非常重要)

将生产的和foo2zjs拷贝至开发板端的文件系统中。完成。

2。 编译ghostscript-8.15

编译ghostscript-8.15可参考阿虚的文章/aokikyon/blog/item/,写的很不错,唯一需要注意的是,最好在configure配置的时候加入--prefix的选项,比如我的是/disk2/printer/ghost-install

编译完成之后,输入make install,所有的文件将会生成灾这个目录底下。 这时候拷贝到开发板端文件系统有一定的讲究,需要同样在开发板端创建一个/disk2/printer/ghost-install,这样运行gs的时候才不会说找不到一些配置的ps文件。

另,交叉编译ghostscript时,你的交叉编译工具最好把jpeg,zlib,png等库都装好

3。 使用

首先usb的内核选项要加上usb printer这个选项。

插上打印机usb口---》mdev -s重新生产节点----》cp

/dev/lp0(这一步是加载打印机固件,这时候可以用foo2zjs生成的一个叫usb_printerid的小工具去查看lp0, ./usb_printerid

/dev/lp0,如果加载成功能看到固件版本,这时还能听到打印机被驱动的声音)------》利用foo2zjs加载(这部分可参考阿虚的文章,我不重复了)

二、用arm驱动打印机

· 主 机:VMWare--Fedora 9

· 开发板:Mini2440--128MB Nand

· 编译器:arm-linux-gcc-4.3.2

· 内核版本:linux-2.6.33

====================================交ghostscript====================================

叉编译ghostscript可以将PostScript语言文件(.ps)及pdf文件转换成各种格式。

(1) 交叉编译生成gs-arm/bin/gs

1)解压ghostscript-8.15,改目录名称为gs-x86,./configure,make。 2)解压ghostscript-8.15,改目录名称为gs-arm ./configure --host=arm-linux,make

错误1:

./obj/echogs -w ./obj/ - -include ./obj/unix_

./obj/echogs: ./obj/echogs: cannot execute binary file

原因:编译ghostscript过程中需要使用三个中间应用程序,也被编译成arm-linux格式,主机不识别

解决方法:复制ghostscript-8.15-x86/obj目录下的echogs、genarch、genconf三个可执行程序到ghostscript-8.15/obj目录下

错误2:

/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: skipping incompatible

/usr/lib/ when searching for -lXt

/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: cannot find -lXt

collect2: ld returned 1 exit status

make: *** [bin/gs] 错误 1

原因:x11相关的内容,可能arm-linux不支持

解决方法:修改ghostscript-8.15下Makefile文件,注释掉以下和x11相关内容

#DEVICE_DEVS=$(DISPLAY_DEV) $(DD) $(DD)

$(DD) $(DD) $(DD) $(DD)

(2) 添加依赖文件

在gs-arm/bin/下运行./gs -h查看ghostscript帮助:可以看到gs的使用方法和依赖文件。

(这一步应该在开发板下进行,但是运行gs-x86/bin/gs可得到同样的信息)

/ # ./gs -h

GPL Ghostscript 8.15 (2004-09-22)

Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved.

Usage: gs [switches] [ ...]

Most frequently used switches: (you can use # in place of =)

-dNOPAUSE no pause after page | -q `quiet', fewer messages

-gx page size in pixels | -r pixels/inch resolution

-sDEVICE= select device | -dBATCH exit after last file

-sOutputFile= select output file: - for stdout, |command for pipe,

embed %d or %ld for page #

Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF

Default output device: bmpmono

Available devices:

bbox bit bitcmyk bitrgb bj10e bj200 bjc600 bjc800 bmp16 bmp16m bmp256

bmp32b bmpgray bmpmono bmpsep1 bmpsep8 cdeskjet cdj550 cdjcolor cdjmono

cljet5 cljet5c deskjet devicen djet500 epswrite faxg3 faxg32d faxg4 ijs

jpeg jpeggray laserjet lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d

ljetplus nullpage pbm pbmraw pcx16 pcx24b pcx256 pcxcmyk pcxgray pcxmono

pdfwrite pgm pgmraw pgnm pgnmraw pj pjxl pjxl300 pkm pkmraw pksm pksmraw png16 png16m png256 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw

psdcmyk psdrgb psgray psmono psrgb pswrite pxlcolor pxlmono spotcmyk

tiff12nc tiff24nc tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack

uniprint xcf

Search path:

. : /usr/local/share/ghostscript/8.15/lib :

/usr/local/share/ghostscript/8.15/Resource :

/usr/local/share/ghostscript/fonts

For more information, see /usr/local/share/ghostscript/8.15/doc/.

Report bugs to , using the form in .

可见还需要lib、Resource和fonts目录,将gs-arm目录中的相应lib和Resource拷贝至对应位置。

至于fonts目录,可以先从主机的urs/share目录中拷贝过来。

(3) 在开发板上运行/bin/gs

./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r300x300

-sDEVICE=pbmraw -sOutputFile=

上述命令会把ps文件转换成pbm文件

转换某些文档会提示类似错误:

/ # ./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r300x300

-sDEVICE=pbmraw -sOutputFile=

Error: /invalidfont in findfont

Operand stack:

F1 12 Times-Roman Font Times-Roman 287289 Times-Roman --nostringval-- Times-Roman NimbusRomNo9L-Regu Courier NimbusMonL-Regu

Execution stack:

%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push

1 3 %oparray_pop 1 3 %oparray_pop 1 3 %oparray_pop 1 3 %oparray_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- 3 4 %oparray_pop 4 4 %oparray_pop --nostringval-- --nostringval-- --nostringval-- --nostringval-- --nostringval-- false 1

%stopped_push 7 5 %oparray_pop --nostringval-- --nostringval-- --nostringval-- 1 -1 1 --nostringval-- %for_neg_int_continue

Dictionary stack:

--dict:1118/1686(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)-- --dict:31/70(L)-- --dict:17/17(ro)(G)-- --dict:1118/1686(ro)(G)--

Current allocation mode is local

Last OS error: 2

Current file position is 61042

GPL Ghostscript 8.15: Unrecoverable error, exit code 1

错误原因:/invalidfont in findfont,没找到相应的字体 解决方法:看来这个文件需要Times-Roman字体,不用搜索了,系统中不叫这个名字,需要查看lib目录中的文件

line170 /Times-Roman /NimbusRomNo9L-Regu;

line122 /NimbusRomNo9L-Regu () ;

原来Times-Roman字体对应的文件是,刚刚复制的fonts目录肯定有这个文件,但是被分散在子目录中,将这个文件复制到fonts根目录即可。

==================================用foo2zjs驱动HP LaserJet

1020==============================

(1) 上位机

1)配置内核 <*> USB Printer support

2)下载foo2zjs

3)修改Makefile,添加CC=arm-linux-gcc,编译。

4)生成了foo2zjs的可执行文件。

编译过程中会出现错误:但是生成可执行文件foo2zjs即可

make: *** 没有规则可以创建“all”需要的目标“printer-profile”。

(2)arm开发板

usb线连接打印机

#mdev -s -----------------生成lp0节点,位于/dev/lp0

#./foo2zjs -z1 -p9 -r600x600 > /dev/lp0

用hp_lj1010可以打印,但是打印乱码,成功了大半,有时间再用1020试下。

注:使用编译器arm-linux-gcc4.3.2编译ghostscript时会出现错误,可换作3.3.2。

在开发板上需要lib下需要有必要的库文件支持。可从编译器中的库文件拷贝。

三、嵌入式Linux系统中打印机驱动的移植

一、开发环境

硬件环境:DM365

打印机型号:HP P1007 虚拟机系统:Red Hat Enterprise Linux 5

交叉编译环境:Ti交叉编译环境安装包

二、详细步骤

1.下载Ghostscript 9.01

2.解压,tar xzvf

3.执行cd ghostscript-9.01

4.执行./configure

5.执行make,生成x86下的gs,在源代码的bin目录下

6.解压,mkdir tar xzvf

-C

7.进入,执行./configure --host=arm_v5t_le

--prefix=/opt/printer(注:如果是在三星的板子上,修改--host=arm_linux)

8.执行make ,出错,复制ghostscript-9.01/obj目录下的mkromfs可执行文件拷贝到/obj目录下

9.重新执行make编译生成bin/gs,有17M的大小,再执行make install,将bin/gs拷贝到开发板中/bin目录下 10.在开发板中执行gs -h(x86下编译出来的gs),可获取gs的帮助信息,从中了解到相应支持的打印机的类型

11.将虚拟机中的/opt/printer,拷贝到开发板中相应的目录下。将源代码中的./Resources/Font拷贝到开发板中的/opt/printer1/share/ghostscript/9.01/Resource/Font下

12.虚拟机中执行arm_v5t_le-ldd bin/gs,查看可执行文件依赖的库文件,并将依赖的库文件拷贝到开发板中

13.下载foo2zjs

14.执行:tar zxf ,cd foo2zjs ,make,并将生成的arm2hpdl保存下来

15.修改Makefile,使得CC=arm_v5t_le-gcc,执行make,(注:这里编译生成的结果是错误的,具体解决办法看下面)

16.配置虚拟机可上网,执行./getweb P1007,下载得到惠普打印机P1007的固件

17.将步骤14中保存的arm2hpdl替换步骤15编译生成的arm2hpdl二进制文件,执行./arm2hpdl >

18.将foo2xqx及sihpP1007拷贝到开发板文件系统中的/bin目录下 文中要用到的Ghostscript 9.01与foo2zjs文件下载在论坛的1号FTP服务器里,下载地址:

FTP地址:ftp://

用户名:

密码:

在 2011年4月嵌入式Linux系统中打印机驱动的移植

下载方法见

三、打印操作:

/udev自动生成设备节点/dev/lp0(配置内核使得内核支持usb打印机,且文件系统得支持udev或者是mdev)。

2.加载固件:cat /bin/ > /dev/lp0 (有网上介绍采用cp

/bin/ /dev/lp0,这种操作应该有误,至少在我的移植中无法正常加载固件)。

3.此时能听到打印机初始化的声音,执行:# usb_printerid /dev/lp0 得到下面信息:

GET_DEVICE_ID string: MFG:Hewlett-Packard;MDL:HP LaserJet

P1007;CMD:HBS,PJL,ACL;CLS:PRINTER;DES:HP LaserJet

P1007;FWVER:20090916;

也就是说打印机正常初始化了

(注:usb_printerid为foo2zjs源代码make后生成的二进制文件)

4.执行:gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE

-sPAPERSIZE=a4 -r300x300 -sDEVICE=pbmraw -sOutputFile=

5.执行:foo2xqx -z0 -p9 -r600x600 > /dev/lp0(成功打印,不过图片感觉偏小)

四、出现错误:

问题一:

问题描述:

交叉编译好的foo2zjs,在虚拟机中执行arm_v5t_le-ldd查找库的依赖过程中出现段错误,在开发板中运行出现/bin/foo2zjs: line 1: syntax error:

unexpected "("。

执行arm_v5t_gcc-readelf -h foo2zjs,发现编译好的代码是386下的可执行文件,显然Makefile存在问题 阅读Makefile,发现存在如下语句:

5 ifeq ($(UNAME),SunOS)

6 EUID := $(shell /usr/xpg4/bin/id -u)

7 SHELL=bash

8 CC=arm_v5t_le-gcc(原为gcc)

9 OLDGROFF=OLDGROFF

10 else

11 EUID := $(shell id -u)

12 endif

大致意思应该是:查找文件系统是否为SunOS,如果是则将编译器修改为arm_v5t_le-gcc,否则仍旧采用默认的gcc。为什么做这样的判断呢?莫名其妙!

问题解决:

修改Makefile,将第8行剪切到判断语句后面。

问题二: 执行打印命令的时候,刚开始采用./foo2zjs -z1 -p9 -r600x600 >

/dev/lp0(注意:这是在网上介绍移植P1020打印机驱动中,使用P1007打印机的命令)

实际上P1007采用的是foo2xqx,两者的协议不一样。采用foo2zjs,系统不报错,但是打印机没有反应。正确的命令是:foo2xqx -z0 -p9 -r600x600

> /dev/lp0,文件可以打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值