Linux裝置驅動程式的概念 作用以及模組

2021-08-07 01:40:31 字數 1840 閱讀 5602

我們首先對linux系統整個框架要有個了解。linux簡化了分段機制,使得虛擬位址與線性位址總是一致,因此,linux的虛擬位址空間也為0~4g。 linux核心將這4g位元組的空間分為兩部分,分別是使用者空間(0~3g)和核心空間(3g~4g)。

其中,使用者空間存放的是應用程式,而核心空間存放的是核心,裝置驅動和硬體。

為什麼需要存在裝置驅動呢?我們知道,核心是作業系統基本的部分,而作業系統是不能夠直接控制硬體的,這樣我們就需要裝置驅動作為作業系統和硬體裝置間的粘合劑,相當於乙個中間人吧,負責上下兩邊的溝通。驅動負責將作業系統的請求傳輸,轉化為特定物理裝置控制器能夠理解的命令。

這樣我們就知道,驅動需要完成兩大功能:

1、為linux核心提供呼叫介面。

2、控制硬體。因為暫存器是控制硬體的操作,所以驅動程式控制硬體,也就是要通過讀寫硬體暫存器達到控制硬體的目的。

核心是為應用程式服務的,其本質其實是函式的集合,核心要實現的功能我們可以分為兩部門:基本功能和擴充套件功能。其中,基本功能包括程序管理,執行緒管理等等,而擴充套件功能,可以根據使用者的需求自行新增。

下面我們就來**一下怎樣向核心新增一項功能呢?

1、我們首先想到,肯定需要寫乙個功能函式,假如我們命名為fun.c,那麼函式寫好後,必須要和linux原始碼一起編譯,生成zimage核心映象檔案。

2、重新編譯核心。

這樣就得到了新的核心,這種新增的方式我們稱為靜態新增。大家發現,每次修改一次fun.c,都要重新編譯一次核心,灰常的麻煩,所以引進了核心模組機制,只需要載入或解除安裝模組,就可以動態的增加或者刪除核心的功能,不用每次都重新編譯,是不是很方便?

那麼接下來我們會想到,這個模組怎麼就能和核心連線在一起呢?其實很簡單,fun.c檔案除了要實現功能呢,還需要包含和核心的介面,核心也提供了模組的介面,只要這兩個介面一致,模組就可以融入核心,成為核心的一部分。

linux驅動程式都是以模組的形式存在的,所以我們稱之為驅動模組。

所以我們總結出新增模組的步驟是:

1、寫功能函式fun.c。

怎麼樣編寫模組的原始碼檔案,我們以乙個hello模組例項分析。

#include

#include 模組的標頭檔案,在對應核心下的include目錄中

static void __ exit hellomodule_exit(void) //模組退出函式

module_init(hellomodule_init); //④用module_init和module_exit

module_exit(hellomodule_exit); 指定模組初始化函式和退出函式

module_license(「gplgpl」

2、編譯hello.c,生成核心模組檔案hello.ko。

模組編譯是通過核心頂層目錄下的makefile(如linux-2.6.30.9/makefile)檔案來實現的。以下是乙個例子:

obj-m=hello.o

kdir=/home/linux-2.6.30.9

all:

make –c $(kdir) subdirs=$(shell pwd)modules //make module規則就類似於make zimage

kdir:核心目錄

subudirs:模組**所在的目錄

然後make一下,就生成了模組檔案hello.ko。

3、將核心模組檔案動態的裝載到核心。

載入模組命令:insmod

例:root# insmod ./hello.ko

顯示當前載入的模組命令:ismod

例:root# ismod

… 這樣,我們就完成了整個新增模組的過程,過程還是比較容易理解的。今天就寫到這裡,下次我再把具體做的點亮led燈的乙個最簡單的字元驅動程式總結一下。

如何編寫Linux裝置驅動程式

序言linux是unix作業系統的一種變種,在linux下編寫驅動程式的原理和思想完全類似於其他的unix系統,但它dos或window環境下的驅動程式有很大的區別。在linux環境下設計驅動程式,思想簡潔,操作方便,功能也很強大,但是支援函式少,只能依賴kernel中的函式,有些常用的操作要自己來...

Linux作業系統網路驅動程式編寫詳解

一.降阻模組使用方法 接地系統 壞在很大程度上決定於施工質量的優劣,因為掌握正確的施工方法和工藝質量要求是很必要的。接地工程施工通常應遵循以下基本原則 1 在有效長度範圍內,盡可能選擇在土壤電阻率小的地方埋設接地模組。2 接地模組的埋設地點應遠離熱源和盡量避開有強腐蝕性物質的地方。3 接地模組的埋設...

作業系統與裝置驅動程式的安裝 實驗報告

電腦科學與技術系 實驗報告 課程名稱 計算機組裝與維護實訓 實驗名稱 作業系統與裝置驅動程式的安裝 姓名 曹蓉學號 124077031002 日期 20141113 地點 13機房 成績教師 張毓福 一 實驗目的 熟悉ghost軟體的使用,掌握windows xp安裝後進行設定,熟悉各種驅動程式的安...