導航:首頁 > 器材知識 > 什麼是設備驅動模型

什麼是設備驅動模型

發布時間:2022-01-15 21:56:35

『壹』 匯流排設備驅動模型 match函數什麼時候被調用

match函數是excel中眾多函數之一,平時我們可能並不常用到,但是不常用不代表沒有用,或許你下次使用excel的時候就會用到它,為了以後用到它的時候不至於手忙腳亂,我們可以先簡單的來了解一下這個函數。

方法/步驟
我們打開excel,點擊「插入」菜單,找到函數選項,然後在類別中選擇全部,一直拉到M開頭的函數列表,找到match函數。有的朋友可能會說何必怎麼麻煩呢,直接在搜索函數中輸入match不就可以了,小編起初也是這么做的,但是好像達不到預期的效果,所以還是老老實實的使用這種笨方法了。
首先我們來看看match函數的定義,「返回符合特定值特定順序的項在數組中的相對位置」,這是excel給出的關於match函數的定義,如果只看這些文字的話恐怕很難理解,我們可以暫時不用深究它,知道即可,運用過這個函數之後再來細細品味它。
知道了它的定義之後我們來看一下它的參數,match函數一共有三個參數,首先我們來看第一個參數lookup_value,含義:需要在數據表(lookup_array)中查找的值。接著我們來看第二個參數lookup_array,含義:可能包含有所要查找數值的連續的單元格區域。第三個參數match_type,含義:排列順序,一共有三個值,1代表升序排列,0代表任意順序排列,-1代表降序排列。其中第一個和第二個必選參數,第三個為可選參數,默認為1。
光說不練假把式,下面小編就通過一個實例來應用一下這個函數。首先新建一個工作表,輸入測試的數據(新的數據表和數據比較方便大家的理解),小編建立的是一個六行五列的數據,而且每行或者每列數據之間都存在遞增的關系。
然後我們找一個空白的單元格,用來輸入我們今天的主角函數match函數。首先自然是等號了,然後就是match(),接著我們填寫參數,首先是第一個參數,也就是需要查找的值,選擇45,然後填寫第二個參數范圍,也就是連續的單元格(只能是一行或者一列),我們填寫A1:E1,這樣數據是遞增的,所以我們第三個參數填寫1,默認的就是1,不填也可以.
然後我們點擊回車,我們驚奇的發現,經過match函數運算過後這個單元格的數值變為了3,按照整個數據范圍遞增的順序,45的確是在第三位,可見函數計算的並沒有錯。那麼我們把它第三個參數改為-1會發生什麼狀況呢。
當我們改為-1再次點擊回車的時候居然出錯了,為什麼呢?其實我們讀讀三個數值的含義並不難理解,其中-1代表的是降序排列,而這個數據范圍之內並不存在遞減的關系,自然會出錯了,如果你無法確認是升序或者降序,我們可以選擇填寫0,這樣升序降序都不會出錯了。
關於match函數的用法小編就介紹到這里,講的比較簡單,並沒有深入的去探究match函數,想要深入的了解這個函數的用法,還需要朋友們親自動手試試,有一點要提示的是,當其中的數據是無規律的數據的時候,得到的結果或許不是你想要的,至於各種緣由有待自行發掘。

『貳』 Linux輸入子系統、平台設備、平台驅動、混雜設備,他們之間有什麼關系在什麼情況下,選用哪種模型

linux已經驅基本自配置編譯除非自另外再發驅網買發板都

『叄』 現在linux驅動很多實用設備驅動模型寫嗎

設備驅動名一般都在/dev目錄下。一般常用的設備的設備文件名如下:/dev/hd[a-t]:IDE設備/dev/sd[a-z]:SCSI設備 /dev/fd[0-7]:標准軟碟機 /dev/md[0-31]:軟raid設備/dev/loop[0-7]:本地回環設備/dev/ram[0-15]:內存/dev/null:無限數據接收設備,相當於黑洞/dev/zero:無限零資源/dev/tty[0-63]:虛擬終端/dev/ttyS[0-3]:串口/dev/lp[0-3]:並口/dev/console:控制台/dev/fb[0-31]:framebuffer

