Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android遇上打印機

Android遇上打印機

編輯:關於Android編程

打印機其實和Android沒有什麼大的關系,和linux內核關聯才是比較強的。最近調試打印機,有那麼一點心得,一點一點記錄下來。

最終的結果是要在Android實現驅動打印機,但是一般調試一個新的驅動的流程是這樣的:1.先在linux PC上進行測試。2.在標准嵌入式linux上進行調試。3.改裝到Android中去

為什麼這麼安排,是有說道的。因為資源是遞減的,可以在第一階段確定設備有無問題,以及該設備在linux工作流程;在第二階段是因為標准的嵌入式linux還是遵循GNU規定的,包括大部分,這個階段驗證該設備能否在ARM架構的上順利編譯通過;第三階段就是實用階段了,因為最終要在這個不是怎麼遵守GNU規定的Android系統上運行的。


第一階段


我測試了3台打印機:1.Canon iP2780 2.Canon MX428 3.HP Deskjet 1000。由於的我作業系統就是Linux,在Linux PC上很快就逐個搞定。第1台用的是這裡的驅動(包括deb包和部分開源源碼)加上這個《iP2700 series IJ Printer Driver Ver. 3.30 for Linux (操作說明)》,機器就可以正常使用了;第2台和第一台驅動模式都是一樣的只不過在這裡;第3台用的是這裡的一級一級選擇最終下載文件是:hplip-3.14.1.run,直接執行會把所缺失的東西全部安裝,可以成功使用。

如果我僅僅是一個使用者,那麼到現在可以就結束了。但是我是一個開發者,我最終的目標是移植到Android中,所以我的目的地不在這裡,我要繼續深度挖掘。要挖掘的點很多,這裡說一個最迫切的就是如何用命令打印一個文件?這個問題似乎很奇怪,但是我也不知道如何做。不過最終找到了就是:lp或者lpr加文件名,就可以打印出一個文件了。例如:

lp ~/hello.pdf

找這麼一個命令我就花費了幾個小時的時間,這裡我就有一種很強的預感,前邊的路很還很遙遠。(整理文章的順序和實驗的步驟會稍有不同,其實這個命令在《iP2700 series IJ Printer Driver Ver. 3.30 for Linux (操作說明)》是有的,但是這個“操作說明”是後來才看到的)。

現在看來我不應該草率進行去進行第二個階段,應該好好的研究一下Linux的打印系統。總結文章就按照最好的流程來吧。先說我是怎麼了解了linux的打印系統的。

意外發現的這個本書《Linux系統管理技術手冊》,真是對我了解Linux的打印系統幫助是最大的,涵蓋的知識面也是最全的,以後的階段中用到的自認為是新的東西,其實這本書上都詳細講解了。講解打印不是講解如何打印就好了,而是詳細的講解了打印機的原理,要經過哪些步驟,打印機語言等等,如果是國人寫的書一般會說“此內容不在本書要討論的范圍內”一句概括。那一章我反復看了一周時間才算有些眉目。

一切終歸一張圖:

\

