Linux設備驅動開發基礎---新驅動程序添加到內核方法(1)

1、編寫Linux設備驅動的技術基礎

編寫Linux 設備驅動要求工程師具有良好的硬件基礎,懂得 SRAM、Flash、SDRAM、磁盤的讀寫方式,UART、I2C、USB等設備的接口,輪詢、中斷、DMA的原理,PCI總線的工作方式以及CPU的內存管理單元(MMU)等。  

編寫Linux 設備驅動要求工程師具有良好的 C語言基礎, 能靈活地運用 C語言的結構體、指針、函數指針及內存動態申請和釋放等。 
編寫 Linux 設備驅動要求工程師具有一定的 Linux 內核基礎,雖然並不要求工程師對內核各個部分有深入的研究,但至少要瞭解設備驅動與內核的接口,尤其是對於塊設備、網絡設備、Flash設備、串口設備等複雜設備。 
編寫Linux 設備驅動要求工程師具有良好的多任務併發控制和同步的基礎,因爲在設備驅動中會大量使用自旋鎖、互斥、信號量、等待隊列等併發與同步機制。 

還需要掌握調試過程中常用儀器、儀表的使用方法,萬用表、示波器和邏輯分析儀等。 

2、Linux內核的組成

Linux內核主要由進程調度(SCHED) 、內存管理(MM) 、虛擬文件系統(VFS) 、網絡接口(NET)和進程間通信(IPC)等 5 個子系統組成。 

進程調度:精度調度控制系統中的多個進程對 CPU 的訪問使得多個進程能在 CPU 中微觀串行,宏觀並行地執行。

內存管理的主要作用是控制多個進程安全地共享主內存區域。

Linux 虛擬文件系統(VFS)隱藏各種了硬件的具體細節,爲所有的設備提供了統一的接口。

網絡接口提供了對各種網絡的標準的存取和各種網絡硬件的支持。網絡接口可分爲網絡協議和網絡驅動程序。

Linux 支持進程間的多種通信機制,包含信號量、共享內存、管道等,這些機制可協助多個進程、多資源的互斥訪問、進程間的同步和消息傳遞。 

3、應用程序。庫、內核、驅動程序的關係

從上到下,一個軟件系統可分爲:應用程序、庫、操作系統、驅動程序。開發人員可以專注於自己熟悉的部分,對於相鄰層,只需要瞭解它的接口,無需專注它的實現細節。

4、設備和模塊的分類

Linux系統將設備分成三種基本的類型:字符設備、塊設備和網絡接口。

5、Linux驅動程序開發步驟

編寫一個Linux設備驅動程序的大致流程如下:

(1)查看原理圖、數據手冊,瞭解設備的操作方法。

(2)在內核中找到相近的驅動程序,以它爲模板進行開發,有時候需要從零開始。

(3)實現驅動程序的初始化。

(4)設計所要實現的操作。

(5)實現終端服務(並不是每個設備驅動所必須的)。

(6)編譯該驅動程序並測試。

6、Linux 2.6內核的配置系統由以下3個部分組成。 
 Makefile:分佈在  Linux  內核源代碼中的  Makefile,定義  Linux  內核的編
譯規則。 
配置文件(Kconfig) :給用戶提供配置選擇的功能。 
配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供字符界面和圖形界面) 。

7、Linux內核模塊簡介

Linux 內核的整體結構非常龐大,其包含的組件也非常多。我們怎樣把需要的部分都包含在內核中呢? 

一種方法是把所有需要的功能都編譯到 Linux 內核。這會導致兩個問題,一是生成的內核會很大,二是如果我們要在現有的內核中新增或刪除功能,將不得不重新編譯內核。  

Linux還提供了這樣的一種機制,這種機制被稱爲模塊(Module) ,可以實現以上效果。模塊具有以下特點: 
模塊本身不被編譯入內核映像,從而控制了內核的大小。 
模塊一旦被加載,它就和內核中的其他部分完全一樣。 

在2.6內核中,模塊的擴展名爲.ko (以hello.ko爲例),通過“insmod  ./hello.ko”命令可以加載它,通過“rmmod  hello”命令可以卸載它。通過lsmod命令查看內核中已經加載了那些模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章