『肆』 求教怎麼學習linux內核驅動

1.首先要了解為什麼要學習內核?下圖已表明,如果要從事驅動開發或系統研究,就要學習內核。

2.內核的知識就像下面的繩結一樣,一環扣一環,我們要解開它們,就必須要先找到線頭也就是內核中的函數介面。初學階段,我們一般不深入的研究內核代碼,會使用內核的介面函數就不錯了。

3.下面提供了如何學習這些內核函數的方法,就像解繩子一樣

4.學習內核的四步法則,思維導圖的設計尤為重要,這也是能否學習好內核的關鍵

5.語言基礎也需要扎實,所以需要把C語言鞏固鞏固

『伍』 Linux輸入設備驅動

輸入設備(如按鍵、鍵盤、觸摸屏、滑鼠等)是典型的字元設備,其一般的工作機理是底層在按鍵、觸摸等動作發送時產生一個中斷(或驅動通過Timer定時查詢),然後CPU通過SPI、I-C或外部存儲器匯流排讀取鍵值、坐標等數據,並將它們放入一個緩沖區,字元設備驅動管理該緩沖區,而驅動的read ()介面讓用戶可以讀取鍵值、坐標等數據。顯然,在這些工作中,只是中斷、讀鍵值/坐標值是與設備相關的,而輸入事件的緩沖區管理以及字元設備驅動的file operations介面則對輸入設備是通用的。基於此,內核設計了輸入子系統,由核心層處理公共的工作。drivers/input/keyboardgpio_keys.c基於input架構實現了一個通用的GPIO按鍵驅動。該驅動是基於platform_driver架構的,名為「gpio-keys」。它將與硬體相關的信息(如使用的GPIO號,按下和抬起時的電平等)屏蔽在板文件platform_device的platform_data中,因此該驅動可應用於各個處理器,具有良好的跨平台性。GPIO按鍵驅動通過input_event () 、input_sync()這樣的函數來匯報按鍵事件以及同步事件。從底層的GPIO按鍵驅動可以看出,該驅動中沒有任何file_operations的動作,也沒有各種IO模型,注冊進入系統也用的是input_register_device ()這樣的與input相關的API。這是由於與Linux VFS介面的這一部分代碼全部都在drivers/input/evdev.c中實現了。

『陸』 什麼是windows驅動開發

這個,介紹只好復制來說了。我覺得你要是有興趣,隨便在那都能找到很多有趣的資料。看下面驅動的發展史:

