《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Linux無線驅動程序的開發測試
Linux無線驅動程序的開發測試
來源:微型機與應用2013年第18期
馬洪亮
(國家安全生產監督管理總局信息研究院, 北京 100029)
摘要: 針對Linux驅動程序開發缺少快速高效測試手段的問題,提出了精確硬件仿真、實時驅動狀態控制和高效數據注入技術,并應用到了無線驅動程序開發實踐中。結果證明,該技術能夠快速、有效地查找出驅動缺陷,提高驅動程序的可靠性,達到了豐富驅動開發測試手段、加快驅動開發進度的效果。
Abstract:
Key words :

摘 要: 針對Linux驅動程序開發缺少快速高效測試手段的問題,提出了精確硬件仿真、實時驅動狀態控制和高效數據注入技術,并應用到了無線驅動程序開發實踐中。結果證明,該技術能夠快速、有效地查找出驅動缺陷,提高驅動程序的可靠性,達到了豐富驅動開發測試手段、加快驅動開發進度的效果。
關鍵詞: Linux; WiFi; 驅動程序; 測試

    近年來,隨著WiFi技術的快速發展和普及,WiFi芯片及相關驅動的設計開發已成為短距離無線通信領域的研究熱點。根據研究,在系統運行過程中驅動模塊的缺陷出現頻度是其他內核模塊的3~7倍[1],因此需要采用富有成效的開發測試方案和手段來提高驅動程序的穩定可靠性。本文針對Linux平臺下的WiFi無線驅動程序的開發測試技術展開論述,對無線協議及驅動開發測試技術進行簡單概述,介紹驅動開發存在的開發測試手段匱乏問題,提出了硬件仿真、狀態控制和數據注入技術。
1 無線協議概述
    WiFi技術經過十幾年的快速發展,所支持的無線傳輸速率已從最初的1 Mb/s提升到1 Gb/s以上。WiFi技術主要涉及到網絡協議簇的最低兩層:物理層和媒體接入層,其典型的實現方案如圖1所示。在圖1中,物理層采用純硬件的實現形式,而媒體接入層則采用軟硬件聯合的實現方式:對于時延特性要求高的功能,采用協議硬件加速器來實現;對于網絡管理等對時延要求不高的其他功能,采用驅動程序來實現[2-3]。驅動在執行過程中需根據網絡當前狀態對硬件進行實時配置,其可靠性和穩定性直接決定了整個WiFi芯片及網絡的可用性。
    在驅動程序的開發中需要結合快速、有效的開發測試技術,但Linux系統在驅動開發方法和工具方面取得的進展有限,目前主要采用printk信息打印、kgdb源碼調試及kdump崩潰存儲技術[4]。由于需要開發人員精通內核底層數據結構,技術門檻較高,導致只有printk打印方式得到了廣泛的應用。對于非法內存訪問、無效內存管理及軟硬件響應不匹配等常見的無線驅動缺陷類型,當缺陷發生時會導致內核和系統的崩潰,而采用printk等技術很難查找出這些缺陷[1, 5]。而對于用戶空間驅動程序、高層建模開發語言等新興的驅動開發方案來說[1,5],由于尚未提供完整的驅動開發解決方案,且執行效率較低,不適合實時吞吐量大的網絡驅動程序的開發。

    因此需要在現有驅動開發測試手段的基礎上,提出新的高效的開發測試技術,以能夠快速全面查找和定位驅動缺陷,提高驅動程序的可靠性和穩定性。
