基于嵌入式Linux的打印控制系統(tǒng)的設(shè)計(jì)
關(guān)鍵詞:ARM處理器,打印機(jī),打印控制系統(tǒng),交叉編譯
1. 引言
當(dāng)前,大多數(shù)打印機(jī)都是由桌面機(jī)及相應(yīng)軟件來驅(qū)動(dòng)的,但是許多情況下,希望打印機(jī)能脫離機(jī)算計(jì)而獨(dú)立工作。基于這種考慮,本文提出一種基于嵌入式Linux的打印控制設(shè)備,它自帶液晶顯示屏,可以外接U盤,移動(dòng)硬盤,可以預(yù)覽存儲(chǔ)設(shè)備上的文本和圖像文件并進(jìn)行簡單的圖像編輯, 還可以根據(jù)需要更改打印參數(shù).
2.打印控制系統(tǒng)硬件結(jié)構(gòu)
硬件結(jié)構(gòu)原理圖如圖1所示:
圖1硬件結(jié)構(gòu)原理圖[1]
各主要模塊基本組成描述如下:
(1) 微處理器MPU[2]:本系統(tǒng)采用的嵌入式微處理器是Samsung公司S3C2410。這塊處理器是一款基于ARM920T內(nèi)核的16/32位RISC嵌入式微處理器,采用五級(jí)流水線和哈佛結(jié)構(gòu),提供1.1MIPS/MHz的性能,主要面向手持設(shè)備以及高性價(jià)比,低功耗的應(yīng)用.
(2) Flash存儲(chǔ)器: 采用Samsung公司K9F1208U0M Nand Flash存儲(chǔ)器,存儲(chǔ)容量為64MB,用于存放嵌入式操作系統(tǒng)和應(yīng)用程序,剩余空間用于暫存文件和用戶自由存儲(chǔ)使用.
(3) SDRAM存儲(chǔ)器: 采用HY57V561620CT,大小為32MB.
(4) USB集線器芯片: 采用ALCOR MICRO公司AU9254A21型號(hào)的USB集線器芯片,可將系統(tǒng)擴(kuò)展為4個(gè)USB外部接口,用于連接打印機(jī),U盤,鼠標(biāo),鍵盤等外部設(shè)備.
(5) 觸摸屏:采用Sharp公司的3.5寸LCD液晶屏, 320240的分辨率,自帶觸摸功能.
3. 打印控制系統(tǒng)的軟件設(shè)計(jì)
3.1 linux操作系統(tǒng)簡介
目前國際上有兩百多種嵌入式操作系統(tǒng),比較有影響力的幾種是:VxWorks, uC/OS, Windows CE, Linux, QNX, Palm OS.這其中,Linux以其諸多的優(yōu)點(diǎn),發(fā)展最快,應(yīng)用最廣.
Linux操作系統(tǒng)有如下幾個(gè)特點(diǎn):
(1) 免費(fèi)使用,節(jié)省了大量的開發(fā)費(fèi)用.
(2) 開放源代碼,可以根據(jù)需要隨意定制內(nèi)核.也正是由于其開源性,使得Linux成為自由軟件世界的一面旗幟,也使得我們能夠從廣袤的網(wǎng)絡(luò)世界中獲取大量的免費(fèi)資源.
(3) 可移植性,能夠應(yīng)用于多種硬件平臺(tái).原形可以在標(biāo)準(zhǔn)平臺(tái)上開發(fā),然后移植到具體硬件上,加快了開發(fā)過程.
(4) 高度的模塊化使添加部件非常容易.
本文所述系統(tǒng)采用經(jīng)過裁減(依據(jù)外圍硬件和所需服務(wù))的linux操作系統(tǒng).
3.2 linux操作系統(tǒng)下的打印控制系統(tǒng)
根據(jù)打印機(jī)的命令方式,可以將其分成文本打印機(jī)、PostScript打印機(jī)和其它種類。所謂文本打印機(jī),就是那些比較古老的針式打印機(jī),我們不需要驅(qū)動(dòng)程序,就可以直接用cat命令驅(qū)動(dòng)打印機(jī)打印文字,但只能打印英文,這種打印機(jī)現(xiàn)在已經(jīng)很少使用了。PostScript(簡稱PS)是一種繪圖能力很強(qiáng)的解釋性腳本語言,1985年由Adobe公司制定。由于它占用計(jì)算機(jī)系統(tǒng)資源少,處理過程標(biāo)準(zhǔn)化而且與設(shè)備無關(guān),所以被廣泛的應(yīng)用于打印系統(tǒng).現(xiàn)在,能夠直接支持PostScript的打印機(jī),通常都是非常高級(jí)的辦公打印機(jī),對(duì)于這種打印機(jī)來說,PS語言是它們和計(jì)算機(jī)之間溝通的最簡便的方式,應(yīng)用程序可以將生成的PS文檔直接發(fā)給打印機(jī)打印.但大多數(shù)情況下,我們使用的是各種比較低檔的,不能直接支持PostScript的噴墨或者激光打印機(jī),這一種類的打印機(jī)只能識(shí)別各廠家自己的指令集.
接下來,我們根據(jù)圖2所示框圖,介紹一下打印控制系統(tǒng)中的幾個(gè)主要問題:
(1)格式轉(zhuǎn)化程序Netpbm:
一組轉(zhuǎn)換圖形格式的程序集,可以將png和jpg等格式的圖像經(jīng)中間格式PNM,最終轉(zhuǎn)換成通用的PostScript格式.其中包括了pngtopnm,pnmtops等一系列獨(dú)立的小程序,將它們搭配使用,可以對(duì)圖像進(jìn)行諸如縮放,旋轉(zhuǎn)等各種處理.
(2) GhostScript程序:
對(duì)于支持PostScript的打印機(jī)而言,要在Linux下使用是比較容易的,但對(duì)于那些不支持PostScript的打印機(jī)而言,就必須要把PostScript格式轉(zhuǎn)換成打印機(jī)能夠識(shí)別的命令格式,而GhostScript就是用來完成這個(gè)工作的.Ghostscript是PostScript打印機(jī)模擬程序,通過軟件模擬PostScript打印機(jī),它的具體工作是將PostScript頁面描述語言,轉(zhuǎn)譯成各種打印機(jī)專用的低階打印指令,并發(fā)送給打印機(jī)執(zhí)行。因此,Ghostscript需要知道各種打印機(jī)的指令語言,這就是的打印機(jī)驅(qū)動(dòng)程序。Ghostscript軟件中有很多隨附的驅(qū)動(dòng)程序,除此之外,還可以在www.LinuxPrinting.org的打印機(jī)資料庫中尋找.
(3)打印機(jī)驅(qū)動(dòng)程序[3]:
打印機(jī)驅(qū)動(dòng)程序是應(yīng)用軟件與打印機(jī)之間交流的橋梁,它可以將轉(zhuǎn)化好的打印文件,按照各種打印機(jī)不同的格式發(fā)送給打印機(jī),因此不同的打印機(jī)都有自己特有的打印驅(qū)動(dòng)程序。另外,隨驅(qū)動(dòng)程序一起發(fā)布的還有PPD文檔,PPD(PostScript Printer Description)是用來描述打印機(jī)功能的文件,里面包含了字體,打印頁面等的一些描述。要使用一款打印機(jī)之前,必須找到其相應(yīng)的PPD文件,并正確地安裝到打印管理器程序上。
(4)打印管理程序:
作為一個(gè)多用戶多任務(wù)的操作系統(tǒng),Linux上的所有程序都是基于多任務(wù)、多用戶而設(shè)計(jì)的,打印也不例外。為了讓不同的用戶、不同的任務(wù)在打印的時(shí)候不會(huì)產(chǎn)生沖突,就需要一個(gè)打印管理程序,我們通常稱其為spooler。這類管理程序很多,從傳統(tǒng)的LPD,到時(shí)下非常流行的CUPS,它們功能各異,但有一點(diǎn)不變的就是都是用來協(xié)調(diào)打印任務(wù)的。CUPS的工作方式如下:通過命令行接收要打印的文件;通過文件的類型判斷是否需要將其轉(zhuǎn)換為PostScript,如果需要,則調(diào)用相應(yīng)的應(yīng)用程序進(jìn)行轉(zhuǎn)換;通過PPD文件來判斷GhostScript應(yīng)使用何種驅(qū)動(dòng)處理此PostScript文件;把GhostScript處理的結(jié)果輸出到打印設(shè)備上。
(5)用戶統(tǒng)一界面Foomatic[4]:
由于打印領(lǐng)域標(biāo)準(zhǔn)問題長時(shí)間不統(tǒng)一,誕生了各種打印管理程序,而要學(xué)會(huì)為每一個(gè)打印管理程序安裝驅(qū)動(dòng)程序,是一件非常復(fù)雜的事情;如果用戶需要更換打印機(jī),也必須更改復(fù)雜的設(shè)置。為了改善這種狀況,就出現(xiàn)了Foomatic應(yīng)用程序,它的作用是通過一種方式管理所有的打印機(jī),把PPD文檔和打印管理程序的配置屏蔽掉,給用戶一個(gè)友好的統(tǒng)一的界面。
在嵌入式系統(tǒng)設(shè)計(jì)中,因?yàn)槠湎到y(tǒng)資源有限,合理分配資源和保證處理速度是我們首先要考慮的問題.一臺(tái)不支持PostScript格式的打印機(jī)工作時(shí)會(huì)占用大量的CPU處理時(shí)間和內(nèi)存空間,只是在PC上工作時(shí),由于CPU處理速度快,內(nèi)存空間大,所以用戶感覺不到罷了.基于以上考慮,本文所設(shè)計(jì)的嵌入式打印系統(tǒng),在保留上述打印機(jī)系統(tǒng)結(jié)構(gòu)的情況下,以簡單的shell腳本程序代替CUPS等龐大的打印管理程序,以自行開發(fā)的圖形用戶界面代替Foomatic應(yīng)用程序.另外,由于惠普公司的打印機(jī)驅(qū)動(dòng)程序具有良好的通用性和可移植性,因此我們選擇HP Deskjet系列噴墨打印機(jī),同時(shí)使用這一系列的通用驅(qū)動(dòng)程序hpijs(含多種打印機(jī)型號(hào)的PPD文檔),源代碼由惠普公司官方網(wǎng)站提供.Ghostscript選用GNU Ghostscript 7.05版本,具有較好的可移植性.
3.3軟件設(shè)計(jì)中的關(guān)鍵問題:
(1)交叉編譯:
嵌入式項(xiàng)目的開發(fā)中,有一個(gè)重要的環(huán)節(jié)就是構(gòu)建交叉編譯工具鏈.所有的軟件源程序,必須經(jīng)過這個(gè)工具鏈的編譯,鏈接后才能生成可以在嵌入式系統(tǒng)上運(yùn)行的代碼.在過去,編譯一套工具鏈要花費(fèi)開發(fā)人員不少的時(shí)間,但現(xiàn)在在網(wǎng)上很容易就可以下載一套已經(jīng)做好的工具鏈.本文所述打印系統(tǒng)中的netpbm程序集,GhostScript程序,hpijs打印機(jī)驅(qū)動(dòng)程序都是通過交叉編譯以后才被裝入嵌入式系統(tǒng)使用的.
(2)打印任務(wù)管理程序:
沒有使用CUPS打印管理程序,是因?yàn)樗鼤?huì)耗費(fèi)大量的系統(tǒng)資源,這對(duì)于嵌入式系統(tǒng)來說無疑是致命的.但節(jié)約資源的同時(shí),我們也要花費(fèi)時(shí)間去設(shè)計(jì)一個(gè)適和于目標(biāo)系統(tǒng)的程序,來管理打印任務(wù).目前,我們實(shí)現(xiàn)的系統(tǒng)不作為打印服務(wù)器使用,因此沒有多用戶并發(fā)的情況。我們完全用SHELL腳本實(shí)現(xiàn)了簡單的打印任務(wù)管理功能,程序流程圖如下所示:
3.4 用戶圖形界面設(shè)計(jì)
Foomatic應(yīng)用程序本身并不大,但它是一個(gè)Perl腳本程序,所以如果要使用它,我們還得額外移植一套龐大的Perl腳本解釋器,這對(duì)系統(tǒng)會(huì)有十幾兆的開銷.因此,我們選擇用Qt/Embedded工具包開發(fā)了一套簡單的用戶界面.其主要功能是讓用戶可以看到存儲(chǔ)設(shè)備(flash存儲(chǔ)器或外接usb存儲(chǔ)設(shè)備)上的文件,以便選擇打印,其中jpg和png格式的圖像還可以顯示出來,供用戶做簡單編輯后再打印;另外,可以讓用戶看到驅(qū)動(dòng)程序所支持的幾十種打印機(jī)型號(hào),用戶更換打印機(jī)后,只要更改相應(yīng)的型號(hào),程序就會(huì)自動(dòng)調(diào)整打印命令,方便了用戶的管理和使用.
4.結(jié)束語
本文設(shè)計(jì)了一種基于嵌入式Linux的打印控制設(shè)備,在一般打印機(jī)上實(shí)現(xiàn)了脫離PC預(yù)覽,編輯,控制,打印的功能。這一設(shè)備具有很大的靈活性,只要移植相應(yīng)的驅(qū)動(dòng)程序,我們可以將其應(yīng)用于所有打印機(jī),這樣既獲得了優(yōu)越的性能又節(jié)省了開支,具有較高的實(shí)用價(jià)值。
參考文獻(xiàn):
[1] 江俊輝,基于ARM的嵌入式系統(tǒng)硬件設(shè)計(jì),微計(jì)算機(jī)信息,2005年第7-2期
[2] 孫天澤等著,嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開發(fā)指南D基于ARM9處理器,電子工業(yè)出版社
[3] Alessandro Rubini等著,魏永明等譯,Linux設(shè)備驅(qū)動(dòng)程序(第二版),中國電力出版社
[4] LinuxPrinting.org: Foomatic, http://www.linuxprinting.org /foomatic.html
評(píng)論