其實到目前為止我應該好好規劃一下我要設計的東西,實現中我急功近利了,並沒有做完全的規劃就進行了第二階段。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+0KG55ruuo7o8YnI+CjwvcD4KPHA+ICAgICAgILTy06G7+tGh1PGjus3GvPbRodTxSFC1xKOsvKS54rXExefEq7XEtry/ydLUo6xIUMrHyKvBptans9ZMaW51eLXEoaM8L3A+CjxwPiAgICAgICC08tOhz7XNs7XE0aHU8aO6PC9wPgo8cD4gICAgICAgICAgICAgILTztcS83Lm5ysdDVVBTo6zW99KqtcTEo7/p09CjujwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAguvPMqKO6PC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICC5/cLLxvejujwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgUFBEo7o8L3A+CjxwPsbkyrXU2s281tDL5rHjtNPJz7W9z8LBrNK7zPXP36Osvs2/ydLU1+m6z7PJ0rvM17Ty06HPtc2zoaPPwsPmvfjI67Xatv6917bOsMmhozwvcD4KPHA+PC9wPgo8aDE+PGJyPgq12rb+vde2zjwvaDE+CjxwPjwvcD4KPHA+PGJyPgo8L3A+CjxwPiAgICAgICC198rUQ2Fub261xLTy06G7+rXEyrG68s7S0aHU8cHL1eLR+bXEvNy5uaO6PHN0cm9uZz5DVVBTPC9zdHJvbmc+JiM0Mzs8c3Ryb25nPmNuaWpmaWx0ZXItc291cmNlLTMuMzAtMS50YXIuZ3ouPC9zdHJvbmc+PC9wPgo8aDI+MS7F5NbDTGludXjE2rrLPC9oMj4KPGJyPgoKbWFrZSBtZW51Y29uZmlnINGhyc9VU0K08tOhu/rRoc/uo7oKICAgICAgIERldmljZSBEcml2ZXJzICAtLS0+PGJyPgoKICAgICAgICAgICAgICAgICAgICAgIFsqXSBVU0Igc3VwcG9ydCAgLS0tPiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Kj4gICBVU0IgUHJpbnRlciBzdXBwb3J0ICAgICAgICAKPGgyPjIuvbuy5rHg0utDVVBTIDEuMy45PC9oMj4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">#!/bin/sh # 1.下載源碼 wget http://www.cups.org/software/1.3.9/cups-1.3.9-source.tar.gz && # 2.解壓並打開 tar xvzf cups-1.3.9-source.tar.gz && cd cups-1.3.9 && # 3.配置 ./configure --host=arm-linux --target=arm-linux --build=i686-linux CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar --disable-gnutls --disable-gssapi --disable-dbus --prefix=/ && # 4.修改Makefile使其不編譯man sed -i '22s/locale man monitor/locale monitor/' ./Makefile && # 5.編譯並安裝 make && make install DSTROOT=/work/rootfs/rootfs_qtopia_qt4 && echo "cups build install ok!"

3.交叉編譯ghostscript 8.15

#!/bin/sh
# 1.下載源碼
wget http://iweb.dl.sourceforge.net/project/ghostscript/GPL%20Ghostscript/8.15/ghostscript-8.15.tar.gz &&

# 2.解壓源碼
tar xvzf ghostscript-8.15.tar.gz  &&

# 3.分別拷貝為PC版本和ARM版本
cp ghostscript-8.15 ghostscript-8.15-arm -r && mv ghostscript-8.15 ghostscript-8.15-pc  &&

# 4.編譯PC版本
cd ghostscript-8.15-pc && ./configure && make && cd ../ &&

# 5.配置arm版本
cd ghostscript-8.15-arm && ./configure --host=arm-linux &&

# 6.修改Makefile中STDLIBS=-lm 為STDLIBS=-lm -static
sed -i '257s/STDLIBS=-lm/STDLIBS=-lm -static/' ./Makefile &&

# 7.拷貝PC版本工具
mkdir obj && cp ../ghostscript-8.15-pc/obj/genarch ../ghostscript-8.15-pc/obj/genconf ../ghostscript-8.15-pc/obj/echogs  ./obj/  &&

# 8.編譯
make &&

# 9.安裝(這個版本不支持make install的DESTDIR指定根目錄所以要手動拷貝,以後要調整目錄)
DESTDIR=/work/rootfs/rootfs_qtopia_qt4
mkdir -p          ${DESTDIR}/usr/local/share/ghostscript/8.15/  &&
cp    -r lib      ${DESTDIR}/usr/local/share/ghostscript/8.15/  &&
cp    -r Resource ${DESTDIR}/usr/local/share/ghostscript/8.15/  &&
cp       bin/gs   ${DESTDIR}/bin/



3.交叉編譯kerberos 5.1.9


#!/bin/sh

# 1.下載源碼 項目地址:http://web.mit.edu/~kerberos/dist/historic.html
wget http://web.mit.edu/~kerberos/dist/krb5/1.9/krb5-1.9-signed.tar &&