2 開發測試方案
    無線驅動程序需要實現Linux系統對無線網絡的管理接口,必須與硬件實時交互。因此,無線驅動程序的開發涉及到軟硬件聯合開發測試,其面臨的主要問題包括:
    (1)硬件不可用。由于硬件開發周期長,驅動必須能夠在硬件尚不可用的情形下獨立開展開發和測試。
    (2)聯合測試問題多且不易定位。在軟硬件聯合測試時,必須能夠快速定位出問題的位置是位于驅動還是位于硬件部分。
    (3)驅動測試手段匱乏,開發效率低。這是驅動程序開發所面臨的一個共同問題,必須提出一個行之有效的驅動開發測試方案來加快驅動的開發進程。
    針對上述問題,在實際的無線驅動開發過程中,本文提出了以下幾種開發測試技術:
    (1)精確硬件仿真。為了解決硬件尚不可用的問題,編寫了可精確模擬硬件的接口及行為的內核仿真模塊,提供了對硬件接口、硬件協議加速器和基帶的精確模擬。具體來說,模擬的功能包括硬件中斷的產生和處理、數據的發送和接收、硬件發送隊列的管理,以及對硬件寄存器和存儲區的模擬等。除了模擬硬件正常工作時的場景,還可以模擬硬件在實際工作中可能會產生的各種錯誤,進而測試軟件驅動模塊在硬件發生異常時的行為及穩定性,而這是在采用實際的硬件進行測試時很難做到的。通過采用精確硬件仿真技術,使得無線驅動程序代碼在與實際的硬件聯合測試時只需要進行少量修改,甚至不需要修改也能夠正常運行。
    (2)實時驅動狀態控制。無線協議本質上是一個FSM有限狀態機,相應的驅動程序也被設計為一個基于事件-消息驅動的系統:根據最新發生的事件或接收到的消息確定下一步的行為和狀態。如果能夠對驅動程序的狀態進行控制,能夠將驅動設置為任意的狀態,就可以遍歷驅動程序的狀態進行測試。為了實現驅動狀態控制功能,在保持驅動程序具有良好的層次結構和清晰的狀態轉移過程的同時,增加了驅動狀態控制模塊,能夠按需控制和設置驅動的當前狀態及所需數據。在具體實現時,該控制功能由位于用戶空間的控制程序和位于內核空間的控制模塊組成,采用netlink接口作為兩者之間的通信接口,運行自定義的接口通信協議。在測試時,控制模塊根據所接收到的控制程序的設置命令,將驅動程序配置為指定的運行狀態,并全面收集驅動程序的最新事件和消息,并及時反饋給控制程序,從而實現了所需的實時驅動狀態控制功能。
    (3)高效用戶態數據的注入和輸出。在對無線驅動進行測試時,除了需要實時控制驅動程序的狀態,還需要向驅動注入大量的測試數據。常規的方法是通過ioctl接口傳輸配置命令,通過用戶空間的測試程序發送和接收待測數據包。該方法存在的問題:一是數據傳輸效率低,二是開發人員可控的因素較少,很難構造出復雜多變及特殊的測試數據。為了解決上述問題,本文提出了一種高效的用戶態數據的注入和輸出解決方案。在該方案中,由位于用戶空間的測試程序產生符合各種測試需求的測試數據,通過netlink接口直接注入到位于內核空間的無線驅動程序中;由位于內核空間的測試代理模塊及時收集驅動的測試結果及相關數據,并通過netlink接口直接輸出到用戶空間的測試程序。采用本方案,可以構造出任意格式的測試數據,覆蓋各種測試功能,可以編寫功能強大的用戶空間分析測試程序對測試數據和結果進行分析,快速發現和定位驅動缺陷。
    為了實現上述開發方案,需要在既有的無線驅動模塊的基礎上增加如圖2所示的其他內核模塊和用戶程序。在圖2中,既有的驅動程序模塊實現了無線協議的功能;新增的位于用戶空間的控制程序實時控制和監視驅動狀態、生成各種測試數據并分析驅動的處理結果;新增的內核控制模塊是控制程序的內核代理,負責根據控制程序的命令設置驅動的狀態、將測試數據注入到驅動中,并收集驅動的狀態和數據上傳給控制程序進行分析處理;新增的硬件仿真模塊提供對硬件的精確模擬功能。通過在既有的驅動模塊基礎上增加上述軟件模塊,可以在硬件尚不具備的情況下獨立開展無線驅動程序的開發測試工作。

