2023年12月18日发(作者:南宫韶美)
一、嵌入式打印机完整教程:
有很多方案,目前采取的是ghostscript-8.15+foo2zjs的方案,一下内容基于cj的文档。感谢cj之前的工作。
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
-g
-sDEVICE=
-sOutputFile=
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,文件可以打印。
2023年12月18日发(作者:南宫韶美)
一、嵌入式打印机完整教程:
有很多方案,目前采取的是ghostscript-8.15+foo2zjs的方案,一下内容基于cj的文档。感谢cj之前的工作。
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
-g
-sDEVICE=
-sOutputFile=
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,文件可以打印。