開發乙個核心模組的helloworld
當我們開始學習一種新的程式設計方式時必然會是以乙個helloworld開始,通過對helloworld的編寫可以讓了解開發環境,開發方式以及基本的**編寫過程,以下就是helloworld源**和makefile。
原始碼helloword.c
#include
#include
static
int __init hello_init
(void
)void __exit hello_exit
(void
)module_init
(hello_init)
;module_exit
(hello_exit)
;module_license
("gpl");
module_author
("xz");
module_description
("test"
);
makefile
obj-m:=helloword.o
pwd:=$(shell pwd)
kver:=$(shell uname -r)
kdir:=/lib/modules/$(kver)/build/
all:
$(make) -c $(kdir) m=$(pwd)
clean:
rm -rf *.o *.mod.c *.mod.o *.ko *.symvers *.order *.a
編譯方式
make all
知識點紀要
乙個驅動程式至少包含兩個標頭檔案init.h和module.h,至少需要實現兩個函式乙個以__init 巨集修飾,乙個以 __exit巨集修飾,這兩個函式將會在核心模組被載入和解除安裝時呼叫。此外還要把這兩個函式指標通過module_init和module_exit新增到作業系統核心模組呼叫鏈中去。module_license是為自己申明你所編寫的核心模組的原始碼協議,module_author申明模組作者,module_description宣告模組的描述,所有宣告的資訊都可以通過modinfo 來檢視。
[root@bogon test1]
# modinfo helloword.ko
filename: /root/study/divier/test1/helloword.ko
description: test
author: xz
license: gpl
retpoline: y
rhelversion: 7.8
srcversion: ed0f80f1e3f8388246fa9db
depends:
vermagic: 3.10.0-1127.13.1.el7.x86_64 smp mod_unload modversions
makefile中需要指定好核心檔案的目錄,`m=`是指明原始碼跳轉後使用哪個目錄下的makefile linux核心模組開發基礎
1.什麼是核心模組 核心模組具有以下兩個特點 1.模組本身並不被編譯進核心檔案 zimage或bzimage 可以根據需求,在核心執行期間動態的安裝或解除安裝。2.為什麼需要核心模組 原因 linux核心的整體結構非常龐大,其包含的元件也非常多,如何使用這些元件呢,方法1 把所有的元件都編譯鍵核心,...
核心開發基礎
1.程序管理 程序是執行程式的乙個例項,核心負責程序的建立 銷毀 程序 排程 程序間通訊等 note 核心本身不是乙個程序,而是程序的管理者 2.記憶體管理 管理程序的位址空間,使用者態下 區 資料區 私有棧 核心態 核心的 區 核心的資料區 核心棧。3.檔案系統支援 4.裝置控制 5.中斷和異常響...
Linux核心基礎
linux系統執行的應用程式通過系統呼叫來與核心通訊。應用程式通常呼叫庫函式 比如c庫函式 再有庫函式通過系統呼叫介面,讓核心帶其完成各種不同的任務。下面這張圖顯示的就是應用程式,核心和硬體之間的關係 在任何時間點上我們都可以將每個處理器的活動概括為以下三者之一 1.執行於使用者空間,執行使用者程序...