Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析_第1頁
Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析_第2頁
Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析_第3頁
Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析_第4頁
Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、【W(wǎng)ord版本下載可任意編輯】 Android 的POS 機(jī)刷卡器閱讀芯片驅(qū)動(dòng)分析 MagTek刷卡器閱讀芯片21006450應(yīng)用廣泛,對(duì)于它的研究將有助于刷卡器閱讀芯片驅(qū)動(dòng)程序在實(shí)際中的應(yīng)用。這里所研究的Android系統(tǒng)架構(gòu)、芯片工作原理及接口調(diào)用是刷卡器閱讀芯片驅(qū)動(dòng)程序設(shè)計(jì)的理論根底,對(duì)驅(qū)動(dòng)程序的實(shí)現(xiàn)做指導(dǎo)。 0 引言 Google公司在20*年11月5日推出了開源的An-droid操作系統(tǒng),它是基于Linux內(nèi)核的開源手機(jī)操作系統(tǒng)。目前,Android應(yīng)用商店Android market已經(jīng)擁有超過70 萬個(gè)應(yīng)用程序,有超過10 萬名軟件開發(fā)人員為Android開發(fā)應(yīng)用程序,Andro

2、id系統(tǒng)已經(jīng)廣泛運(yùn)用于便攜式移動(dòng)設(shè)備。 移動(dòng)POS機(jī)又稱無線POS,是一種RF-SIM卡終端閱讀器,通過CDMA,GPRS,TCP/IP等與數(shù)據(jù)服務(wù)器相連開展工作。移動(dòng)POS機(jī)具有移動(dòng)性強(qiáng),平均交易時(shí)間段,易于攜帶等特性在各大行業(yè)都已經(jīng)廣泛使用。將Android系統(tǒng)移植到POS機(jī)上,將為POS機(jī)提供更加豐富的應(yīng)用和功能擴(kuò)展。 刷卡器作為POS機(jī)主要功能擔(dān)負(fù)者,其驅(qū)動(dòng)程序的研究和優(yōu)化也直接影響到Android系統(tǒng)在POS機(jī)領(lǐng)域的發(fā)展。 1 Android 系統(tǒng)架構(gòu) Android是以Linux為內(nèi)核的開放式的手機(jī)操作系統(tǒng),采用了整合的策略思想,包括底層Linux操作系統(tǒng)、中間層的中間件和上層的J

3、ava應(yīng)用程序。Android系統(tǒng)是由應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層、Linux內(nèi)核層組成的,系統(tǒng)架構(gòu)如圖1所示。 在應(yīng)用程序?qū)又邪薃ndroid系統(tǒng)的根底應(yīng)用程序,所有的應(yīng)用程序都是用Java編寫的。 應(yīng)用框架層是開發(fā)人員從事Android應(yīng)用程序開發(fā)的根底,該層簡(jiǎn)化了組件重用,可以直接使用系統(tǒng)提供的組件快速的開展應(yīng)用程序開發(fā),主要包括ActivityManager,Content Provider,View System等。 在系統(tǒng)運(yùn)行庫(kù)層中包括了兩個(gè)部分:程序庫(kù)和運(yùn)行時(shí)庫(kù),主要由Dalvik Java 虛擬機(jī)和根底的Java 類庫(kù)組成 ,為應(yīng)用程序提供服務(wù)和Java 編程語

4、言庫(kù)。 Android的系統(tǒng)服務(wù)依賴于Linux 2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層。 2 刷卡器工作原理 MagTek公司的磁卡閱讀器芯片21006450是一款高性能、低功耗的三軌磁條解碼芯片。在對(duì)磁卡閱讀芯片復(fù)位時(shí),如果STRBOE沒有置高,就需要將其置高,并將DATA拉低,然后再將STROBE置低。在復(fù)位之后仍需要將DATA 強(qiáng)制置低,在釋放DATA 之前需要將STROBE置高,然后再置低。在完成上述過程后,仍需要再完成STROBE的置高、置底,這樣才能完成復(fù)位序列。 當(dāng)讀卡器芯片處在準(zhǔn)備讀卡狀態(tài)時(shí),一旦檢

5、測(cè)到三個(gè)磁通翻轉(zhuǎn),ASIC就會(huì)通過將DATA拉低來說明此時(shí)處于卡在線狀態(tài)。然后就開始將磁條卡上的數(shù)據(jù)讀取并存儲(chǔ)到緩存中。對(duì)應(yīng)于這種卡在線狀態(tài),控制器應(yīng)當(dāng)將STROBE置高。對(duì)應(yīng)于STROBE的上升沿,ASIC會(huì)將DATA置高,并去除卡在線信號(hào)??刂破鲿?huì)將STROBE置低,然后等待DATA的下降沿,以此來說明處在緩存器就緒狀態(tài)。從內(nèi)存中讀取或提取數(shù)據(jù),需要用脈沖信號(hào)將STROBE輸入置高再置低來驅(qū)使數(shù)據(jù)指針將數(shù)據(jù)指向DATA的管腳。在數(shù)據(jù)讀取期間,當(dāng)STROBE的輸入為低時(shí),DATA 上的一個(gè)低電平代表1,而高電平代表0.需要說明的是,DATA 進(jìn)入緩存器就緒狀態(tài)后,在復(fù)位之前,ASIC不會(huì)對(duì)再

6、刷卡做出反應(yīng)。在片上緩存(內(nèi)存)中,為磁條卡的三個(gè)磁道中的每一個(gè)分配了704 b的空間,總共有2 112 b.對(duì)每條磁道而言,只有在卡上檢測(cè)到1的時(shí)候才開始存儲(chǔ)數(shù)據(jù),在這個(gè)1之前的所有的0都不會(huì)存儲(chǔ)進(jìn)緩存。當(dāng)檢測(cè)到個(gè)1之后,每個(gè)磁道存儲(chǔ)704 b的數(shù)據(jù),而一旦數(shù)據(jù)超過這個(gè)長(zhǎng)度,將會(huì)丟失超出的數(shù)據(jù)。但這并不意味著芯片的存儲(chǔ)空間太小,確切來說,這么大的空間已經(jīng)能夠充分的滿足符號(hào)ISO編碼標(biāo)準(zhǔn)的磁條卡的需求。 在提取數(shù)據(jù)時(shí),STROBE是根據(jù)磁道A,磁道B,然后磁道C的順序開展接收的。當(dāng)數(shù)據(jù)指針到達(dá)3個(gè)磁道共2112位的位置時(shí),它將從反方向再次循環(huán)數(shù)據(jù)。需要說明的是,數(shù)據(jù)的移出的順序是磁道A、磁道B

7、然后磁道C.ASIC并不決定刷卡的方向,只是簡(jiǎn)單的將接收的數(shù)據(jù)表示出來。然后,反方向刷卡數(shù)據(jù)的移出時(shí)是以磁道C、磁道B、磁道A的順序開展的,這就像將一盤磁帶或錄音帶翻帶。 在復(fù)位時(shí),會(huì)去除ASIC上的所有數(shù)據(jù),將所有的數(shù)據(jù)位都置為0(高電平)。 3 驅(qū)動(dòng)設(shè)計(jì) 驅(qū)動(dòng)程序是Linux內(nèi)核與硬件之間的接口,直接對(duì)硬件設(shè)備開展操作,同時(shí)對(duì)上層應(yīng)用程序提供接口。 Android的設(shè)備驅(qū)動(dòng)主要完成以下功能:初始化和釋放設(shè)備;讀取硬件設(shè)備數(shù)據(jù);將內(nèi)核數(shù)據(jù)寫入到硬件設(shè)備;讀取應(yīng)用程序數(shù)據(jù)傳送給設(shè)備文件等。在Android系統(tǒng)中刷卡器驅(qū)動(dòng)應(yīng)包括:Linux內(nèi)核驅(qū)動(dòng)程序、HAL(硬件抽象層)模塊、JNI方法、ap

8、plication framework硬件訪問服務(wù)。刷卡器閱讀芯片與開發(fā)板的連接框圖如圖1所示。 3.1 Linux內(nèi)核刷卡器閱讀芯片驅(qū)動(dòng)程序 刷卡器的基本功能就是讀取磁卡中的數(shù)據(jù)開展解碼,并將得到的解碼數(shù)據(jù)傳遞給上層應(yīng)用程序。An-droid為了保護(hù)一些硬件提供商的知識(shí)產(chǎn)權(quán)提出了HAL層的概念,避開了Linux的GPL束縛,基本的思路是把控制硬件的動(dòng)作都放在Android HAL層,而Linux driver只是完成一些簡(jiǎn)單的數(shù)據(jù)交換。這里的Linux內(nèi)核刷卡器驅(qū)動(dòng)程序同樣也只是一個(gè)的字符設(shè)備驅(qū)動(dòng),設(shè)備以模塊的形式存在Linux內(nèi)核中,模塊的加載和卸載通過stat-ic int_init m

9、sr_init(void)和static void_exit msr_exit(void)函數(shù)實(shí)現(xiàn),static int_msr_setup_dev(structmsr_Android_dev* dev)函數(shù)對(duì)設(shè)備開展初始化,函數(shù)static long msr_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)實(shí)現(xiàn)驅(qū)動(dòng)程序?qū)λ⒖ㄆ鞯腎/O控制。設(shè)備的打開、關(guān)閉及具體的代碼實(shí)現(xiàn)可以參考Linux設(shè)備驅(qū)動(dòng)程序。對(duì)內(nèi)核配置編譯后就可以在Linux內(nèi)核中得到設(shè)備模塊msr.o,在上層中可以通過調(diào)

10、用這個(gè)模塊來實(shí)現(xiàn)對(duì)刷卡器的控制。 3.2 HAL層訪問內(nèi)核驅(qū)動(dòng)程序 硬件抽象層中訪問不同設(shè)備內(nèi)核驅(qū)動(dòng)程序的模塊是以*.so文件形式存在的,這樣可以有效的保護(hù)硬件廠商的知識(shí)產(chǎn)權(quán)。在runtime(JNI部分),則向HAL取得特定模塊的operations,再callback 這些操作函數(shù)。在HAL 層包括許多模塊,而runtime 只需要說明類型,即module ID,就可以取得相應(yīng)模塊的operations.在HAL層中需要具體實(shí)現(xiàn)刷卡器的讀卡操作。首先需要查找到開始標(biāo)志0 x0b,然后將磁道1中的數(shù)據(jù)放到buf1中,用同樣的方法可以將磁道2,3的數(shù)據(jù)存到buf2,buf3中,磁道2多40個(gè)字

11、符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn),而磁道3多107個(gè)字符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn)。 然后將buf中的數(shù)據(jù)補(bǔ)齊之后放在主存放器中。HAL層中還需要使用static int check_msr_io(void)對(duì)I/O 的狀態(tài)開展檢測(cè),并對(duì)設(shè)備開展初始化static int msr_de-vice_init(void)。具體的實(shí)現(xiàn)由于篇幅限制,不在開展詳細(xì)介紹。 3.3 編寫JNI方法訪問硬件 從編程語言看,Android系統(tǒng)是由基于Java語言的Java層與基于C/C+語言的C/C+層組成的,為了使這兩層相互配合、共同完成任務(wù)就必須使用Java本地接口(JNI,Java Native Interf

12、ace)將這兩層有機(jī)的聯(lián)系起來。 JNI提供了一系列接口,允許Java類與使用C/C+編寫的應(yīng)用程序、模塊、庫(kù)開展交互操作。JNI是通過函數(shù)方法映射表static const JNINativeMethod method_table,將Java本地方法和HAL層提供的C函數(shù)接口銜接起來。 3.4 在application framework增加硬件訪問服務(wù) 在Android Framework或應(yīng)用程序開發(fā)中所需要的主要API都是以服務(wù)的形式存在的。對(duì)應(yīng)用程序來說,硬件服務(wù)是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程中的,若要調(diào)用這些服務(wù)就需要在硬件服務(wù)和應(yīng)用程序之間添加通信接口。應(yīng)用程序通過Interface IMsrService接口,調(diào)用硬件服務(wù)提供的Init()等函數(shù)。在刷卡器的硬件服務(wù)中是將定義的通信接口與JNI提供的接口相關(guān)聯(lián)起來。同時(shí)需要將磁卡閱讀芯片服務(wù)添加到系統(tǒng)服務(wù)中Service-Manager.addService(“msr”,new MsrService(),這樣應(yīng)用程序就能通過Java接口調(diào)用硬件服務(wù),實(shí)現(xiàn)對(duì)磁卡閱讀芯片的控制。圖2以讀取芯片數(shù)據(jù)為例,簡(jiǎn)單介紹各層之間的調(diào)用。 4 結(jié)語 隨著系統(tǒng)逐漸成熟,應(yīng)用程序日益

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論