歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux2.6驅動程序《一》 整體概述

Linux2.6驅動程序《一》 整體概述

日期:2017/2/28 16:13:56   编辑:Linux教程

計算機的硬件是底層基礎,是所有軟件得以運行的平台,代碼最終會落實為硬件上的組合邏輯與時序邏輯,軟件則實現了具體應用

硬件較固定,軟件則很靈活,但是軟硬件之間存在著悖論,那就是軟件和硬件不應該相互滲透到對方的領地

為了盡可能快速地完成設計,應用軟件工程師不必關心硬件,硬件工程師不需顧及軟件,例如應用工程師在調用套接字發送和接收

數據包的時候,不必關心網卡上的中斷、寄存器、存儲空間、I/O、片選等,這就是驅動工程師的任務

設備驅動通俗來說就是驅使硬件設備行動。

設備驅動與底層硬件直接打交道,按照硬件設備的具體工作方式讀寫設備寄存器,完成設備的輪詢、中斷處理和DMA通信,進行物理內存向虛擬內存的映射,最紅使通信設備能夠收發數據,使顯示設備能夠顯示文字和畫面,使存儲設備能夠記錄文件和數據

在無操作系統的情況下,工程師可以根據硬件設備特點自行定義接口,如對串口定義SerialSend()、SerialRecv()、對LED定LightOn(),LightOff(),對Flash定義FlashWrite()、FlashRead()等,而在右操作系統的情況下,設備驅動的架構則由相應的操作系統定義

當系統有操作系統的時候

<1>無操作系統時設備驅動的硬件操作工作仍然必不可少

<2>將設備驅動融入內核,為了實現這種融合,必須在所有的設備驅動中涉及面向操作系統內核的接口,這樣的接口由操作系統規定,對一類設備而言結構一致,獨立於具體的設備

<3>設備驅動變成了連接硬件和內核的橋梁,對外呈現為操作系統的API

有了操作系統,設備驅動變得更復雜,但是一個復雜的軟件系統需要處理多個並發的任務,另外,操作系統提供了內存管理機制,可以讓每個進程都獨立地訪問4GB的內存空間,簡單來說,操作系統就是給設備驅動制作麻煩來達到給上層應用提供便利的目的

Linux將存儲器和外設分為3個部分:字符設備、塊設備和網絡設備

字符設備:以串行順序依次進行訪問的設備,如觸摸屏、鼠標等

塊設備:可以用任意順序進行訪問,以塊為單位進行操作,如硬盤,但和字符設備沒有明顯的界限,例如Flash設備符合塊設備特點,但我們仍然可以把它當做一個字符設備來訪問

字符設備和塊設備的驅動設計有很大差異,但對用戶而言,他們都使用文件系統的操作接口open()、close()、read()等函數進行訪問

網絡設備面向數據包的接收和發送而設計,與字符設備、塊設備通信方式不同

除網絡設備外,字符設備與塊設備都被映射到Linux文件系統的文件和目錄,通過文件系統的系統調用接口open()等函數即可訪問字符設備和塊設備,塊設備比字符設備復雜,要先建立一個磁盤/Flash文件系統,如FAT、JFFS2等,這些文件系統規范了文件和目錄在存儲介質上的組織

應用程序可以使用Linux的系統內高調用接口編程,也可以使用C庫函數,考慮到移植性,後者更好些,C庫函數本身也通過系統調用接口而實現,例如C庫中的fopen()會調用操作系統中的oepn()

學習Linux設備驅動要先掌握如下的基礎:

1、良好的硬件基礎,懂得SRAM、Flash、SDRAM、磁盤的讀寫方式,UART,IIC、USB等設備的接口,輪詢、中斷、DMA原理,PCI總線工作方式及CPU內存管理單元(MMU)等

2、C語言基礎,靈活應用C語言的結構體、指針、函數指針及內存動態申請和釋放

3、一定的Linux內核基礎,至少了解設備驅動和內核的接口,尤其對塊設備、網絡設備、Flash設備、串口設備等復雜設備

4、有良好的多任務並發控制和同步的基礎,在設備驅動中大量使用自旋鎖、互斥、信號量和等待隊列等並發與同步機制

Copyright © Linux教程網 All Rights Reserved