嵌入式Linux系統驅動hp1020打印機

一、開發環境

硬件環境:am3354

打印機型號:hp1020plus

虛假機系統:Ubuntu12.04

交叉編譯工具版本:arm-linux-gcc version 4.5.1

二、詳細步驟

1linux內核環境配置

(a)修改drivers/usb/Kconfig中將#source 「drivers/usb/class/Kconfig」前的#去掉

(b)靜態配置linux內核打開支持USB打印機

linux內核根目錄執行#make menuconfig得到界面如下所示:

打開支持USB打印機的路徑是Device Drivers->USB Support->USB Print support;打開的界面如下圖所示:

勾選「USB Print support」保存退出,重新編譯內核,然後拷貝新內核放到開發板上。

把打印機的USB接口插到開發板的USB接口上,可發現出現/dev/usb/lp0設備節點。

2、交叉編譯foo2zjs工具

(a)下載foo2zjs源碼,

源碼網址:http://foo2zjs.rkkda.com/foo2zjs.tar.gz

b)解壓源碼

tar xvf foo2zjs.tar.gz

(c)分別拷貝爲PC版本和ARM版本

cp foo2zjs foo2zjs-arm -rf

mv foo2zjs foo2zjs-x86

(d)編譯PC版本

cd foo2zjs-x86

make

(e)編譯ARM版本

cd foo2zjs-arm

make CC=arm-linux-gcc

編譯完成後在foo2zjs-arm的根目錄中可得到getweb可執行文件

運行./getweb可得到如下界面:

可看到支持的打印機型號,我們選擇的打印機型號是1020

執行./getweb 1020 即可下載hp1020plus的驅動文件sihp1020.img

PCfoo2zjs-x86編譯出來的arm2hpdl工具,將sihp1020.img轉化爲sihp1020.dl

(f)ARM版本foo2zjs-arm編譯出來的foo2zjssihp1020.dl拷貝到開發板的/usr/printer/目錄下

3、添加交叉編譯ghostscript工具

因是嵌入式平臺編譯生產的可執行程序不宜過大,所有ghostscript工具選擇用ghostscript-8.15版本。

(a)下載源代碼ghostscript-8.15.tar.gz

(b)解壓 tar xvf ghostscript-8.15.tar.gz

(c)分別拷貝爲PC版本和ARM版本

cp ghostscript-8.15 ghostscript-8.15-arm -rf

mv ghostscript-8.15 ghostscript-8.15-pc

(d)編譯PC版本

cd ghostscript-8.15-pc

./configure

make

(e)編譯arm版本

cd ghostscript-8.15-arm

./configure --host=arm-linux --target=arm-linux --prefix=/usr/printer/

prefix 參數決定了arm版本的gs搜索路徑, 在目標板上必須和編譯的時候一致,因爲編譯好的應用程序會從prefix指定路徑查找配置和依賴的文件

PC版本的echogsgenarchgenconf拷貝到arm版本中

cp ../ghostscript-8.15-pc/obj/echogs obj/echogs

cp ../ghostscript-8.15-pc/obj/genarch obj/genarch

cp ../ghostscript-8.15-pc/obj/genconf obj/genconf

編譯

make XCFLAGS=-DHAVE_SYS_TIME_H=1 CC=arm-linux-gcc

make install

其中XCFLAGS=-DHAVE_SYS_TIME_H=1必須有的,不然會報錯。

正常情況下,可以編譯通過,可執行文件被安裝到/usr/printer

/usr/printer目錄下的ghostscript全部拷貝到開發板的/usr/printer目錄中

在開發板中執行gs,生成pbm文件用於打印(用example中的chess.ps做示範)

cd /usr/printer/ghostscript/bin

./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r600x600 -sDEVICE=pbmraw -sOutputFile=test_1.pbm /usr/print/ghostscript-8.15//share/ghostscript/8.15/examples/chess.ps

第一次執行會出現以下錯誤

Error: /invalidfont in findfont

Operand stack:le=test_1.pbm /uchess.ps

F1 12 Times-Roman Font Times-Roman 290498 Times-Roman --nostringval-- Times-Roman NimbusRomNo9L-Regu Courier NimbusMonL-Reguint

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

ubuntu中把/usr/share/fonts/type1/gsfonts/n021003l.pfb文件拷貝到開發板的/usr/printer/ghostscript/share/ghostscript/fonts目錄下

再次執行

./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r600x600 -sDEVICE=pbmraw -sOutputFile=test_1.pbm /usr/print/ghostscript-8.15/share/ghostscript/8.15/examples/chess.ps

即可生成pbm文件

4、測試打印文件

準備打印,在開發板終端中發送固件到打印機

cd /usr/printer

這句執行完後打印機有響聲

cat sihp1020.dl > /dev/usb/lp0

這句執行完後打印機開始打印

foo2zjs -z1 -p9 -r600x600 test_1.pbm > /dev/usb/lp0

注意一:發送固件到打印機中第一次打印,打印出來的是亂碼,之後的打印纔是正常的。

注意二:打印文件中的文字打印出來的字體受開發板的字庫所影響,分辨率比較低。