3 測試結果
    在進行驅動開發時,為了避免由驅動缺陷導致的系統崩潰時調試信息丟失的問題,采用了如圖3所示的雙機遠程開發測試方案。在圖3中,將被測機器(運行無線驅動程序的機器)通過有線網絡連接到遠程控制機器,與圖2采用的單機開發測試方案相比,將位于用戶空間的控制程序遷移到遠程控制機器,而用遠程控制程序代理守護進程來代替控制程序,該代理負責轉發遠程控制程序發送的設置命令和測試數據到內核控制模塊,收集內核控制模塊發送的狀態信息和測試結果再轉發給遠程的控制程序。采用這種開發配置方案,由于遠程控制機器與被測機器相互獨立,當驅動程序在運行過程中由于缺陷導致被測機器崩潰時,則可以在被測機器重新啟動的同時,在遠程控制機器上分析驅動程序輸出的運行期信息和調試日志,確定系統崩潰時驅動程序的狀態及相關的數據,查找出缺陷并及時更正,然后通過svn下載到被測機器運行測試,從而可以節約驅動調試時間,加快驅動缺陷修復的進度。

    采用本文介紹的驅動程序開發技術和方案,經過4個多月的開發測試,成功開發出了一款滿足課題需求的無線驅動程序,其中和硬件聯合測試的時間僅用了一個月左右,80%以上的驅動缺陷都已經在軟硬件聯合測試之前就被找到和得以解決。在無線驅動的開發過程中,統計出來的驅動缺陷的類別及該缺陷所占的比例總結如表1所示。

 

 

    在驅動開發過程中發現,由于涉及模塊較多、軟件和硬件單獨開發等原因,出現了較多的軟件模塊間及軟硬件間定義不一致的問題,這類問題以及較為普遍的空指針問題,容易導致地址非法訪問而系統崩潰。這些問題均通過本文所提出的數據注入和驅動狀態遠程輸出技術得以發現和解決,并通過實時驅動狀態控制技術發現和解決了程序邏輯錯誤類型的缺陷。硬件本身所具有的缺陷占到了1/4以上,通過對硬件進行精確全面的仿真,驅動程序代碼基本上不需要做過多的改動,即可在真正的硬件上通過測試,并在輔助硬件開發人員定性和定位硬件缺陷方面發揮了較大的作用。
    在Linux驅動程序開發過程中,由于高效的開發測試手段的匱乏,使得驅動程序的開發變得緩慢和困難。本文提出了硬件仿真、狀態控制和數據注入等技術,可以有效地輔助完成驅動的開發測試工作,快速高效地查找出驅動缺陷,加快驅動開發的進度,在驅動程序開發測試方面具有良好的借鑒意義。
