基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法及裝置制造方法
【專利摘要】本發(fā)明涉及計(jì)算機(jī)安全防范【技術(shù)領(lǐng)域】,公開了一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,包括步驟:S1:在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息;S2:將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中;S3:出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述配置信息和所述輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。還提供了一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置。本發(fā)明支持對(duì)錯(cuò)誤進(jìn)行重放,方便進(jìn)行錯(cuò)誤定位和修正,支持設(shè)備驅(qū)動(dòng)的離線調(diào)試,提高了驅(qū)動(dòng)開發(fā)和移植效率,同時(shí)降低程序員的工作量,提高驅(qū)動(dòng)的可靠性。
【專利說明】基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)安全防范【技術(shù)領(lǐng)域】,具體涉及一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法及裝置。
【背景技術(shù)】
[0002]在通用操作系統(tǒng)中,驅(qū)動(dòng)代碼占據(jù)系統(tǒng)大量代碼,常常由于設(shè)備手冊(cè)描述不細(xì)致等各種原因使得驅(qū)動(dòng)中含有大量錯(cuò)誤,多份報(bào)告中指出,Linux中,驅(qū)動(dòng)代碼占據(jù)系統(tǒng)代碼的70%,其中驅(qū)動(dòng)部分的錯(cuò)誤是其它部分的5-7倍。即使,在商業(yè)化的Windows XP系統(tǒng)中,85%的崩潰也是由于驅(qū)動(dòng)錯(cuò)誤引起。
[0003]而在驅(qū)動(dòng)開發(fā)中,常常由于缺少設(shè)備和調(diào)試手段,開發(fā)的驅(qū)動(dòng)測(cè)試較少,使得在使用時(shí)常常隱藏大量錯(cuò)誤。另外,開發(fā)大型驅(qū)動(dòng)時(shí),常常存在模塊分工協(xié)作,若依賴于硬件的測(cè)試則會(huì)大大影響驅(qū)動(dòng)的開發(fā)效率,出現(xiàn)錯(cuò)誤的查錯(cuò)效率較低,出現(xiàn)問題時(shí)無法準(zhǔn)確判斷錯(cuò)誤出現(xiàn)的位置。驅(qū)動(dòng)移植同樣是一件較為復(fù)雜的工作,在不同的系統(tǒng)上,由于系統(tǒng)調(diào)用等實(shí)現(xiàn)功能可能存在細(xì)微區(qū)別,因此移植后可能出現(xiàn)系統(tǒng)相關(guān)的錯(cuò)誤,如DMA起始地址不能對(duì)齊等。
[0004]總之,現(xiàn)有的調(diào)試方法無法有效地對(duì)驅(qū)動(dòng)程序進(jìn)行調(diào)試,找出錯(cuò)誤位置。
【發(fā)明內(nèi)容】
[0005](一)要解決的技術(shù)問題
[0006]本發(fā)明要解決的技術(shù)問題是:如何實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序的有效調(diào)試,準(zhǔn)確找出錯(cuò)誤位置。
[0007](二)技術(shù)方案
[0008]為解決上述技術(shù)問題,本發(fā)明提供了一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,包括步驟:
[0009]S1:在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息;
[0010]S2:將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中;
[0011]S3:出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述輸出的配置信息和所述設(shè)備輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
[0012]其中,所述步驟S2之后和S3之前還包括:在所述日志文件中注入指定的錯(cuò)誤。
[0013]其中,所述步驟S2具體包括:將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息,并存儲(chǔ)在所述日志文件中。
[0014]其中,所述的輸出至設(shè)備的配置信息包括:設(shè)備寄存器配置信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息。
[0015]其中,所述錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。
[0016]本發(fā)明還提供了一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,包括:[0017]跟蹤記錄模塊,用于在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息;
[0018]日志存儲(chǔ)模塊,用于將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中;
[0019]重現(xiàn)調(diào)試模塊,用于出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述配置信息和所述輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
[0020]其中,還包括錯(cuò)誤注入模塊:用于在所述日志文件中注入指定的錯(cuò)誤。
[0021]其中,所述日志存儲(chǔ)模塊具體用于將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息,并存儲(chǔ)在所述日志文件中。
[0022]其中,所述的輸出至設(shè)備的配置信息包括:設(shè)備寄存器配置信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息。
[0023]其中,所述錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。
[0024](三)有益效果
[0025]本發(fā)明基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,通過記錄日志,在發(fā)生錯(cuò)誤時(shí)利用日志信息對(duì)錯(cuò)誤進(jìn)行重放,同時(shí)對(duì)驅(qū)動(dòng)進(jìn)行調(diào)試,方便進(jìn)行錯(cuò)誤定位和修正,支持設(shè)備的離線調(diào)試,提高了驅(qū)動(dòng)開發(fā)和移植效率,同時(shí)降低程序員的工作量,提高驅(qū)動(dòng)的可靠性。
【專利附圖】
【附圖說明】
[0026]圖1是本發(fā)明實(shí)施例的一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法流程圖;
[0027]圖2是本發(fā)明實(shí)施例的一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置結(jié)構(gòu)示意圖;
[0028]圖3是圖2中的裝置與設(shè)備和驅(qū)動(dòng)之間的關(guān)系圖。
【具體實(shí)施方式】
[0029]下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0030]本實(shí)施例的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法如圖1所示,包括:
[0031]步驟S110,在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息。配置信息包括:設(shè)備寄存器配置信息(配置到設(shè)備的寄存器中的信息),輸入信息包括:設(shè)備寄存器返回的狀態(tài)信息。由于與驅(qū)動(dòng)交互的設(shè)備不同,配置信息也不同,具體配置信息視具體設(shè)備而定。
[0032]步驟S120,將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中。
[0033]步驟S130,出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述配置信息和所述輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
[0034]進(jìn)一步地,為了檢測(cè)驅(qū)動(dòng)的容錯(cuò)性,還包括對(duì)訂制錯(cuò)誤進(jìn)行測(cè)試,因此在步驟S120之后和S130之如還包括:在所述日志文件中注入指定的錯(cuò)誤。
[0035]進(jìn)一步地,為了支持跨系統(tǒng)移植和調(diào)試,便于在一個(gè)新的平臺(tái)上開發(fā)和測(cè)試新的驅(qū)動(dòng),因此步驟S120中將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息(即該標(biāo)準(zhǔn)日志信息能夠被任何現(xiàn)有的操作系統(tǒng)識(shí)別和讀取),并存儲(chǔ)在所述日志文件中。
[0036]其中,錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。對(duì)于偶發(fā)性錯(cuò)誤可以通過記錄的日志信息進(jìn)行重放,重現(xiàn)出現(xiàn)的偶發(fā)性錯(cuò)誤。對(duì)于設(shè)備無法正常工作的錯(cuò)誤,該種情況常常由于驅(qū)動(dòng)的配置不正確引起,此時(shí)將驅(qū)動(dòng)和記錄的正確日志信息進(jìn)行回放對(duì)t匕,即可找到不正確的交互信息。對(duì)于缺少對(duì)應(yīng)的設(shè)備的錯(cuò)誤,進(jìn)行聯(lián)合調(diào)試,此時(shí)利用日志重現(xiàn)驅(qū)動(dòng)和設(shè)備的交互過程,從而實(shí)現(xiàn)設(shè)備的離線調(diào)試。
[0037]本發(fā)明基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,通過記錄日志,在方式錯(cuò)誤時(shí)利用日志信息對(duì)錯(cuò)誤進(jìn)行重放,同時(shí)對(duì)驅(qū)動(dòng)進(jìn)行調(diào)試,方便進(jìn)行錯(cuò)誤定位和修正,支持設(shè)備的離線調(diào)試,提高了驅(qū)動(dòng)開發(fā)和移植效率,同時(shí)降低程序員的工作量,提高驅(qū)動(dòng)的可靠性。
[0038]本發(fā)明還提供了一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其結(jié)構(gòu)示意圖如圖2所示包括:跟蹤記錄模塊210、日志存儲(chǔ)模塊220和重現(xiàn)調(diào)試模塊230。
[0039]跟蹤記錄模塊210用于在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息;
[0040]日志存儲(chǔ)模塊220用于將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中;
[0041]重現(xiàn)調(diào)試模塊230用于出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述配置信息和所述輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
[0042]進(jìn)一步地,還包括錯(cuò)誤注入模塊240用于在所述日志文件中注入指定的錯(cuò)誤。
[0043]其中,所述日志存儲(chǔ)模塊具體用于將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息,并存儲(chǔ)在所述日志文件中。
[0044]其中,所述錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。
[0045]上述基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置與設(shè)備和驅(qū)動(dòng)的關(guān)系圖如圖3所示。下面以USB鍵盤為輸入設(shè)備為例進(jìn)行說明:
[0046]在驅(qū)動(dòng)正常工作時(shí),跟蹤記錄模塊記錄驅(qū)動(dòng)輸出給鍵盤的配置信息,鍵盤返回的輸入信息。鍵盤初始化時(shí),記錄驅(qū)動(dòng)輸出給鍵盤的配置信息,當(dāng)鍵盤初始化成功后,需要記錄USB總線提供給鍵盤正常工作時(shí)的輸入信息以及驅(qū)動(dòng)輸出給鍵盤的配置信息,配置信息包括,驅(qū)動(dòng)申請(qǐng)的掃描碼存儲(chǔ)緩沖區(qū)基址(該信息將配制到設(shè)備寄存器中)。出現(xiàn)鍵盤中斷時(shí),記錄鍵盤返回的掃描碼及發(fā)生的時(shí)刻、掃描碼。
[0047]將配置信息、鍵盤返回的輸入信息通過“日志模塊”轉(zhuǎn)換為日志記錄,方便移植到其它平臺(tái)和機(jī)器。鍵盤掃描碼按照《時(shí)間、命令、注釋、接口、參數(shù)、返回值》的自定義格式寫入到日志文件中。
[0048]當(dāng)缺少的鍵盤設(shè)備時(shí),“重現(xiàn)模塊”使用從日志記錄文件中信息提取相應(yīng)的驅(qū)動(dòng)配置信息和設(shè)備的輸入信息,并通過定時(shí)器輔助模擬器按下時(shí)返回鍵盤掃描碼給鍵盤驅(qū)動(dòng)。
[0049]錯(cuò)誤注入模塊通過在日志中注入異常日志,通過“重新模塊”將異常信息傳遞給驅(qū)動(dòng),檢查驅(qū)動(dòng)的容錯(cuò)性。如調(diào)整與USB總線的交互結(jié)果,是得鍵盤驅(qū)動(dòng)在實(shí)現(xiàn)input_registeLdevice功能時(shí)出現(xiàn)錯(cuò)誤,檢查驅(qū)動(dòng)是否檢測(cè)并處理了該錯(cuò)誤。
[0050]在上述實(shí)施例中,所述輸出信息主要指驅(qū)動(dòng)輸出到鍵盤的配置信息,而輸入信息主要包括鍵盤返回給驅(qū)動(dòng)的掃描碼數(shù)據(jù)和寄存器狀態(tài)等信息。結(jié)合上述描述,針對(duì)更為復(fù)雜的輸入輸出設(shè)備,同樣可以實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)的模擬調(diào)試和測(cè)試。
[0051]以上實(shí)施方式僅用于說明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)【技術(shù)領(lǐng)域】的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
【權(quán)利要求】
1.一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,其特征在于,包括步驟: S1:在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息; 52:將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中; 53:出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述輸出的配置信息和所述設(shè)備輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
2.根據(jù)權(quán)利要求1所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,其特征在于,所述步驟S2之后和S3之前還包括:在所述日志文件中注入指定的錯(cuò)誤。
3.根據(jù)權(quán)利要求1所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,其特征在于,所述步驟S2具體包括:將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息,并存儲(chǔ)在所述日志文件中。
4.根據(jù)權(quán)利要求1所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,其特征在于,所述的輸出至設(shè)備的配置信息包括:設(shè)備寄存器配置信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息。
5.根據(jù)權(quán)利要求1?4中任一項(xiàng)所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試方法,其特征在于,所述錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。
6.一種基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其特征在于,包括: 跟蹤記錄模塊,用于在驅(qū)動(dòng)正常工作時(shí),記錄驅(qū)動(dòng)輸出至設(shè)備的配置信息及設(shè)備返回的輸入信息; 日志存儲(chǔ)模塊,用于將所述配置信息及設(shè)備返回的輸入信息存儲(chǔ)在日志文件中; 重現(xiàn)調(diào)試模塊,用于出現(xiàn)錯(cuò)誤需要調(diào)試時(shí),從所述日志文件中提取所述配置信息和所述輸入信息,替代設(shè)備與驅(qū)動(dòng)交互,對(duì)錯(cuò)誤進(jìn)行重放,以輔助進(jìn)行驅(qū)動(dòng)調(diào)試。
7.根據(jù)權(quán)利要求6所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其特征在于,還包括錯(cuò)誤注入模塊:用于在所述日志文件中注入指定的錯(cuò)誤。
8.根據(jù)權(quán)利要求6所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其特征在于,所述日志存儲(chǔ)模塊具體用于將所述配置信息及設(shè)備返回的輸入信息轉(zhuǎn)換成與操作系統(tǒng)無關(guān)的標(biāo)準(zhǔn)日志信息,并存儲(chǔ)在所述日志文件中。
9.根據(jù)權(quán)利要求6所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其特征在于,所述的輸出至設(shè)備的配置信息包括:設(shè)備寄存器配置信息,所述輸入信息包含設(shè)備寄存器返回的狀態(tài)信息。
10.根據(jù)權(quán)利要求6?9中任一項(xiàng)所述的基于輸入輸出模擬的交互式設(shè)備驅(qū)動(dòng)調(diào)試裝置,其特征在于,所述錯(cuò)誤包括:偶發(fā)性錯(cuò)誤、缺少設(shè)備或設(shè)備無法正常工作。
【文檔編號(hào)】G06F11/36GK103617116SQ201310565938
【公開日】2014年3月5日 申請(qǐng)日期:2013年11月13日 優(yōu)先權(quán)日:2013年11月13日
【發(fā)明者】胡事民, 劉虎球, 白家駒, 馬超 申請(qǐng)人:清華大學(xué)