Windows 驅動程序的發展演變
我們在學習開發驅動程序時有必要弄清楚Windows設備驅動程序的發展演變過程(為了簡便起見,以下簡稱驅動程序),以便明白我們將要開發什麼樣的驅動程序。這就象你開發一個應用程序時必須弄清楚它是運行在WINDOWS平台下還是在DOS平台下,否則我們能寫出什麼樣的應用程序就可想而知了。
驅動程序開發者的各項任務之中,有許多是為特定的硬體編寫驅動程序。由於WINDOWS的發展,這樣的工作在 Windows 9X 下要比在前一版Windows(windows3.x 、Windows Workgroup) 中容易得多。先了解一些歷史演變,可能會對驅動程序的編寫有所幫助。
實模式Windows(Real-Mode Windows)
從一開始,MS-DOS 和系統基本輸入輸出系統(BIOS) 就已經提供了許多硬體設備的驅動程序。BIOS 通過一些常用的軟體中斷,開放出驅動程序的服務 ,像INT 10h 是顯示系靳中斷,INT 13h是磁碟子系靳中斷,INT 16h 是鍵盤中斷等等。BIOS 也處理硬體中斷,並承擔對「可編程中斷控制器」(Programmable Interrupt Controller ,PIC )的管理任務。MS-DOS 也通過軟體中斷(如 INT 21h 、INT 25h 、INT 26h )提供了系統服務 ,並提供一個機制(CONFIG.SYS 中的 device= 語句),讓新的或強化後的驅動程序能?蛟諳到y啟動時被載入進操作系統內核。
標准模式Windows(Standard-Mode Windows)
早期的 Windows 中,MS-DOS 和 BIOS 是最重要的。Windows運行在實模式狀態中,這時的Windows充其量不過是一個強化後的MS-DOS圖形用戶界面而已。從系統角度看,Windows只不過是個大的圖形應用程序。Intel 80286 的出現,使 Windows能?蛟詒;つJ街性誦脅⒒竦酶嘰? 16MB 實際內存空間。依靠保護模式和實模式的轉換,Windows 仍然繼續使用MS-DOS 和 BIOS 提供的服務來完成所有的系統需求。這種運作模式被稱為 Windows標准模式(Windows standard mode) 。在 80286 機器上切換實模式和保護模式,系統開銷很大。Intel 於是提供了一個快又有效率的指令,讓你從實模式切換到保護模式。但Intel 認為沒有什麼人還需要再從保護模式切換回實模式。結果,唯一能?蛉帽;つJ匠絛潁ㄈ? Windows standard mode )存取實模式軟體(如 MS-DOS )的方法就是復位CPU(reset CPU) 。在人們開發出來的各種復位方法中,最普遍的一種就是觸發鍵盤控制器,提供由 Ctrl-Alt-Delete 鍵所發出的外部信號。於是引發所謂的三鍵失效(triple fault,即三鍵熱啟動),這是 CPU 先天無法處理的一種「失效「。事實上無論哪一種作法,代價都很昂貴,因為它們至少都得經過 BIOS 的引導程序 。事實上,在某些 286 機器,模式的切換要花掉好幾毫秒。顯然 Windows 需要一種方法,避免每次一有事件發生,像是鍵盤被按下或滑鼠移動等等,就得切換到實模式。解?Q方法就是寫一個保護模式驅動程序,可以在保護模式中處理 I/O 中斷。這些驅動程序直到今天我們都還在使用,你在 SYSTEM 子目錄中看到的擴展名為 .DRV 的文件都是!包括 MOUSE.DRV 、COMM.DRV 等等。我把它們稱為 ring3 DLL 驅動程序,因為它們實質上都是 16 位 Windows 動態鏈接庫(DLLs ),在 ring3層 (Intel CPU 最不受保護的層,一般應用程序運行在ring3層,核心態的驅動程序動行在ring0層)執行。它們的任務是在不離開 CPU保護模式的前提下,和 Windows KERNEL 、USER 、GDI 模塊之間形成介面。
增強模式Windows(Enhanced-Mode Windows )
Intel 80386 CPU 使 Windows的第三種操作模式(所謂的 enhanced mode)成為可能。在此模式中 Windows 採用分頁(paging) 和虛擬86(V86) 特性,創造出??擬機器(VirtualMachines ,VMs )。對一個應用程序而言,VM 就像一獨立的的個人電腦,獨自擁有自己的鍵盤、滑鼠、顯示器等等硬體。而實際上,經過所謂的??擬化(virtualization ),數個 VMs 共享相同硬體。對最終用戶而言,最大的好處是他現在能?蛟詿翱謐刺?中(而非全屏幕)運行MS-DOS程序 。"??擬化"是 VxDs 的工作。VxD 的名稱來自於 "virtual x device",意思是此驅動程序用來??擬化某個(x )設備。例如:VKD用來??擬化鍵盤,使Windows 和任何一個MS-DOS程序都自認為獨立擁有屬於自己的鍵盤。VMD 用來??擬化滑鼠。某些 VxDs 並不是為了??擬化某些硬體,而是為了提供各種底層系統服務。頁面交換(PAGESWAP) 和 頁面文件(PAGEFILE)就屬於這種非設備VxD ,它們共同管理交換文件(swap file ),使 增強模式Windows (enhanced-modeWindows) 得以將磁碟空間分配成為??擬內存的一部份。盡管基礎技術令人耳目一新,但增強模式Windows (enhanced-mode Windows )還是繼續在磁碟和文件 I/O 方面使用 MS-DOS 和 BIOS 。需要交換(swap )一個文件時,它還是把 CPU 切換到 V86 模式,讓 MS-DOS 和 BIOS 來處理 I/O 操作。在保護模式、真實模式、V86 模式之間的所有切換動作都使得 Windows 慢下來。更多
的延時則來自於MS-DOS 和 BIOS 不可重入這一問題(即不能兩個程序同時使用相同的服務)。Windows 必須強迫所有應用程序在同一個隊列等待實模式服務。
Windows95
Windows 95 將終結這一份對歷史的回憶。Windows 95 使用數種不同的驅動程序模型,大部份是使用 32 位 ring0層的虛擬設備驅動程序(VxDs) ,而非 rin3層的 DLLs 。所有的設備驅動程序都有一個具有管理功能的核心虛擬機VMM(虛擬機管理器)管理。
Windows對中斷的處理與MS-DOS大不一樣。當中斷發生時,處理器轉換為ring0級保護模式。Windows系統並不像MS-DOS那樣通過中斷描述符表IDT(Interrupt Descriptor Table)直接指向中斷處理過程,而是由IDT入口指向VMM中的程序。該程序將判斷是否為中斷調用,如果是,則把中斷控制權交給虛擬可編程中斷控制器VPICD(Virtual Programmable Interrupt Controller Device),VPICD實際上是一個重要的VxD。VPICD再將其交給另一個注冊了該中斷的VxD(如Audcard.vxd)來處理。VxD程序是通過調用VPICD服務VPICD_Virtualize_IRQ來注冊中斷的。
Windows 95 對於設備 (device) 的處理,一般的模型是:由一個 VxD 掌管所有中斷並執行所有數據傳輸,應用程序則使用函數調用 (function calls) 的方式對 VxDs 發出服務請求。這種VxD 為主的設備規劃模型的一個好例子就是:Windows 95 的串列通信(serial communications) 。從前 Windows的串列通訊是使用一個 ring3 驅動程序(COMM.DRV ),?群?硬體中斷處理程序以及驅動一個通用非同步收發蕊片(universal asynchronous receiver-transmitter (UART )蕊片)所需的全部邏輯功能代碼。在未讓此驅動程序知道的情?r下,兩個 VxDs (VCD 和COMBUFF )攔截了硬體中斷和軟體 IN/OUT 指令,為的是??擬化每一個 port ,並且改善因多任務而引起的問題。Windows 95 也有一個 ring3 組件名為 COMM.DRV ,但這個組件已經成為新的VxD (VCOMM )的一個簡單的外層程序,只用來提供 16 位程序和 VCOMM之間的介面。VCOMM 則處於底層,聯結一般應用程序、VxD clients 、 VxD 埠驅動程序和實際的硬體。埠驅動程序現在負責處理所有中斷,並執行真正與硬體起作用的 IN/OUT 指令。
Windows 95 文件系統是另一個好例子。過去,對文件系統服務的請求(requests ),源自於16 位保護模式程序所發出的 INT 21h 。有一個 VxD 用來處理這些 INT 21h ,並將它們切換到 V86 模式,以便讓MS-DOS 處理。MS-DOS 發出 INT 13h中斷 ,以請求使用 BIOS 的磁碟 I/O 功能;發出 INT 2Fh ,允許網路的 "redirector moles"(重新定向模塊)將此請求通過網路傳輸出去。Windows 95 提供給應用程序的,仍是向上兼容的介面,INT 21h 仍舊是導至文件系統的動作,但是底層基礎卻大不一樣。
在 Windows 95 之中,一個名為「可安硯文件系統「(Installable File System ,IFS )的管理器會處理所有 INT 21h ,甚至是來自於 V86 模式的。然後它把控制權交斤一個文件系統驅動程序(File System Driver ,FSD )。有一個 FSD 名為 VFAT ,是針對 MS-DOS
文件系統(所謂 File Allocation Table ,FAT )而設計;另一個 FSD 名為 CDFSD ,可以解析 CD-ROM 格式;此外還有其他 FSDs ,知道如何經由各種網路彼此通訊。針對本機(local 端)FSD (如VFAT )的磁碟操作,會經過被I/O管理器(Input/Output Supervisor ,IOS)監視管理的一堆VxDs處理。甚至 V86 模式的 INT 13h 中斷調用最終也是由 IOS 處理。換句??真,實模式和保護模式所發出的對文件系靳的請求(request ),不論是針對本地(local )或遠程(remote )磁碟,有可能完全(或幾乎完全)由 VxDs 來處理。Windows 95 這種以 VxD 為中心的驅動程序模型,好處之一是,系統程序員不一定要是 MS-DOS 和 BIOS 的專家,就可以寫驅動程序。那些准備提供系統擴展組件的程序員,也同享這個好處;原本你必須了解DOS保護模式介面(DPMI)以及 Windows 核心模塊的許多神秘特性或未公開特性,現在只需了解 Win32 的 DeviceIoControl API 函數,以及那些支持所謂 "alertable waits」(即時喚醒,大意是那些可以在VXD中調用的Windows 32位 API函數,但數量極其有限,)的 Win32 API 即可。這兩個介面可以讓你把 VxD 當做 32 位應用程序的擴展組件。盡管Windows系統驅動程序設計的任務主要是在系統底層上擴展 Windows 的功能,但Windows 95 還是保留了令人印象深刻的向上兼容能力(對上層程序,如dos程序來說,它們的調用介面沒變,但底層實際操作卻大不一樣了)。DPMI 還是存在(有些16 位程序還是需要它),你還是可以運行實模式的網路驅動程序或文件系統驅動程序--如果這是你的必要選擇。事實上,你往往可以把 Windows 3.1 的一整組硬體設備、網路驅動程序、16 位應用程序及其必要的 VxDs 整個搬到 Windows 95 ,不至於遭遇什麼大問題。

