??

<图1?内核配置支持USB打印>

??动态加载

如果不想改变当前开发板的内核,可以将usb打印编译成模块,然后动态加载进去。编译后的模块为usblp.ko。然后下载到开发板上执行如下命令加载进去:

?# insmod usblp.ko? ? ? ? ? ? ? ? ? ?

将打印机与开发板通过USB连接,然后打开打印机的电源就会在开发板上出现/dev/usb/lp0设备文件。

2交叉编译Ghostscript

# 1.下载源码

官网地址:?http://www.ib911.com/197/ArtifexSoftware/ghostpdl-downloads/releases

下载ghostscript版本

*注明:网上很多交叉编译方法,此处不再展开

3交叉编译foo2xqx具体细节如下

#1.?下载foo2zjs源码

wget http://www.vtp.766ib.com/foo2zjs.tar.gz &&

# 2.解压源码

tar zxvf foo2zjs.tar.gz &&

# 3.分别拷贝为PC版本和ARM版本

cp foo2zjs foo2zjs-arm -r &&?

mv foo2zjs foo2zjs-x86 &&

# 4.编译PC版本

cd foo2zjs-x86 &&

make &&?

cd ../ &&

# 5.编译ARM版本

cd foo2zjs-arm &&

source ~/poky/toolchain/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

修改Makefile?文件,注释掉

# @if ! type $(CC) >/dev/null 2>&1; then \

...

fi

# @if [ "`ls $(MACOSX_stdio) 2> /dev/null`" != "" ]; then \

? ....

fi

# @if ! type gs >/dev/null 2>&1; then \

? ...

fi

# @if ! type dc >/dev/null 2>&1; then \

? ?...

fi

# @if ! dc -V >/dev/null 2>&1; then \

? ...

fi

#ifeq ($(UNAME),Darwin)

# @if ! type gsed >/dev/null 2>&1; then \

? ?...

fi

#endif

编译

make -j32&&

# 6.使用编译出来的getweb程序,?得到对应打印机的固件程序: sihp1006.img

./getweb P1008 &&

?

# 7.用x86 gcc编译的arm2hpdl工具将sihp1006.img转化为sihp1006.dl

cd ../foo2zjs-x86 &&

./arm2hpdl ../foo2zjs-arm/sihp1006.img > ../foo2zjs-arm/sihp1006.dl &&

cd ../ &&

?

# 8.将生成的sihp1006.dl和foo2zjs拷贝至目标板的文件系统中

cp foo2zjs-arm/sihp1006.dl /usr/share/cups/sihp1006.dl &&

cp foo2zjs-arm/foo2zjs /usr/share/cups/foo2zjs &

?

4交叉编译cups

1. ARM下移植cups

下载cups?源码,太阳城现金网平台开户网 上申博网登入:地址http://www.ib911.com/848/apple/cups/releases中的cups-2.3b7-source.tar.gz

按照cups补丁文件,修改源码(根据buildroot中补丁文件进行修改)。

0001-Remove-man-from-BUILDDIRS-in-configure.patch

0002-Do-not-use-genstrings.patch

0003-Sanitize-the-installation-process.patch

0004-Remove-PIE-flags-from-the-build.patch

0005-Fix-static-linking-with-GnuTLS.patch

2.?交叉编译cups

./configure -host=arm-linux

make -j16

make install DSTROOT=/usb-printers/cups-2.3b7/install

安装完成之后可看到etc ?include ?lib ?usr ?var文件夹。移植到嵌入式板卡中。

5打印pdf?

具体细节如下

#1.加载打印机固件

cat /usr/share/cups/sihp1006.dl > /dev/usb/lp0

此时打印机有响声

?

#2.通过gs将pdf转换为test.pbm

./bin/gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r600x600 -sDEVICE=pbmraw -sOutputFile=test.pbm ?/tiger.pdf

?

#3.打印测试

./foo2xqx -p9 -r600x600 /test.pbm > /dev/usb/lp0

?

#4.将打印机设置为共享

使用cups

配置文件为:/etc/cups/cupsd.conf修改配置文件中

LogLevel warn?修改为LogLevel debug

# Restrict access to the server...

<Location />

??Order allow,deny

?</Location>

的第3行之后添加Allow 192.168.1.0/24,同时在<Location /admin>?<Location /admin/conf>中也添加上Allow 192.168.1.0/24(具体根据打印机的使用环境进行IP配置)。

开启cups服务:/etc/init.d/cups start

修改/etc/cups/cups-file.conf?将Systemgroup?中lpadmin?去掉。或者将当前用户加入lpadmin。

?

将打印机设置为共享打印机:

$lpstat -t查看当前打印机的状态

$lpoptions -d printer?将打印机设置为默认打印机

$lpdamin -d printer –o printer-is-shared=true?将打印机设置为共享。假设此打印机的IP地址为192.168.1.108

#5.?局域网打印

局域网其他板卡,也移植cups,通过局域网进行打印

$lp test.pdf -h 192.168.1.108:631即可通过网络进行打印。

参考资料:

[1].???Linux打印系统CUPS原理分析???

[2].??cups-wiki简介

[3].??foo2zjs 简介??

[4].??cups命令行打印和选项配置??


文章转载至:飞凌嵌入式官网

http://www.ore.ya811.com/article-new-c22/350.html