構造和執行模組

2021-07-27 21:16:00 字數 929 閱讀 2105

構造乙個模組並不難,難的是如何把自己驅動的元件理解好,並最大化其效能,說的俗一點就是怎麼利用好器件的功能。

核心模組程式和應用程式

:大多數的小規模應用程式都是從頭到尾執行單個任務

,而模組卻只是先註冊自己

,以便服務以將來,接著它的初始化函式就立即結束。模組化程式執行在核心空間,是核心功能的乙個擴充套件,一般來說,乙個驅動程式一般要能執行兩個基本任務,一是:系統呼叫,如read/write;一是中斷響應。

使用者空間和核心空間:這是作業系統原理的概念

,只要不是專門研究這兩個名詞的概念,就不需要深入研究它們,只需有個大概的理解就可以。可以這樣理解,比如

4g的記憶體,

0-2g

的空間是使用者空間,最後

1g用作核心,

核心空間是用來執行核心相關程式的空間一部分驅動程式就是執行在核心空間,一般的使用者不需要接觸這部分;使用者空間是用來執行使用者應用程式的空間。

堆疊的概念:這裡不去講清楚堆疊的概念,想弄清楚這個概念,可以做進一步的查閱。這裡講一下棧,棧是用來儲存函式呼叫歷史以及當前活動函式中的自動變數的,對棧的理解能對解系統異常問題有很大的幫助。

export_sysmbol(name)

export_sysmbol_gpl(name)

以上兩個巨集主要是用於將給定的符號匯出到模組之外,在驅動程式中很常見。

在使用者空間中編寫驅動程式:我個人理解,其實這是

android

中hal

層的乙個最原始的思想。在使用者空間編寫驅動程式,可以用於研究乙個新的裝置驅動程式,因為此時不用擔心整個系統被掛起,一旦穩定之後就可以把驅動程式封裝到核心空間中。而在

android

系統中,為了保護硬體裝置廠家的智財權,它把硬體廠家的驅動程式直接放著

hal層中,這樣硬體廠家就不需要開放他們的原始碼,只需提供二進位制檔案。

構造和執行模組

include include module license dual bsd gpl 如果沒有這行,編譯器會產生抱怨 static int hello init void static void hello exit void module init hello init 指定裝載模組時初始化函式...

構造和執行模組

1.可在執行時新增到核心中的 被稱為 模組 ldd3 p13 可裝載模組 2.在root許可權下 使用insmod module name.ko裝載模組 使用rmmod module name解除安裝模組 3.hello world模組 4.makefile 5.如果使用虛擬機器,在控制台看不到pr...

LDD Ch 2 構造和執行模組

module的相關的巨集定義都在include linux module.h中。module init,module exit也是巨集,在init.h中定義。init和exit函式指標的宣告如下 typedef int initcall t void 注意,返回0才是success,負數指明錯誤號。...