Windows98&2k&NT
1996年的Windows Hardware Engineering Conference(WinHEC)會議上,Microsoft宣布了一種新的Windows設備驅動程序模型――Win32 Driver Model(WDM)。這種新的設備驅動程序模型將成為Windows 2000(即Windows NT 5.0)的核心。
這個消息令從事Windows設備驅動程序(VxD)開發的程序員感到沮喪(雖然大家早已預料到Windows系列與Windows NT系列最終將走到一起)。WDM將vxd的開發人員帶到了一個新的起點上,什麼都是新的:新的模式,新的觀點。如果你曾看過DDK的匯編代碼的話,你一定可以體會這個消息對VxD開發者是個沉重的打擊,而對於Windows NT設備驅動程序(Kernel Mode Driver)的開發者來說,卻是另一番心情――因為WDM基本等於Kernel Mode Driver+Plug and Play。

VxD將讓位於WDM,現在令我們欣慰的是Microsoft宣布Windows 98(Windows 98支持VxD,推薦使用WDM方式驅動,但有些設備,如列印機等還不能用它,微軟預先設想的是Windows98和Windows 2k x86版在WDM驅動上可以二進制碼兼容,但實際上沒有完全實現)可能會堅持到200X年(天知道,估計也就是三兩年)。在這期間,掌握VxD技術的你還是可以主動要求老闆給你加薪的。即使到了WDM一統天下之時,也不用灰心,因為無論是VxD還是WDM,都要求開發人員對計算機硬體有著全面而細致的了解。通過VxD的鍛煉,你至少熟悉了計算機的硬體資源並對保護模式有了比較深刻的認識,這些東西都是將來從事WDM開發的硬功夫。

