編輯:關於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!"
#!/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/
#!/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!"
#!/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!"
#!/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
以上是我編譯的源碼所有記錄,它們每個都是可以單獨運行驗證的。
啟動cups:$ /etc/init.d/cups start
CUPS可以將/etc/cups/cupsd.conf的日志級別LogLevel設置為debug,這樣如果啟動失敗會將原因打印到/var/log/cups/error_log中。我沒有遇到什麼大的bug,遇到的都是缺少目錄問題。
預留
前言Android進程和Service的保活,是困擾Android開發人員的一大頑疾。因涉及到省電和內存管理策略,各廠商基於自家的理解,在自已ROOM發布於都對標准And
飛信,是中國移動推出的一款聊天工具,通過手機號注冊賬號然後跟通訊錄的朋友發短信。這個功能就是可以免費發短信,但是前提條件必須是加為了飛信好友。那麼小編就給大
關於Dagger,在之前的博文(Android 依賴注入:Dagger 實例講解(Demo下載))中已有介紹, 本文說的Dagger 2主要是由Google
微信紅包是騰訊旗下產品微信於2014年1月27日推出的一款應用,功能上可以實現發紅包、查收發記錄和提現。臨近春節了,新年發紅包是我們的傳統文化,現在微信紅包