參考文獻
[1] 秦瑩,戴華東,顏躍進.單一內核操作系統設備驅動程序缺陷研究[J]. 計算機科學,2011,38(4):182-184.
[2] 潘志鵬,吳斌,楊坤,等.基于AHB總線的靈活可配置WLAN芯片架構設計[J]. 電子技術應用,2012,38(7):62-65.
[3] 何柳,程鵬,陳勇,等. 802.11網卡Windows驅動的設計與實現[J].微型機與應用,2013,32(4):3-5.
[4] VENKATESWARAN S.精通Linux設備驅動程序開發[M].宋寶華,譯. 北京:人民郵電出版社,2010.
[5] 劉軍衛, 李曦, 陳香蘭,等. 用戶態驅動框架的研究與實現[J].計算機系統應用,2011,20(11):67-71.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩亚洲三区| 一本色道久久综合亚洲精品小说 | 亚洲免费影视| 亚洲精品日产精品乱码不卡| 亚洲国产精品女人久久久| 狠狠色狠狠色综合日日91app| 国产欧美在线观看| 国产乱人伦精品一区二区 | 久久国产精品99国产| 亚洲一区二区三区高清| 久久露脸国产精品| 国产日韩欧美综合在线| 欧美日韩在线三区| 欧美一区二区三区免费观看| 99精品视频免费全部在线| 欧美中文在线观看| 亚洲一区二区精品在线| 在线亚洲精品| 一区二区三区欧美视频| 一本色道久久综合亚洲精品婷婷 | 欧美一区二区三区的| 午夜精品网站| 久久国产一二区| 久久天堂精品| 欧美成人自拍| 欧美一区二区三区视频在线 | 亚洲欧美色一区| 午夜国产精品影院在线观看| 亚洲综合色自拍一区| 午夜精品一区二区三区在线| 先锋影音久久| 亚洲综合视频网| 午夜免费在线观看精品视频| 欧美一区二区三区婷婷月色| 久久国产精品色婷婷| 亚洲二区视频在线| 亚洲欧美日韩精品在线| 欧美在线观看视频在线| 最新日韩av| 在线中文字幕一区| 亚洲欧美在线播放| 久久精品中文字幕一区| 久久精品91| 美女视频黄 久久| 欧美电影在线观看完整版| 欧美日韩精品在线视频| 国产精品日韩高清| 亚洲级视频在线观看免费1级| 亚洲伦理在线免费看| 在线视频一区观看| 欧美一区二区三区久久精品| 狼狼综合久久久久综合网 | 亚洲图片欧美一区| 欧美综合国产精品久久丁香| 欧美一区二区大片| 欧美一进一出视频| 日韩亚洲欧美中文三级| 亚洲午夜久久久久久久久电影网| 亚洲欧美综合v| 久久男女视频| 欧美黄色aaaa| 国产精品夜夜夜一区二区三区尤| 国产精品人人爽人人做我的可爱| 国产一区 二区 三区一级| 亚洲日本理论电影| 亚洲欧美伊人| 日韩午夜精品| 一本大道久久a久久精品综合| 欧美在线不卡视频| 欧美日韩国产a| 国内综合精品午夜久久资源| 日韩午夜在线视频| 亚洲电影免费观看高清完整版在线观看 | 在线视频一区观看| 亚洲福利视频网站| 午夜精品久久| 欧美日韩1区| 极品少妇一区二区三区精品视频| 中文亚洲免费| 亚洲精品你懂的| 久久精品一区| 欧美日韩国产经典色站一区二区三区| 国产亚洲一区二区在线观看| 99re6热在线精品视频播放速度| 亚洲欧美日韩综合aⅴ视频| 一区二区三区四区五区精品视频| 久久裸体艺术| 国产精品视频一| 亚洲精品视频二区| 亚洲国产午夜| 欧美在线播放| 欧美日韩一区二区国产| 在线激情影院一区| 性8sex亚洲区入口| 亚洲欧美韩国| 欧美日韩亚洲成人| 国内偷自视频区视频综合| 一区二区三区日韩精品视频| 亚洲精品久久久久久久久久久久久| 久久精品成人一区二区三区蜜臀| 欧美天堂在线观看| 亚洲裸体视频| 亚洲乱码精品一二三四区日韩在线 | 亚洲欧洲偷拍精品| 91久久极品少妇xxxxⅹ软件| 久久精品视频在线看| 国产精品一区三区| 日韩天天综合| 一本到12不卡视频在线dvd| 欧美黄色网络| 激情小说另类小说亚洲欧美| 先锋影音网一区二区| 这里只有精品在线播放| 欧美欧美在线| 亚洲精品国产精品久久清纯直播| 亚洲国产精品久久91精品| 久久久久www| 国产在线精品自拍| 性欧美长视频| 久久九九免费视频| 国产精品扒开腿爽爽爽视频| aa国产精品| 亚洲手机视频| 欧美视频中文字幕| 亚洲色图综合久久| 亚洲欧美日韩精品一区二区| 国产精品久久久久久av下载红粉| 亚洲另类视频| 亚洲性色视频| 欧美日韩精品高清| 一本一本久久a久久精品综合妖精| 亚洲一区二区黄| 国产精品久久九九| 亚洲在线不卡| 午夜精品区一区二区三| 国产视频在线观看一区二区| 欧美在线亚洲| 能在线观看的日韩av| 在线国产日韩| 日韩亚洲欧美一区| 国产精品xxxxx| 午夜视频一区二区| 久久精品一区二区国产| 在线观看亚洲a| 99天天综合性| 国产精品乱人伦一区二区| 亚洲欧美日韩另类精品一区二区三区| 欧美一区久久| 伊人久久亚洲热| 99视频热这里只有精品免费| 国产精品海角社区在线观看| 午夜精品久久久99热福利| 久久精品日产第一区二区| 激情成人综合| 一本久久a久久免费精品不卡| 欧美日韩国产区一| 亚洲一本视频| 久久久水蜜桃av免费网站| 亚洲国产合集| 亚洲一区二区不卡免费| 国产亚洲欧洲一区高清在线观看| 国产精品99久久99久久久二8| 久久成人亚洲| 亚洲国产成人精品久久| 在线性视频日韩欧美| 国产精品婷婷| 亚洲激情中文1区| 欧美日韩中文字幕在线| 午夜伦理片一区| 欧美激情bt| 午夜久久tv| 欧美日韩无遮挡| 久久国产精品亚洲77777| 欧美日本精品在线| 午夜亚洲福利在线老司机| 欧美成人综合网站| 亚洲自拍都市欧美小说| 欧美v日韩v国产v| 亚洲女性裸体视频| 嫩草国产精品入口| 亚洲综合色在线| 欧美日本三区| 亚洲电影免费观看高清完整版| 欧美日韩一级黄| 亚洲高清色综合| 国产精品久久久久91| 91久久精品久久国产性色也91| 国产精品高潮粉嫩av| 亚洲国产三级网| 国产欧美一区二区三区另类精品| 日韩一区二区福利| 国产综合久久久久久| 亚洲五月婷婷| 亚洲第一综合天堂另类专| 欧美亚洲日本国产| 99国产精品私拍| 欧美成人日韩| 久久精品国产v日韩v亚洲| 欧美色大人视频| 亚洲欧洲日韩女同|