好了,該說說Windows NT了。在Windows NT中,80386保護模式的「保護」比Windows 95中更堅固,這個「鍍金的籠子」更加結實,更加難以打破。在Windows 95中,至少應用程序I/O操作是不受限制的,而在Windows NT中,我們的應用程序連這點許可權都被剝奪了。在NT中幾乎不太可能進入真正的ring0層。
在Windows NT中,存在三種Device Driver:

1.「Virtual device Driver」 (VDD)。通過VDD,16位應用程序,如DOS 和Win16應用程序可以訪問特定的I/O埠(注意,不是直接訪問,而是要通過VDD來實現訪問)。

2.「GDI Driver」,提供顯示和列印所需的GDI函數。

3.「Kernel Mode Driver」,實現對特定硬體的操作,比如說CreateFile, CloseHandle (對於文件對象而言), ReadFile, WriteFile, DeviceIoControl 等操作。「Kernel Mode Driver」還是Windows NT中唯一可以對硬體中斷和DMA進行操作的Driver。SCSI 小埠驅動和 網卡NDIS 驅動都是Kernel Mode Driver的一種特殊形式。

Windows NT的驅動程序模型與Windows 3.1、Windows 95是截然不同的。所以如你的程序使用的某些特有驅動程序是VXD驅動的話,在Windows nt和windows 2k中是不能運行的。你聽說過的CIH病毒就是運用的是VXD相似技術。所以不可能在nt和windows 2k中感染CIH病毒。
關於WDM驅動程序方面的相關知識,可以參看《WINDOWS WDM設備驅動程序開發指南》和《Programming the Microsoft Windows Driver Model》兩本書或參看微軟DDK文檔。在本專欄以後的文章中,我們將一起學習WDM驅動程序的開發技術(大勢所趨嘛)。