# 2.解壓
tar xvf krb5-1.9-signed.tar && tar xvzf krb5-1.9.tar.gz  &&

# 3.進入源碼目錄
cd krb5-1.9/src && 

# 4.配置
./configure CC=arm-linux-gcc --host=arm-linux || 

echo krb5_cv_attr_constructor_destructor=yes>linux-cache &&
./configure CC=arm-linux-gcc --host=arm-linux ||

 
echo krb5_cv_attr_constructor_destructor=yes>linux-cache && 
./configure CC=arm-linux-gcc --host=arm-linux --cache-file=linux-cache ||

echo ac_cv_func_regcomp=yes>>linux-cache &&
./configure CC=arm-linux-gcc --host=arm-linux --cache-file=linux-cache ||

echo ac_cv_printf_positional=yes>>linux-cache &&
./configure CC=arm-linux-gcc --host=arm-linux --cache-file=linux-cache &&


# 3.注釋一行代碼 Fix:Don't know how to do unload-time finalization for this configuration.
sed -i '397s/^/\/\//g' ./include/k5-platform.h &&

# 7.編譯並安裝
make && make install DSTROOT=/work/rootfs/rootfs_qtopia_qt4 &&

echo "krb5 build install ok!"


4.交叉編譯gutenprint 5.2.9

#!/bin/sh

# 1.下載源碼 項目地址:http://sourceforge.net/projects/gimp-print/files/gutenprint-5.2/5.2.9/
wget http://softlayer-ams.dl.sourceforge.net/project/gimp-print/gutenprint-5.2/5.2.9/gutenprint-5.2.9.tar.bz2 &&

# 2.解壓
tar xvjf gutenprint-5.2.9.tar.bz2  &&

# 3.分別拷貝為PC版本和ARM版本 
cp -r gutenprint-5.2.9 gutenprint-5.2.9-arm && mv gutenprint-5.2.9 gutenprint-5.2.9-pc &&

# 4.編譯PC版本
cd gutenprint-5.2.9-pc && ./configure && make && cd ../ &&

# 5.配置arm版本  
cd gutenprint-5.2.9-arm && ./configure --host=arm-linux --target=arm-linux --build=i686-linux CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar --with-gimp2=no --without-gimp2 --enable-cups-ppds  --enable-cups-level3-ppds --without-ghostscript --without-foomatic --disable-libgutenprintui2 &&

# 6.拷貝PC版本工具  
make || cp ../gutenprint-5.2.9-pc/src/xml/.libs/extract-strings ./src/xml/.libs/ &&

# 7.編譯並安裝
make && make install DSTROOT=/work/rootfs/rootfs_qtopia_qt4 &&

echo "gutenprint build install ok!"


5.交叉編譯hpijs-2.1.4

#!/bin/sh

# 1.下載源碼 項目地址:http://sourceforge.net/projects/hpinkjet/files/
wget http://superb-dca2.dl.sourceforge.net/project/hpinkjet/hpijs/2.1.4/hpijs-2.1.4.tar.gz

# 2.解壓源碼
tar xvzf hpijs-2.1.4.tar.gz && cd hpijs-2.1.4

# 3.配置
./configure --host=arm-linux --target=arm-linux --build=i686-linux CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar

# 4.修正語法錯誤 dj3320.cpp第403行和registry.cpp第249行 開頭的char改為const char
sed -i '249s/\tchar\t/\tconst char\t/' registry.cpp
sed -i '403s/  char/  const char/' dj3320.cpp

# 5.編譯並安裝
make && make install DESTDIR=/work/rootfs/rootfs_qtopia_qt4



6.啟動各個模塊

以上是我編譯的源碼所有記錄,它們每個都是可以單獨運行驗證的。

啟動cups:$ /etc/init.d/cups start

CUPS可以將/etc/cups/cupsd.conf的日志級別LogLevel設置為debug,這樣如果啟動失敗會將原因打印到/var/log/cups/error_log中。我沒有遇到什麼大的bug,遇到的都是缺少目錄問題。



第三階段

預留



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved