一種硬件設備的訪問管理方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種硬件設備的訪問管理方法,包括:服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程;監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,創(chuàng)建服務于所述連接請求的服務線程;服務線程接收來自客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,以使所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返回給對應的上層應用;本發(fā)明還公開了一種硬件設備的訪問管理系統(tǒng),可使得上層應用可在非root權(quán)限的情況下,安全的與所述硬件設備建立連接。
【專利說明】
一種硬件設備的訪問管理方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及自助終端技術(shù)領(lǐng)域,尤其涉及一種硬件設備的訪問管理方法及系統(tǒng)。 【背景技術(shù)】
[0002]在Linux系統(tǒng)中,訪問硬件設備(主要有串口的設備和USB接口的設備)需要root權(quán)限,但上層應用的操作不需要root權(quán)限也可以進行正常業(yè)務流程,并且在Linux系統(tǒng)中不提倡使用root權(quán)限直接運行程序,更不提倡使用root登陸到桌面,這樣就會存在安全風險,導致系統(tǒng)不穩(wěn)定現(xiàn)象。在Android的環(huán)境(Android也是基于Linux內(nèi)核的嵌入式小型系統(tǒng))中是不允許直接訪問硬件設備(主要有串口的設備和USB接口的設備),原因是因為Android系統(tǒng)會在啟動應用程序時會自動創(chuàng)建一個臨時用戶運行程序,并在經(jīng)過裁剪后的C++環(huán)境下運行的,但與硬件設備建立通信必須要使用root權(quán)限,并且需要比較全面的Linux環(huán)境的函數(shù)集。
[0003]由上述可知,在Linux系統(tǒng)或Android系統(tǒng)中,若需要直接訪問硬件設備,貝lj需要使用root權(quán)限,但是使用root權(quán)限又可能存在安全風險和隱患,因而開發(fā)一套能夠?qū)τ布O備的連接進行管理和授權(quán)的設備管理系統(tǒng)對Linux系統(tǒng)顯得尤為重要。
【發(fā)明內(nèi)容】
[0004]針對上述問題,本發(fā)明的目的在于提供一種硬件設備的訪問管理方法及系統(tǒng),可使得所述上層應用可在非root權(quán)限的情況下,安全的與所述硬件設備建立連接。
[0005]本發(fā)明提供了一種硬件設備的訪問管理方法,包括如下步驟:
[0006]服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;
[0007]所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程;
[0008]所述服務端的服務線程接收來自所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,以使所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返回給對應的上層應用。
[0009]優(yōu)選地,所述協(xié)議數(shù)據(jù)包由所述客戶端在接收到所述上層應用通過調(diào)用所述驅(qū)動訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并對序列化處理生成的二進制數(shù)據(jù)流進行打包生成。
[0010]優(yōu)選地,在Linux系統(tǒng)環(huán)境下,所述服務端由Linux系統(tǒng)通過inetd守護進程以root 權(quán)限啟動;[0〇11 ] 在Android系統(tǒng)環(huán)境下,所述服務端以root權(quán)限在Android系統(tǒng)啟動的時自動啟動,其中,通過在Android系統(tǒng)的NDK層建立一個基于TCP/IP通信的客戶端的應用庫,然后在 Android的底層建立基于TCP/IP的一個通信服務來生成所述服務端。
[0012]優(yōu)選地,所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程,具體包括:[0〇13]監(jiān)聽來自客戶端的連接請求;
[0014]判斷是否有合法的連接請求,若有,則獲取所述連接請求中的數(shù)據(jù)包頭的信息定位數(shù)據(jù)包,讀取握手數(shù)據(jù)包;
[0015]檢查所述握手數(shù)據(jù)包是否合法,若合法,則創(chuàng)建服務于所述連接請求的服務線程, 并分配連接使用權(quán)給所述客戶端;若不合法,則拒絕所述客戶端的連接請求。
[0016]優(yōu)選地,所述服務端的服務線程接收來自所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,具體包括:
[0017]接收所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包;
[0018]對接收的所述協(xié)議數(shù)據(jù)包進行解析,將解析得到的協(xié)議數(shù)據(jù)進行反序列化,并創(chuàng)建相應的函數(shù)參數(shù)表;
[0019]識別所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D,調(diào)用所述命令I(lǐng)D所對應的函數(shù)建立與所述接口的連接,并對所述函數(shù)的輸出參數(shù)進行序列化處理;
[0020]將序列化后的輸出參數(shù)發(fā)送給所述客戶端。
[0021]本發(fā)明還提供一種硬件設備的訪問管理方法,包括如下步驟:
[0022]服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;
[0023]所述客戶端向所述服務端發(fā)起連接請求;
[0024]所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程;
[0025]所述客戶端將協(xié)議數(shù)據(jù)包發(fā)送給所述服務端的服務線程;
[0026]所述服務端的服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端;
[0027]所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返回給對應的上層應用。
[0028]優(yōu)選地,在所述客戶端將協(xié)議數(shù)據(jù)包發(fā)送給所述服務端的服務線程之前,還包括:
[0029]所述客戶端在接收到所述上層應用通過調(diào)用所述驅(qū)動訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并對序列化處理生成的二進制數(shù)據(jù)流進行打包生成協(xié)議數(shù)據(jù)包。。
[0030]優(yōu)選地,所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程,具體包括:[0〇31]監(jiān)聽來自客戶端的連接請求;
[0032]判斷是否有合法的連接請求,若有,則獲取所述連接請求中的數(shù)據(jù)包頭的信息定位數(shù)據(jù)包,讀取握手數(shù)據(jù)包;
[0033]檢查所述握手數(shù)據(jù)包是否合法,若合法,則創(chuàng)建服務于所述連接請求的服務線程, 并分配連接使用權(quán)給所述客戶端;若不合法,則拒絕所述客戶端的連接請求。
[0034]優(yōu)選地,所述服務端的服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,具體包括:
[0035]解析所述協(xié)議數(shù)據(jù)包,將解析得到的協(xié)議數(shù)據(jù)進行反序列化,并創(chuàng)建相應的函數(shù)參數(shù)表;[〇〇36]識別所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D,調(diào)用所述命令I(lǐng)D所對應的函數(shù)建立與所述接口的連接,并對所述函數(shù)的輸出參數(shù)進行序列化處理;
[0037]將序列化后的輸出參數(shù)發(fā)送給所述客戶端。
[0038]本發(fā)明還提供一種硬件設備的訪問管理系統(tǒng),包括客戶端及服務端,其中:
[0039]所述服務端,用于在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;
[0040]所述客戶端,用于向所述服務端發(fā)起連接請求;
[0041]所述服務端,用于在所述監(jiān)聽線程監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程;
[0042]所述客戶端,用于在接收到上層應用通過調(diào)用對應的驅(qū)動訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并將序列化處理生成的二進制數(shù)據(jù)流打包成協(xié)議數(shù)據(jù)包發(fā)送給所述服務端的服務線程;
[0043]所述服務端,用于在所述服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端;
[0044]所述客戶端,用于對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返回給對應的上層應用。
[0045]本發(fā)明實施例提供的硬件設備的訪問管理方法及系統(tǒng),通過在Linux系統(tǒng)環(huán)境或 Android系統(tǒng)環(huán)境下建立能夠以root權(quán)限啟動的服務端,并實現(xiàn)對所連接的硬件設備進行連接和訪問管理,使得所述上層應用可在非root權(quán)限的情況下,通過所述服務端安全的與所述硬件設備建立連接。此外,由于所述服務端可為每個上層應用配置一個服務線程,使得多個上層應用能夠共享一個硬件設備?!靖綀D說明】
[0046]為了更清楚地說明本發(fā)明的技術(shù)方案,下面將對實施方式中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施方式,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。 [〇〇47]圖1是本發(fā)明實施例提供的硬件設備的訪問管理系統(tǒng)與上層應用和硬件設備的交互示意圖。[〇〇48]圖2是本發(fā)明實施例提供的硬件設備的訪問管理系統(tǒng)的工作示意圖。
[0049]圖3是本發(fā)明實施例提供的協(xié)議數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)圖。
[0050]圖4是本發(fā)明實施例提供的硬件設備的訪問管理方法的流程示意圖。
[0051]圖5是本發(fā)明實施例提供的服務端的具體執(zhí)行步驟示意圖。
[0052]圖6是本發(fā)明實施例提供的服務端的服務線程的具體執(zhí)行步驟示意圖。[〇〇53]圖7是本發(fā)明實施例提供的硬件設備的訪問管理方法的流程示意圖。[〇〇54]圖8是本發(fā)明實施例提供的硬件設備的訪問管理方法的流程示意圖?!揪唧w實施方式】
[0055]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。[〇〇56]請參閱圖1及圖2,本發(fā)明實施例提供一種硬件設備訪問管理系統(tǒng)100,用于在 Linux系統(tǒng)環(huán)境或Android系統(tǒng)環(huán)境下,對硬件設備的訪問及連接進行授權(quán)管理。其中,所述硬件設備訪問管理系統(tǒng)1〇〇包括客戶端10及服務端20。[〇〇57]所述服務端20,用于在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端10的連接請求;其中,所述服務端以root權(quán)限啟動。[〇〇58]在本發(fā)明實施例中,所述服務端20在啟動后將主動讀取通信配置,當檢測到有外部的硬件設備通過接口(所述接口可為串口或USB接口,如圖1中的串口301、串口302、 USB303、USB304等)接入到終端(特別地,安裝有Linux系統(tǒng)或Android系統(tǒng)的終端)上時,所述服務端20可與所述硬件設備建立連接,將成功與所述硬件設備建立連接的連接數(shù)據(jù)保存到連接池中,并創(chuàng)建一個監(jiān)聽線程,以監(jiān)聽來自所述客戶端10的連接請求。[〇〇59]在本發(fā)明實施例中,所述服務端20以root權(quán)限啟動,具體地,在Linux系統(tǒng)環(huán)境下, 所述服務端20可由Linux系統(tǒng)通過inetd守護進程以root權(quán)限進行啟動;而在Android系統(tǒng)環(huán)境下,所述服務端20以root權(quán)限在Android系統(tǒng)啟動的時自動啟動,其中,所述服務端20 可通過在Android系統(tǒng)的NDK層建立一個基于TCP/IP通信的客戶端的應用庫,然后在 Android的底層建立基于TCP/IP的一個通信服務來生成。
[0060]所述客戶端10,用于向所述服務端20發(fā)起連接請求。[〇〇611 在本發(fā)明實施例中,上層應用200通過調(diào)用相應的驅(qū)動(如圖1所示的驅(qū)動201,當然也可為是驅(qū)動202,驅(qū)動203…,為便于描述,以下均定義為驅(qū)動201)以間接調(diào)用所述客戶端10的通信接口,此時觸發(fā)所述客戶端10向所述服務端20發(fā)起連接請求。其中,所述客戶端 10可通過TCP/IP發(fā)起與服務端20的監(jiān)聽線程的連接請求。
[0062]所述服務端20,用于在所述監(jiān)聽線程監(jiān)聽到來自所述客戶端10的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程。
[0063]在本發(fā)明實施例中,所述服務端20的監(jiān)聽線程在接收到每次連接請求時,都會進行握手校驗,校驗成功后,所述監(jiān)聽線程會建立一個通信服務,所述通信服務此時主動創(chuàng)建用于服務當前連接請求的服務線程,并將所述連接請求中的連接描述字交予所述服務線程進行管理,所述服務線程建立后,所述客戶端10就能與所述服務端20的數(shù)據(jù)通道進行數(shù)據(jù)的交互。[〇〇64]所述客戶端10,用于在接收到上層應用200通過調(diào)用對應的驅(qū)動201訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并將序列化處理生成的二進制數(shù)據(jù)流打包成協(xié)議數(shù)據(jù)包發(fā)送給所述服務端20的服務線程。[〇〇65]具體地,所述客戶端10等待所述上層應用200調(diào)用自身的相應的通信接口,也就是等待上層應用200主動調(diào)用驅(qū)動201,從而發(fā)出調(diào)用所述客戶端10的通信接口,在調(diào)用通信接口時,將產(chǎn)生對應的接口數(shù)據(jù),所述客戶端10對所述接口數(shù)據(jù)進行序列化處理,也就是將所述接口數(shù)據(jù)處理成二進制數(shù)據(jù)流,并將所述二進制數(shù)據(jù)流打包成協(xié)議數(shù)據(jù)包后發(fā)給服務端20的服務線程。
[0066]請一并參閱圖3,圖3是所述協(xié)議數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)示意圖。所述協(xié)議數(shù)據(jù)包包括以下字段:[〇〇67]同步頭字段(GRGB)Dll,用于準確定位數(shù)據(jù)包頭位置;[〇〇68]校驗碼字段(CRC)D12,用于對每次包頭數(shù)據(jù)的正確性校對,以提高數(shù)據(jù)包的準確性,用于生成校驗碼的數(shù)據(jù)為CMD字段、ID字段、ERROR字段和LEN字段;
[0069]命令字段(CMD)D13,用于描述當前數(shù)據(jù)包的命令描述,例如初始化命令,初始化應答、調(diào)用函數(shù)命令,調(diào)用函數(shù)應答和關(guān)閉連接等;
[0070]會話字段(ID)D14,用于描述當前命令CMD的會話ID,也就是保證每次數(shù)據(jù)交互的上下文的完整性;
[0071]錯誤碼字段(ERR0R)D15,用于描述調(diào)用過程中的錯誤信息序號,如果是調(diào)用成功時,此處置為0,否則設置為一個非0的數(shù)值;
[0072]數(shù)據(jù)長度字段(LEN)D16,用于描述DATA字段實際的數(shù)據(jù)長度,如果沒有DATA字段時會設置為〇,否則設置為實際的數(shù)據(jù)長度;[〇〇73]數(shù)據(jù)體字段(DATA)D17,交互過程中的實際數(shù)據(jù)(二進制的數(shù)據(jù)段),長度由LEN指定。
[0074]所述服務端20,用于在所述服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端10。
[0075]在本發(fā)明實施例中,所述服務線程啟動時進行必要的初始化操作,然后等待接收客戶端10的協(xié)議數(shù)據(jù)包,在接收到所述協(xié)議數(shù)據(jù)包后,所述服務線程對所述協(xié)議數(shù)據(jù)包進行解析,對解析得到的協(xié)議數(shù)據(jù)進行反序列化操作,并創(chuàng)建相應的參數(shù)表。此后,所述服務線程讀取所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D(包含于CMD字段D13中),并調(diào)用與所述命令I(lǐng)D對應的函數(shù),然后將所述函數(shù)的輸出參數(shù)數(shù)據(jù)進行序列化處理后,發(fā)送給所述客戶端10。
[0076]所述客戶端10,用于對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后, 并通過驅(qū)動201返回給對應的上層應用200。
[0077]在本發(fā)明實施例中,所述客戶端10對所述函數(shù)的輸出參數(shù)進行反序列化,將反序列化后的輸出參數(shù)寫入函數(shù)參數(shù)表后,通過驅(qū)動201返回給對應的上層應用200,如此,所述上層應用200即可在非root權(quán)限的情況下,安全的與所述硬件設備建立連接,并實現(xiàn)對所述硬件設備的訪問。[〇〇78]綜上所述,本發(fā)明實施例提供的硬件設備的訪問管理系統(tǒng)100,在Linux系統(tǒng)環(huán)境下,建立能夠以root權(quán)限啟動的服務端20,并實現(xiàn)對所連接的硬件設備進行連接和訪問管理,使得所述上層應用200可在非root權(quán)限的情況下,通過所述硬件設備的訪問管理系統(tǒng) 100安全的與所述硬件設備建立連接。此外,由于所述服務端20可為每個上層應用200配置一個服務線程,使得多個上層應用能夠共享一個硬件設備。
[0079]請一并參閱圖4,圖4是本發(fā)明實施例提供的硬件設備的訪問管理方法,所述硬件設備的訪問管理方法是從服務端一側(cè)進行描述的,其包括如下步驟:
[0080]S101,服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動。
[0081]S102,所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程。
[0082]S103,所述服務端的服務線程接收來自所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,以使所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返回給對應的上層應用。
[0083]其中,所述協(xié)議數(shù)據(jù)包由所述客戶端在接收到所述上層應用通過調(diào)用所述驅(qū)動訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并對序列化處理生成的二進制數(shù)據(jù)流進行打包生成。
[0084]本發(fā)明實施例提供的硬件設備的訪問管理方法,在Linux系統(tǒng)環(huán)境下,建立能夠以root權(quán)限啟動的服務端,并實現(xiàn)對所連接的硬件設備進行連接和訪問管理,使得所述上層應用可在非root權(quán)限的情況下,通過所述服務端安全的與所述硬件設備建立連接。此外,由于所述服務端可為每個上層應用配置一個服務線程,使得多個上層應用能夠共享一個硬件設備。
[0085]下面將分別對所述服務端和服務端的服務線程的具體執(zhí)行步驟做進一步的描述。
[0086]請一并參閱圖5,圖5是所述服務端的具體執(zhí)行步驟示意圖,包括:
[0087]S201:服務端啟動時主動讀取通信配置,并與硬件設備建立連接。
[0088]S202:服務端將成功與硬件設備建立連接的連接數(shù)據(jù)保存到連接池,并創(chuàng)建監(jiān)聽線程。
[0089]S203:服務端監(jiān)聽客戶端的連接請求。
[0090]S204:服務端判斷是否有合法的連接請求,如果有合法的連接時繼續(xù)執(zhí)行S205,否則跳轉(zhuǎn)到S203。
[0091]S205:服務端通過所述連接請求中的數(shù)據(jù)包頭的信息定位數(shù)據(jù)包讀取握手數(shù)據(jù)包。
[0092]S206:服務端檢查所述握手數(shù)據(jù)包是否合法,如果所述握手數(shù)據(jù)包合法則執(zhí)行S208,否則執(zhí)行S207。
[0093]S207:斷開與所述客戶端的連接請求,釋放連接時所創(chuàng)建的資源,跳轉(zhuǎn)到S203。
[0094]S208:創(chuàng)建服務于所述連接請求的服務線程以及所需要的資源,并分配連接使用權(quán)給客戶端,跳轉(zhuǎn)到S203繼續(xù)等待下一個連接請求。
[0095]請一并參閱圖6,圖6是所述服務端的服務線程的具體執(zhí)行步驟示意圖,包括:
[0096]S301:服務線程啟動時進行必要的初始化操作;
[0097]S302:等待接收所述客戶端的協(xié)議數(shù)據(jù)包;
[0098]S303:判斷是否接收到協(xié)議數(shù)據(jù)包,如果執(zhí)行S304,否則跳轉(zhuǎn)到S302繼續(xù)等待接收協(xié)議數(shù)據(jù)包;
[0099]S304:解析所接收的協(xié)議數(shù)據(jù)包,如果解析成功執(zhí)行S305,否則跳轉(zhuǎn)到S302繼續(xù)等待接收數(shù)據(jù);
[0100]S305:對解析所述協(xié)議數(shù)據(jù)包得到的協(xié)議數(shù)據(jù)進行反序列化操作,并創(chuàng)建相應的參數(shù)表;[0101 ] S306:識別所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D,如果命令I(lǐng)D能夠識別則執(zhí)行S308,否則執(zhí)行S307;
[0102]S307:返回命令錯誤的通信協(xié)議包文給客戶端,然后跳轉(zhuǎn)到S302繼續(xù)等待接收協(xié)議數(shù)據(jù)包;
[0103]S308:調(diào)用命令I(lǐng)D所對應的函數(shù),然后將函數(shù)的輸出參數(shù)進行序列化處理;
[0104]S309:將序列化后的輸出參數(shù)回復給客戶端。
[0105]請一并參閱圖7,圖7是本發(fā)明實施例提供的硬件設備的訪問管理方法的流程示意圖,其是從客戶端一側(cè)進行描述的,其包括如下步驟:
[0106]S401:客戶端通過通信接口以TCP/IP的方式連接服務端。
[0107]S402:客戶端判斷連接狀態(tài),如果已經(jīng)建立合法的連接執(zhí)行S403,否則跳轉(zhuǎn)到S410o
[0108]S403:客戶端在成功連接后主動發(fā)送握手數(shù)據(jù)包給服務端。
[0109]S404:客戶端驗證握手是否成功,如果驗證成功繼續(xù)執(zhí)行S405,否則跳轉(zhuǎn)到S410;
[0110]S405:客戶端等待上層應用調(diào)用相應的通信接口,即等待上層應用主動調(diào)用驅(qū)動,從而對其通信接口進行訪問;
[0111]S406:客戶端對訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,也就是將接口數(shù)據(jù)處理成二進制數(shù)據(jù)流;
[0112]S407:客戶端將序列化后的二進制數(shù)據(jù)流打包成協(xié)議數(shù)據(jù)包發(fā)給服務端的服務線程;
[0113]S408:客戶端等待服務端的服務線程的應答,或者等待應答超時;
[0114]S409:客戶端對服務端返回的序列化后的輸出參數(shù)進行反序列化,并回填到函數(shù)參數(shù)表后,返回給上層應用,跳轉(zhuǎn)到S405;
[0115]S410:客戶端關(guān)閉與服務端的連接。
[0116]請一并參閱圖8,圖8是本發(fā)明實施例提供的硬件設備的訪問管理方法的流程示意圖,其是從客戶端與服務端兩側(cè)交互進行描述的,其包括如下步驟:
[0117]S501:服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動。
[0118]S502:所述客戶端向所述服務端發(fā)起連接請求。
[0119]S503:所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程。
[0120]S504:所述客戶端協(xié)議數(shù)據(jù)包發(fā)送給所述服務端的服務線程。
[0121]其中,所述協(xié)議數(shù)據(jù)包由所述客戶端在接收到上層應用通過調(diào)用對應的驅(qū)動訪問自身的通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并將序列化處理生成的二進制數(shù)據(jù)流打包生成。
[0122]S505:所述服務端的服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端。
[0123]S506:所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化,將反序列化后的輸出參數(shù)寫入函數(shù)參數(shù)表后,通過驅(qū)動返回給對應的上層應用。
[0124]本發(fā)明實施例提供的硬件設備的訪問管理方法,在Linux系統(tǒng)環(huán)境下,建立能夠以root權(quán)限啟動的服務端,并實現(xiàn)對所連接的硬件設備進行連接和訪問管理,使得所述上層應用可在非root權(quán)限的情況下,通過所述服務端安全的與所述硬件設備建立連接。此外,由于所述服務端可為每個上層應用配置一個服務線程,使得多個上層應用能夠共享一個硬件設備。
[0125]以上所揭露的僅為本發(fā)明一種較佳實施例而已,當然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
[0126]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random AccessMemory,RAM)等。
【主權(quán)項】
1.一種硬件設備的訪問管理方法,其特征在于,包括如下步驟:服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān) 聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過 校驗后,創(chuàng)建服務于所述連接請求的服務線程;所述服務端的服務線程接收來自所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包 調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回 給所述客戶端,以使所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表, 并通過驅(qū)動返回給對應的上層應用。2.根據(jù)權(quán)利要求1所述的硬件設備的訪問管理方法,其特征在于,所述協(xié)議數(shù)據(jù)包由所述客戶端在接收到所述上層應用通過調(diào)用所述驅(qū)動訪問自身的 通信接口后,對根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并對序列化處理生成的二進制 數(shù)據(jù)流進行打包生成。3.根據(jù)權(quán)利要求1所述的硬件設備的訪問管理方法,其特征在于,在Linux系統(tǒng)環(huán)境下,所述服務端由Linux系統(tǒng)通過inetd守護進程以root權(quán)限啟動;在Android系統(tǒng)環(huán)境下,所述服務端以root權(quán)限在Android系統(tǒng)啟動的時自動啟動,其 中,通過在Android系統(tǒng)的NDK層建立一個基于TCP/IP通信的客戶端的應用庫,然后在 Android的底層建立基于TCP/IP的一個通信服務來生成所述服務端。4.根據(jù)權(quán)利要求1所述的硬件設備的訪問管理方法,其特征在于,所述服務端的監(jiān)聽線 程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng)建服務于所述 連接請求的服務線程,具體包括:監(jiān)聽來自客戶端的連接請求;判斷是否有合法的連接請求,若有,則獲取所述連接請求中的數(shù)據(jù)包頭的信息定位數(shù) 據(jù)包,讀取握手數(shù)據(jù)包;檢查所述握手數(shù)據(jù)包是否合法,若合法,則創(chuàng)建服務于所述連接請求的服務線程,并分 配連接使用權(quán)給所述客戶端;若不合法,則拒絕所述客戶端的連接請求。5.根據(jù)權(quán)利要求1所述的硬件設備的訪問管理方法,其特征在于,所述服務端的服務線 程接收來自所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包,根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所 述接口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,具體包括:接收所述客戶端發(fā)送的協(xié)議數(shù)據(jù)包;對接收的所述協(xié)議數(shù)據(jù)包進行解析,將解析得到的協(xié)議數(shù)據(jù)進行反序列化,并創(chuàng)建相 應的函數(shù)參數(shù)表;識別所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D,調(diào)用所述命令I(lǐng)D所對應的函數(shù)建立與所述接口的連 接,并對所述函數(shù)的輸出參數(shù)進行序列化處理;將序列化后的輸出參數(shù)發(fā)送給所述客戶端。6.—種硬件設備的訪問管理方法,其特征在于,包括如下步驟:服務端在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接,并創(chuàng)建監(jiān) 聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;所述客戶端向所述服務端發(fā)起連接請求;所述服務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過 校驗后,創(chuàng)建服務于所述連接請求的服務線程;所述客戶端將協(xié)議數(shù)據(jù)包發(fā)送給所述服務端的服務線程;所述服務端的服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接, 并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端;所述客戶端對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過驅(qū)動返 回給對應的上層應用。7.根據(jù)權(quán)利要求6所述的硬件設備的訪問管理方法,其特征在于,在所述客戶端將協(xié)議 數(shù)據(jù)包發(fā)送給所述服務端的服務線程之前,還包括:所述客戶端在接收到所述上層應用通過調(diào)用所述驅(qū)動訪問自身的通信接口后,對根據(jù) 訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并對序列化處理生成的二進制數(shù)據(jù)流進行打包生成 協(xié)議數(shù)據(jù)包。8.根據(jù)權(quán)利要求根據(jù)權(quán)利要求6所述的硬件設備的訪問管理方法,其特征在于,所述服 務端的監(jiān)聽線程在監(jiān)聽到來自所述客戶端的連接請求,且對所述連接請求經(jīng)過校驗后,創(chuàng) 建服務于所述連接請求的服務線程,具體包括:監(jiān)聽來自客戶端的連接請求;判斷是否有合法的連接請求,若有,則獲取所述連接請求中的數(shù)據(jù)包頭的信息定位數(shù) 據(jù)包,讀取握手數(shù)據(jù)包;檢查所述握手數(shù)據(jù)包是否合法,若合法,則創(chuàng)建服務于所述連接請求的服務線程,并分 配連接使用權(quán)給所述客戶端;若不合法,則拒絕所述客戶端的連接請求。9.根據(jù)權(quán)利要求根據(jù)權(quán)利要求6所述的硬件設備的訪問管理方法,其特征在于,所述服 務端的服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接口的連接,并將所述函 數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端,具體包括:解析所述協(xié)議數(shù)據(jù)包,將解析得到的協(xié)議數(shù)據(jù)進行反序列化,并創(chuàng)建相應的函數(shù)參數(shù) 表;識別所述協(xié)議數(shù)據(jù)中的命令I(lǐng)D,調(diào)用所述命令I(lǐng)D所對應的函數(shù)建立與所述接口的連 接,并對所述函數(shù)的輸出參數(shù)進行序列化處理;將序列化后的輸出參數(shù)發(fā)送給所述客戶端。10.—種硬件設備的訪問管理系統(tǒng),其特征在于,包括客戶端及服務端,其中:所述服務端,用于在檢測到硬件設備接入預定的接口時,建立與所述硬件設備的連接, 并創(chuàng)建監(jiān)聽線程,以監(jiān)聽來自客戶端的連接請求;其中,所述服務端以root權(quán)限啟動;所述客戶端,用于向所述服務端發(fā)起連接請求;所述服務端,用于在所述監(jiān)聽線程監(jiān)聽到來自所述客戶端的連接請求,且對所述連接 請求經(jīng)過校驗后,創(chuàng)建服務于所述連接請求的服務線程;所述客戶端,用于在接收到上層應用通過調(diào)用對應的驅(qū)動訪問自身的通信接口后,對 根據(jù)訪問產(chǎn)生的接口數(shù)據(jù)進行序列化處理,并將序列化處理生成的二進制數(shù)據(jù)流打包成協(xié) 議數(shù)據(jù)包發(fā)送給所述服務端的服務線程;所述服務端,用于在所述服務線程根據(jù)所述協(xié)議數(shù)據(jù)包調(diào)用相應的函數(shù)建立與所述接 口的連接,并將所述函數(shù)的輸出參數(shù)進行序列化處理后返回給所述客戶端;所述客戶端,用于對所述函數(shù)的輸出參數(shù)進行反序列化后寫入函數(shù)參數(shù)表后,并通過 驅(qū)動返回給對應的上層應用。
【文檔編號】H04L12/937GK106027487SQ201610280293
【公開日】2016年10月12日
【申請日】2016年4月28日
【發(fā)明人】梁建明, 熊飛, 陳明宇, 張雲(yún)瑞, 羅忠明
【申請人】廣州廣電運通金融電子股份有限公司, 廣州廣電運通信息科技有限公司