『柒』 linux系統中平台設備的描述,哪些是正確的

一、sysfs文件系統:
sysfs文件系統是Linux2.6內核引入的,它被看成是與proc、devfs和devpty等同類別的文件系統,sysfs文件系統也是一個虛擬文件系統,它可以產生一個包括所有系統硬體的層級視圖,與提供進程和狀態信息的proc文件系統十分類似;
sysfs文件系統把鏈接在系統上的所有設備和匯流排組織成一個分級的文件系統,它們可以由用戶空間存取,並向用戶空間導出內核數據結構以及它們的屬性等信息.sysfs的一個目的就是展示設備驅動模型中各個組件的層次關系,其頂級目錄包括:
1、block:包含系統中所有的塊設備;
2、devices:包含系統中所有的設備,並根據設備掛載的匯流排類型組織成層次關系結構;
3、bus:包含系統中所有的匯流排類型;
4、drivers:包含系統內核中所有已經注冊的設備驅動程序;
5、class:包含系統中所有的設備類型;如,網卡設備、音效卡設備、輸入設備、輸出設備,等等;
二、設備模型:
從整體上描述,大概模型就如下圖所示:

從圖中可以看出,Linux設備模型就是"匯流排、設備、驅動、類"這四個概念之前的相互關系;這也是Linux2.6內核抽象出來的用於管理系統中所有設備的模型圖;
簡單地描述設備模型的層次關系如下:
1、驅動核心中可以注冊多種類型的匯流排(bus_type);
2、每一種類型的匯流排下面可以掛載許多設備(kset,device);
3、每一種類型的匯流排可以使用很多設備驅動(kset,device_driver);
4、每一個驅動程序可以管理一組設備;
這種基本關系的建立源於實際系統中各種匯流排、設備、驅動、類結構的抽象;
Linux設備模型中的匯流排、設備、驅動和類之間環環相扣的復雜關系可以滿足內核日益發展的的需要;對智能電源管理、熱插拔以及即插即用的支持要求也越來越高;

『捌』 如何學習Linux設備驅動

