本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,特別是涉及驅(qū)動測試方法、裝置、存儲介質(zhì)及其計算機(jī)設(shè)備。
背景技術(shù):
linux系統(tǒng)操作系統(tǒng)具有自由開放、內(nèi)核功能強(qiáng)大、對硬件資源要求低且支持多平臺、開發(fā)人員多等特點,因此linux系統(tǒng)操作系統(tǒng)現(xiàn)在已經(jīng)在服務(wù)器、桌面、嵌入式等領(lǐng)域獲得了長足的發(fā)展,被業(yè)界認(rèn)為是未來最有前途的操作系統(tǒng)之一。
linux系統(tǒng)下,一般的控制器驅(qū)動測試方法,需要在linux系統(tǒng)應(yīng)用層根據(jù)內(nèi)核中的驅(qū)動架構(gòu)編寫相應(yīng)的應(yīng)用程序來測試驅(qū)動程序,但是,當(dāng)發(fā)現(xiàn)硬件驅(qū)動編寫有誤,特別是硬件控制器的值寫錯后,在修改完內(nèi)核驅(qū)動后,需要重新編譯linux系統(tǒng)內(nèi)核,再將linux系統(tǒng)內(nèi)核及應(yīng)用程序加載到嵌入式設(shè)備上,即使,采用動態(tài)加載內(nèi)核模塊的方式,還是得重新編譯并加載內(nèi)核驅(qū)動程序,這種soc(systemonchip,片上系統(tǒng))外設(shè)控制器的驅(qū)動測試方法效率低且復(fù)雜。
技術(shù)實現(xiàn)要素:
基于此,有必要針對一般soc外設(shè)控制器的驅(qū)動測試方法效率低的問題,提供一種高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試的方法、裝置、存儲介質(zhì)及其計算機(jī)設(shè)備。
一種驅(qū)動測試方法,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,包括步驟:
激活驅(qū)動設(shè)備節(jié)點;
在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間;
將緩沖空間映射到用戶空間,記錄為映射空間;
對映射空間賦soc外設(shè)控制器初始化值;
將映射空間中的值刷到soc外設(shè)控制器中;
啟動soc外設(shè)控制器,根據(jù)預(yù)設(shè)測試要求,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。
一種驅(qū)動測試裝置,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,包括:
啟動模塊,用于激活驅(qū)動設(shè)備節(jié)點;
空間申請模塊,用于在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間;
映射模塊,用于將緩沖空間映射到用戶空間,記錄為映射空間;
第一賦值模塊,用于對映射空間賦soc外設(shè)控制器初始化值;
第二賦值模塊,用于將映射空間中的值刷到soc外設(shè)控制器中;
驅(qū)動測試模塊,用于啟動soc外設(shè)控制器,根據(jù)預(yù)設(shè)測試要求,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。
本發(fā)明驅(qū)動測試方法與裝置,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,激活驅(qū)動設(shè)備節(jié)點,在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間,將緩沖空間映射到用戶空間,記錄為映射空間,賦值soc外設(shè)控制器初始化值,將已賦的數(shù)值刷到soc外設(shè)控制器中,啟動soc外設(shè)控制器,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。整個過程中,直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
另,本發(fā)明還提供一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,該程序被處理器執(zhí)行時實現(xiàn)如上述方法的步驟。其中,驅(qū)動測試方法直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
另,本發(fā)明還提供一種計算機(jī)設(shè)備,包括存儲器、處理器以及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,處理器執(zhí)行程序時實現(xiàn)如上述方法的步驟。其中,驅(qū)動測試方法直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
附圖說明
圖1為本發(fā)明驅(qū)動測試方法第一個實施例的流程示意圖;
圖2為本發(fā)明驅(qū)動測試方法第二個實施例的流程示意圖;
圖3為本發(fā)明驅(qū)動測試方法其中一個應(yīng)用實例的流程示意圖;
圖4為本發(fā)明驅(qū)動測試方法其中一個應(yīng)用實例的流程示意圖;
圖5為本發(fā)明驅(qū)動測試裝置第一個實施例的結(jié)構(gòu)示意圖;
圖6為本發(fā)明驅(qū)動測試裝置第二個實施例的結(jié)構(gòu)示意圖。
具體實施方式
如圖1所示,一種驅(qū)動測試方法,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,包括步驟:
s100:激活驅(qū)動設(shè)備節(jié)點。
linux系統(tǒng)將所有的設(shè)備都?xì)w類為字符設(shè)備、塊設(shè)備及網(wǎng)絡(luò)設(shè)備。普通的字符設(shè)備驅(qū)動算是linux系統(tǒng)內(nèi)核中最簡單的驅(qū)動,因此,非必要的,在這里可以選擇采用linux系統(tǒng)普通的字符設(shè)備驅(qū)動架構(gòu),即步驟s100具體可以為:激活linux系統(tǒng)中字符設(shè)備驅(qū)動程序,以激活字符設(shè)備。更進(jìn)一步的,還可以判斷驅(qū)動設(shè)備節(jié)點是否已經(jīng)成功激活,若已經(jīng)成功激活,則進(jìn)入步驟s200,若未成功激活,則終止本輪驅(qū)動測試。
s200:在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間。
linux系統(tǒng)內(nèi)核設(shè)置有一定大小的物理內(nèi)存空間,在這里,在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,將該申請的物理內(nèi)存空間記錄為緩沖(buffer)空間。非必要的,可以通過linux系統(tǒng)提供的ioctl函數(shù)(ioctl函數(shù)是設(shè)備驅(qū)動程序中對設(shè)備的i/o通道進(jìn)行管理的函數(shù))控制字符設(shè)備驅(qū)動申請確定大小的物理內(nèi)存空間——buffer。更進(jìn)一步,在步驟s200之后還可以判斷本次物理內(nèi)存空間是否申請成功,若申請成功,則進(jìn)入步驟s300,若申請失敗,則選擇重新申請,或,終止本輪驅(qū)動測試。
s300:將緩沖空間映射到用戶空間,記錄為映射空間。
將步驟s200申請的緩沖空間映射到用戶空間,為便于說明將這部分空間記錄為映射空間,需要理解的是,映射空間實質(zhì)任屬于用戶空間,其僅是為了便于行文描述所采用的一個名詞。下面將采用實例,詳細(xì)說明在linux系統(tǒng)中內(nèi)核空間與用戶空間的區(qū)別以及關(guān)系。linux系統(tǒng)驅(qū)動程序一般工作在內(nèi)核空間,但也可以工作在用戶空間。下面將詳細(xì)解析,什么是內(nèi)核空間,什么是用戶空間,以及如何判斷。linux系統(tǒng)簡化了分段機(jī)制,使得虛擬地址與線性地址總是一致,因此,linux系統(tǒng)的虛擬地址空間也為0~4g。linux系統(tǒng)內(nèi)核將這4g字節(jié)的空間分為兩部分。將最高的1g字節(jié)(從虛擬地址0xc0000000到0xffffffff),供內(nèi)核使用,稱為“內(nèi)核空間”。而將較低的3g字節(jié)(從虛擬地址0x00000000到0xbfffffff),供各個進(jìn)程使用,稱為“用戶空間)。因為每個進(jìn)程可以通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核,因此,linux系統(tǒng)內(nèi)核由系統(tǒng)內(nèi)的所有進(jìn)程共享。于是,從具體進(jìn)程的角度來看,每個進(jìn)程可以擁有4g字節(jié)的虛擬空間。linux系統(tǒng)使用兩級保護(hù)機(jī)制:0級供內(nèi)核使用,3級供用戶程序使用。每個進(jìn)程有各自的私有用戶空間(0~3g),這個空間對系統(tǒng)中的其他進(jìn)程是不可見的。最高的1gb字節(jié)虛擬內(nèi)核空間則為所有進(jìn)程以及內(nèi)核所共享。內(nèi)核空間中存放的是內(nèi)核代碼和數(shù)據(jù),而進(jìn)程的用戶空間中存放的是用戶程序的代碼和數(shù)據(jù)。不管是內(nèi)核空間還是用戶空間,它們都處于虛擬空間中。雖然內(nèi)核空間占據(jù)了每個虛擬空間中的最高1gb字節(jié),但映射到物理內(nèi)存卻總是從最低地址(0x00000000)開始。對內(nèi)核空間來說,其地址映射是很簡單的線性映射,0xc0000000就是物理地址與線性地址之間的位移量。非必要的,可以通過mmap系統(tǒng)調(diào)用映射內(nèi)核申請的緩沖空間到用戶空間。
s400:對映射空間賦soc外設(shè)控制器初始化值。
soc外設(shè)控制器初始化值是soc預(yù)先設(shè)定的數(shù)值,在步驟s300映射的緩沖空間中賦上該soc外設(shè)控制器初始化值。具體來說,在應(yīng)用層,按照soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系,給緩沖空間填寫相應(yīng)寄存器的初始化值。soc外設(shè)控制器必須被正確初始化后才能開始正常工作,soc外設(shè)控制器的初始化工作就是賦初始值。
s500:將映射空間中的值刷到soc外設(shè)控制器中。
再將映射空間中的值刷到soc外設(shè)控制器中。需要指出的是,初始的時候映射空間中的值為soc外設(shè)控制器初始化值,在后續(xù)驅(qū)動測試過程中,映射空間中的值是會改變的,因此,步驟s500應(yīng)當(dāng)理解為個伴隨驅(qū)動測試持續(xù)進(jìn)行的動作。非必要的,可以通過ioctl系統(tǒng)調(diào)用控制內(nèi)核驅(qū)動程序?qū)⒕彌_空間中的值刷到外設(shè)控制器中。
s600:啟動soc外設(shè)控制器,根據(jù)預(yù)設(shè)測試要求,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。
啟動soc外設(shè)控制器,循環(huán)動態(tài)修改改映射空間中的數(shù)據(jù),即最終修改soc外設(shè)控制器數(shù)據(jù),查看驅(qū)動測試結(jié)果。具體來說,可以通過ioctl系統(tǒng)調(diào)用控制內(nèi)核驅(qū)動程序啟動外設(shè)控制器,循環(huán)動態(tài)修改映射空間的中的值,查看驅(qū)動測試結(jié)果。
本發(fā)明驅(qū)動測試方法,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,激活驅(qū)動設(shè)備節(jié)點,在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間,將緩沖空間映射到用戶空間,記錄為映射空間,賦值soc外設(shè)控制器初始化值,將已賦的數(shù)值刷到soc外設(shè)控制器中,啟動soc外設(shè)控制器,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。整個過程中,直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
在其中一個實施例中,將映射空間中的值刷到soc外設(shè)控制器中的步驟包括:
在soc外設(shè)控制器的中斷服務(wù)程序中,或者通過linux系統(tǒng)內(nèi)核自帶的timer機(jī)制,將映射空間中的值刷到soc外設(shè)控制器中。
在本實施例中,可以采用兩種不同的方式將將映射空間中的值刷到soc外設(shè)控制器中,一種是,內(nèi)核驅(qū)動程序中,在soc的外設(shè)控制器的中斷服務(wù)程序中,將在應(yīng)用層動態(tài)修改過后的緩沖空間中值重新刷到soc外設(shè)控制器的寄存器中,從而達(dá)到動態(tài)控制外設(shè)控制器的目的;另一種是,內(nèi)核驅(qū)動程序中,利用linux系統(tǒng)內(nèi)核自帶的timer機(jī)制,將在應(yīng)用層動態(tài)修改過后的緩沖空間中值重新刷到soc外設(shè)控制器的寄存器中,從而達(dá)到動態(tài)控制外設(shè)控制器的目的。
如圖2所示,在其中一個實施例中,步驟s600之后還包括:
s700:當(dāng)接收到停止測試信號時,解除緩沖空間與用戶空間的映射關(guān)系。
在應(yīng)用層測試程序中,查看是否收到測試停止信號或其他中斷測試的信號如果收到相關(guān)的停止信號,則跳出測試循環(huán),并且調(diào)用munmap函數(shù)解除緩沖空間與用戶空間的映射關(guān)系,將驅(qū)動測試過程構(gòu)建的關(guān)系解除,以便數(shù)據(jù)還原,避免影響linux系統(tǒng)正常工作。
在其中一個實施例中,將緩沖空間映射到用戶空間,記錄為映射空間的步驟之前還包括:
構(gòu)建緩沖空間與soc外設(shè)控制器一一對應(yīng)關(guān)系;
將緩沖空間映射到用戶空間,記錄為映射空間的步驟包括:
通過linux系統(tǒng)中內(nèi)置mmap函數(shù)將緩沖空間映射到linux系統(tǒng)的用戶空間,并根據(jù)緩沖空間與soc外設(shè)控制器一一對應(yīng)關(guān)系,構(gòu)建soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系;
對映射空間賦soc外設(shè)控制器初始化值的步驟包括:
根據(jù)soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系,在用戶空間中填寫相應(yīng)soc外設(shè)控制器的初始化值。
將內(nèi)核申請的緩沖空間與soc的控制器一一對應(yīng)起來,這樣確保應(yīng)用層程序知道緩沖空間與soc控制器的各對應(yīng)關(guān)系。通過linux系統(tǒng)提供的mmap系統(tǒng)調(diào)用函數(shù)將內(nèi)核驅(qū)動申請的物理緩沖空間映射到linux系統(tǒng)用戶空間。在linux系統(tǒng)中,一般應(yīng)用層不能直接操作linux系統(tǒng)的內(nèi)核空間,因此,linux系統(tǒng)通過mmap函數(shù)提供了一種機(jī)制,讓用戶程序直接訪問設(shè)備內(nèi)存,這種機(jī)制,相比較在用戶空間和內(nèi)核空間互相拷貝數(shù)據(jù),效率更高。在應(yīng)用層,按照soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系,給緩沖空間填寫相應(yīng)寄存器的初始化值。
為更進(jìn)一步,詳細(xì)解釋本發(fā)明驅(qū)動測試方法的技術(shù)方案及其效果,下面將以兩個應(yīng)用實例,并結(jié)合圖3以及圖4進(jìn)行說明。
應(yīng)用實例一
如圖3所示,在其中一個應(yīng)用實例中,本發(fā)明驅(qū)動測試方法包括步驟:
s301:在應(yīng)用層測試程序中,首先通過open系統(tǒng)調(diào)用打開驅(qū)動設(shè)備節(jié)點。
s302:判斷字符設(shè)備是否成功打開。
s303:通過ioctl系統(tǒng)調(diào)用控制內(nèi)核驅(qū)動程序在內(nèi)核中申請?zhí)囟ù笮〉奈锢韮?nèi)存緩沖空間。
s304:判斷緩沖空間是否申請成功。
s305:通過mmap系統(tǒng)調(diào)用映射內(nèi)核申請的緩沖空間到用戶空間。
s306:判斷映射是否成功。
s307:給映射空間賦外設(shè)控制器的初始化值。
s308:通過ioctl系統(tǒng)調(diào)用控制內(nèi)核驅(qū)動程序?qū)uffer空間中的值刷到soc外設(shè)控制器中。
s309:通過ioctl系統(tǒng)調(diào)用控制內(nèi)核驅(qū)動程序啟動soc外設(shè)控制器。
s310:循環(huán)動態(tài)修改映射到用戶空間buffer中的值。
s311:查看測試效果。
s312:判斷是否接收到停止測試信號。
s313:調(diào)用munmap函數(shù)解除緩沖空間與用戶空間的映射關(guān)系。
s314:釋放內(nèi)核中物理內(nèi)存緩沖空間。
s315:關(guān)閉字符設(shè)備。
應(yīng)用實例二
如圖4所示,在其中一個應(yīng)用實例中,本發(fā)明驅(qū)動測試方法包括步驟:
s401:激活字符設(shè)備驅(qū)動程序,linux系統(tǒng)將所有的設(shè)備都?xì)w類為字符設(shè)備、塊設(shè)備及網(wǎng)絡(luò)設(shè)備,普通的字符設(shè)備驅(qū)動算是linux內(nèi)核中最簡單的驅(qū)動,所以采用linux普通的字符設(shè)備驅(qū)動架構(gòu)。
s402:判斷字符設(shè)備是否成功激活,如果未激活,終止本測試程序,如果字符設(shè)備成功激活,則繼續(xù)執(zhí)行本測試程序。
s403:通過linux系統(tǒng)提供的ioctl函數(shù)控制字符設(shè)備驅(qū)動申請確定大小的物理內(nèi)存空間——緩沖空間。
s404:判斷物理內(nèi)存空間——緩沖空間申請是否成功,如果申請內(nèi)存失敗,則重新申請或終止本測試程序,如果申請內(nèi)存成功,則繼續(xù)執(zhí)行本測試程序。
s405:將內(nèi)核申請的緩沖空間與soc的控制器一一對應(yīng)起來,這樣確保應(yīng)用層程序知道緩沖空間與soc控制器的各對應(yīng)關(guān)系。
s406:通過linux系統(tǒng)提供的mmap系統(tǒng)調(diào)用函數(shù)將內(nèi)核驅(qū)動申請的物理緩沖空間映射到linux用戶空間。在linux中,一般應(yīng)用層不能直接操作linux的內(nèi)核空間,因此,linux通過mmap函數(shù)提供了一種機(jī)制,讓用戶程序直接訪問設(shè)備內(nèi)存,這種機(jī)制,相比較在用戶空間和內(nèi)核空間互相拷貝數(shù)據(jù),效率更高。
s407:判斷mmap映射是否成功,如果不成功,則關(guān)閉字符設(shè)備程序并結(jié)束,如果成功則繼續(xù)執(zhí)行本測試程序。
s408:在應(yīng)用層,按照soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系,給緩沖空間填寫相應(yīng)寄存器的初始化值。soc外設(shè)控制器必須被正確初始化后才能開始正常工作。
s409:在應(yīng)用層的測試程序中通過ioctl系統(tǒng)調(diào)用,控制內(nèi)核驅(qū)動將申請的buffer中的數(shù)據(jù)刷到soc外設(shè)控制器的寄存器中,此時,soc的外設(shè)控制器初始化完成。
s410:在應(yīng)用層的測試程序中再通過ioctl系統(tǒng)調(diào)用,控制內(nèi)核驅(qū)動啟動soc外設(shè)控制器。
s411:在應(yīng)用層測試程序中,根據(jù)具體的測試要求,動態(tài)修改映射空間中的值。
s412:內(nèi)核驅(qū)動程序中,在soc外設(shè)控制器的中斷服務(wù)程序中或者利用linux內(nèi)核自帶的timer機(jī)制,將在應(yīng)用層動態(tài)修改過后的映射空間中的值重新刷到soc外設(shè)控制器的寄存器中,從而達(dá)到動態(tài)控制soc外設(shè)控制器的目的。
s413:查看相關(guān)的測試效果。
s414:在應(yīng)用層測試程序中,查看是否收到測試停止信號或其他中斷測試的信號,如果收到相關(guān)的停止信號,則跳出測試循環(huán),否則,跳轉(zhuǎn)到s411處循環(huán)繼續(xù)執(zhí)行。
s415:在應(yīng)用層測試程序中,當(dāng)收到相關(guān)停止信號并跳出測試循環(huán)后,調(diào)用munmap函數(shù)解除緩沖空間的映射關(guān)系。
s416:在應(yīng)用層測試程序中,通過ioctl系統(tǒng)調(diào)用控制器內(nèi)核驅(qū)動程序釋放申請的內(nèi)存空間。
s417:在應(yīng)用層測試程序中,關(guān)閉打開的字符設(shè)備節(jié)點。
s418:測試結(jié)束。
在上述實施例中,為更進(jìn)一步提高驅(qū)動測試的效率,還有以下內(nèi)容需要注意。
1)為了讓測試方案盡量簡單,內(nèi)核驅(qū)動只需要做成最簡單的普通字符驅(qū)動即可。
2)在驅(qū)動程序的init函數(shù)中注冊字符設(shè)備節(jié)點,方便應(yīng)用程序打開該設(shè)備節(jié)點來調(diào)用驅(qū)動中的相關(guān)操作。在驅(qū)動程序的init函數(shù)中還需要注冊外設(shè)控制器的中斷服務(wù)程序或注冊一個timer。
3)在驅(qū)動程序的init函數(shù)中還必須注冊文件操作函數(shù)集(fops)。
4)在文件操作函數(shù)集中,需要完成open、ioctl、mmap、munmap、release系統(tǒng)調(diào)用對應(yīng)的內(nèi)核驅(qū)動實現(xiàn)函數(shù)。
5)在ioctl系統(tǒng)調(diào)用的內(nèi)核驅(qū)動實現(xiàn)函數(shù)中處理應(yīng)用層用到的幾個不同的操作:申請物理內(nèi)存緩沖空間、釋放物理內(nèi)存緩沖空間、初始化外設(shè)控制器、啟動外設(shè)控制器。
6)在mmap系統(tǒng)調(diào)用的內(nèi)核驅(qū)動實現(xiàn)函數(shù)中映射申請的緩沖空間,在munmap系統(tǒng)調(diào)用的內(nèi)核驅(qū)動實現(xiàn)函數(shù)中解除映射。
7)在驅(qū)動中可在外設(shè)控制器的中斷服務(wù)程序中將申請的緩沖空間中的值刷到外設(shè)控制器中,也可利用linux內(nèi)核的timer機(jī)制定時循環(huán)將申請的緩沖空間中的值刷到外設(shè)控制器中。具體用哪種方法,需根據(jù)具體的外設(shè)控制器特點來選擇。
如圖5所示,一種驅(qū)動測試裝置,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,包括:
啟動模塊100,用于激活驅(qū)動設(shè)備節(jié)點;
空間申請模塊200,用于在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間;
映射模塊300,用于將緩沖空間映射到用戶空間,記錄為映射空間;
第一賦值模塊400,用于對映射空間賦soc外設(shè)控制器初始化值;
第二賦值模塊500,用于將映射空間中的值刷到soc外設(shè)控制器中;
驅(qū)動測試模塊600,用于啟動soc外設(shè)控制器,根據(jù)預(yù)設(shè)測試要求,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。
本發(fā)明驅(qū)動測試裝置,用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試,啟動模塊100激活驅(qū)動設(shè)備節(jié)點,空間申請模塊200在linux系統(tǒng)內(nèi)核中申請物理內(nèi)存空間,記錄為緩沖空間,映射模塊300將緩沖空間映射到用戶空間,記錄為映射空間,第一賦值模塊400賦值soc外設(shè)控制器初始化值,第二賦值模塊500將已賦的數(shù)值刷到soc外設(shè)控制器中,驅(qū)動測試模塊600啟動soc外設(shè)控制器,循環(huán)動態(tài)修改映射空間中的數(shù)據(jù),查看驅(qū)動測試結(jié)果。整個過程中,直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試
在其中一個實施例中,啟動模塊100用于激活linux系統(tǒng)中字符設(shè)備驅(qū)動程序,以激活字符設(shè)備。
在其中一個實施例中,第二賦值模塊500用于在soc外設(shè)控制器的中斷服務(wù)程序中,或者通過linux系統(tǒng)內(nèi)核自帶的timer機(jī)制,將映射空間中的值刷到soc外設(shè)控制器中。
如圖6所示,在其中一個實施例中,本發(fā)明驅(qū)動測試裝置還包括:
解除模塊700,用于當(dāng)接收到停止測試信號時,解除緩沖空間與用戶空間的映射關(guān)系。
在其中一個實施例中,本發(fā)明驅(qū)動測試裝置還包括:
對應(yīng)關(guān)系構(gòu)建模塊,用于構(gòu)建緩沖空間與soc外設(shè)控制器一一對應(yīng)關(guān)系;
映射模塊300具體用于通過linux系統(tǒng)中內(nèi)置mmap函數(shù)將緩沖空間映射到linux系統(tǒng)的用戶空間,并根據(jù)緩沖空間與soc外設(shè)控制器一一對應(yīng)關(guān)系,構(gòu)建soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系;
第一賦值模塊400具體用于根據(jù)soc外設(shè)控制器與映射空間的對應(yīng)關(guān)系,在用戶空間中填寫相應(yīng)soc外設(shè)控制器的初始化值。
另,本發(fā)明還提供一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,該程序被處理器執(zhí)行時實現(xiàn)如上述方法的步驟。其中,驅(qū)動測試方法直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
另,本發(fā)明還提供一種計算機(jī)設(shè)備,包括存儲器、處理器以及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,處理器執(zhí)行程序時實現(xiàn)如上述方法的步驟。其中,驅(qū)動測試方法直接通過內(nèi)存映射方式傳遞數(shù)據(jù),數(shù)據(jù)傳遞效率較高,特別是周期性的傳遞大量寄存器數(shù)據(jù)時,能夠高效的用于對linux系統(tǒng)應(yīng)用層操作soc外設(shè)控制器進(jìn)行驅(qū)動測試。
以上所述實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。