通常,內核的升級對從事linux應用程序開發的人員來說影響較小,因為系統調用基本保持兼容,影響比較大的是驅動開發人員。每次內核的更新都可能導致許多內核函數原型上的變化,其中既有內核本身提供的函數,也有硬體平台代碼提供的函數,後者變化的更加頻繁。這一點從許多經典書籍就可驗證,當你按照手裡的經典著作,如:Alessandro的《linux設備驅動程序》,編寫驅動時,發現並不能夠成功的在你的linux平台上編譯通過、或不能正常執行,原因就在於你用的內核和書里的不一致。
本文從兩個方面去解釋這個問題,一方面是如何寫好linux設備驅動,另一方面是如何應對不斷升級的內核。
如何寫好Linux設備驅動
Linux設備驅動是linux內核的一部分,是用來屏蔽硬體細節,為上層提供標准介面的一種技術手段。為了能夠編寫出質量比較高的驅動程序,要求工程師必須具備以下幾個方面的知識:
● 熟悉處理器的性能
如:處理器的體系結構、匯編語言、工作模式、異常處理等。對於初學者來說,在還不熟悉驅動編寫方法的情況下,可以先不把重心放在這一項上,因為可能因為它的枯燥、抽象而影響到你對設備驅動的興趣。隨著你不斷地熟悉驅動的編寫,你會很自然的意識到此項的重要性。
● 掌握驅動目標的硬體工作原理及通訊協議
如:串口控制器、顯卡控制器、硬體編解碼、存儲卡控制器、I2C通訊、SPI通訊、USB通訊、SDIO通訊、I2S通訊、PCI通訊等。編寫設備驅動的前提就是需要了解設備的操作方法,所以這些內容的重要程度不言而喻。但不是說要把所有設備的操作方法都熟悉了以後才可以寫驅動,你只需要了解你要驅動的硬體就可以了。
● 掌握硬體的控制方法
如:中斷、輪詢、DMA 等,通常一個硬體控制器會有多種控制方法,你需要根據系統性能的需要合理的選擇操作方法。初學階段以實現功能為目的,掌握的順序應該是,輪詢->中斷->DMA。隨著學習的深入,需要綜合考慮系統的性能需求,採取合適的方法。
● 良好的GNU C語言編程基礎
如:C語言的指針、結構體、內存操作、鏈表、隊列、棧、C和匯編混合編程等。這些編程語法是編寫設備驅動的基礎,無論對於初學者還是有經驗者都非常重要。
● 良好的linux操作系統概念
如:多進程、多線程、進程調度、進程搶占、進程上下文、虛擬內存、原子操作、阻塞、睡眠、同步等概念及它們之間的關系。這些概念及方法在設備驅動里的使用是linux設備驅動區別單片機編程的最大特點,只有理解了它們才會編寫出高質量的驅動。
● 掌握linux內核中設備驅動的編寫介面
如:字元設備的cdev、塊設備的gendisk、網路設備的net_device,以及基於這些基本介面的framebuffer設備的fb_info、mtd設備的mtd_info、tty設備的tty_driver、usb設備的usb_driver、mmc設備的mmc_host等。
Linux內核為設備驅動編寫者提供了標準的介面,驅動編寫者無需精通內核的各個部分,只需要明確內核提供給我們的介面,並實現此介面就可以了。內核提供的介面採用的是面向對象的思路,即把目標設備抽象成一個對象,通常利用一個結構體來描述這個對象。驅動工程師的任務就是實現這個對象。這個結構體中會包含設備的屬性(用變數表示)和操作方法(用函數指針表示)。如:字元設備的cdev
struct cdev {
struct kobject kobj;
struct mole *owner;
const struct file_operations *ops; // 操作方法結合,其它項都是屬性
struct list_head list;
dev_t dev;
unsigned int count;
};
開始階段可以以模仿為主,即套用一些固定的模板、參考常式。
如何應對不斷升級的內核
內核升級對驅動的影響主要體現在,(1)驅動介面定義的變化;(2)內核的一些功能函數的名稱、參數、頭文件、宏定義的變化;(3)平台代碼關於硬體操作方面封裝的一些函數的變化;(4)設備模型的影響。
● 驅動介面定義的變化
如:2.4內核中字元設備驅動的注冊介面是:
int register_chrdev(unsigned int major, const char * name, struct file_operations *fops)
而2.6內核中已經不建議使用這種方法了,改為:
int cdev_add(struct cdev *p, dev_t dev, unsigned count)
這種介面定義及注冊方法帶來的變化,發生的並不頻繁。解決方案是:參考內核中的代碼。這種介面定義及注冊方法在內核中非常容易找到,如:字元設備驅動的注冊方法及介面定義可以參照內核driver/char/目錄下的很多實例。
● 內核的一些功能函數的名稱、參數、頭文件、宏定義的變化
如:中斷注冊函數的格式及參數在2.4內核、2.6內核低版本和高版本之間都存在差別,在2.6.8中,中斷注冊函數的定義為:
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),unsigned long irq_flags, const char * devname, void *dev_id)
irq_flags的取值主要為下面的某一種或組合: SA_INTERRUPT、SA_SAMPLE_RANDOM、SA_SHIRQ
在2.6.26中,中斷注冊函數的定義為:
int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)
typedef irqreturn_t (*irq_handler_t)(int, void *); irq_flags的取值主要為下面的某一種或組合:(功能和2.6.8的對應)IRQF_DISABLED、IRQF_SAMPLE_RANDOM、IRQF_SHARED
當出現這些問題時,編譯過程中,編譯器會給我們比較明確的錯誤提示,根據這些提示你可以判斷出是否是缺少頭文件問題、是否是函數參數定義有誤等。解決問題的最好辦法還是到你的目標內核中找信息。此時找問題的方法可以藉助於搜索,如:你可以在新的內核中搜索request_irq,看新內核中的驅動是如何使用它的,這種方法非常有效。
● 平台代碼關於硬體操作方面封裝的一些函數的變化
內核中,硬體平台相關的代碼在內核更新過程中變化比較頻繁,和我們的設備驅動也是息息相關,所以在針對一個新內核編寫設備驅動前,一定要熟悉你的平台代碼的結構。有時平台雖然提供了內核要求的介面函數,但使用起來功能卻並不完善。下面還是先舉個例子說明平台代碼更新對設備驅動的影響。
如:在linux-2.6.8內核中,調用set_irq_type(IRQ_EINT0,IRQT_FALLING);去設置S3C2410的IRQ_EINT0的中斷觸發信號類型,你會發現不會有什麼效果。跟蹤代碼發現內核的set_irq_type函數需要平台提供一個針對硬體平台的實現函數
static struct irqchip s3c_irqext_chip = {
.mask = s3c_irqext_mask,
.unmask = s3c_irqext_unmask,
.ack = s3c_irqext_ack,
.type = s3c_irqext_type
};
s3c_irqext_type就是linux內核需要的實現函數,而s3c_irqext_type在2.6.8中的實現為: static int s3c_irqext_type(unsigned int irq, unsigned int type)
{
irqdbf("s3c_irqext_type: called for irq %d, type %d\n", irq, type);
return 0;
}
原來並沒有實現。而在較高版本的內核,如2.6.26內核中,這個函數是實現了的。所以你一定要小心。當平台函數不好用時,一定要查查原因,或者直接操作硬體寄存器來達到目的。
● 2.6內核設備模型對驅動的影響
在2.6內核中寫設備驅動和在2.4內核中有著很大的不同,主要就是在設備驅動中融入了比設備驅動本身結構還復雜、還難以理解的設備模型。初學驅動時你可以不理會設備模型,但你會發現內核里的驅動代碼基本上都是融入了設備模型的了。所以很多時候你不得不面對現實,還是要弄懂它,並且它也的注冊方法也會隨著內核的升級而發生變化。解決此類問題的最好方法還是參考目標內核驅動代碼。

『玖』 嵌入式ARM Linux設備驅動如何學習 有沒有做驅動的願意說說學習心得 學習方法 和學習資料推薦下

主要是堅持,因為涉及的方面很廣泛,所以要掌握很多看起來毫不相乾的東西,但是他們都有聯系,需要至少扎實投入10年,才算是基本掌握了。

閱讀全文

與什麼是設備驅動模型相關的資料

熱點內容
steam令牌換設備了怎麼辦 瀏覽:246
新生測聽力儀器怎麼看結果 瀏覽:224
化學試驗排水集氣法的實驗裝置 瀏覽:156
家用水泵軸承位置漏水怎麼回事 瀏覽:131
羊水鏡設備多少錢一台 瀏覽:125
機械制圖里型鋼如何表示 瀏覽:19
測定空氣中氧氣含量實驗裝置如圖所示 瀏覽:718
超聲波換能器等級怎麼分 瀏覽:800
3萬軸承是什麼意思 瀏覽:110
鑫旺五金製品廠 瀏覽:861
蘇州四通閥製冷配件一般加多少 瀏覽:153
江北全套健身器材哪裡有 瀏覽:106
水表閥門不開怎麼辦 瀏覽:109
花冠儀表盤怎麼顯示時速 瀏覽:106
洗砂機多少錢一台18沃力機械 瀏覽:489
超聲波碎石用什麼材料 瀏覽:607
組裝實驗室製取二氧化碳的簡易裝置的方法 瀏覽:165
怎麼知道天然氣充不了閥門關閉 瀏覽:902
公司賣舊設備掛什麼科目 瀏覽:544
尚葉五金機電 瀏覽:59