Linux 驅動開發 核心模組設計筆記 0

2021-07-22 03:48:30 字數 1867 閱讀 2912

1.模組化程式設計原因:linux 核心龐大,需要大量元件,一起整合會導致映象檔案過大

核心模組操作命令:

載入:

insmod ***.ko
解除安裝:

rmmod ***.ko
檢視:

lsmod | grep ***.ko
核心模組程式設計標頭檔案必備

#include

#include

核心模組函式出入口

module_init(function_name)

module_exit(function_name)

解釋:

i. 當終端呼叫insmod 命令時,module_init(function_name)函式將被核心呼叫

ii. rmmod 命令呼叫 module_exit(function_name)

程式設計模型:

#include

#include

/*核心傳參:

name:變數名

type:型別:bool;int;charp(字串)

perm:訪問許可權: s_irugo:讀許可權 s_iwusr:寫許可權

*/moduel_param(name,type,perm)

static

int hell_init(void)

static

void hell_exit(void)

/*模組附加資訊申明*/

module_license(「gpl等」);

module_author(「作者」);

module_description(「模組資訊描述」);

module_version(「版本申明」);

module_init(hell_init);

module_exit(hell_exit);

模組引數傳遞:

int a=1;

char* sr;

moduel_param(a,int ,s_irugo);

moduel_param(sr,charp,s_iwusr);

載入時傳遞引數可用:

insmod ***.ko a=3
核心符號及匯出:

a) 如果模組需要將定義的函式交給其他外部模組使用,則必須使用模組符號匯出巨集

b) 模組匯出,例如在模組中新增下面的巨集

export_symbol(符號名); //只能用於包含gpl許可證
makefile 編寫格式說明:

/*obj-m指定編譯成模組檔案,***.o為目標檔案*/

obj-m

:= ***.o

/*針對多檔案核心模組*/

***-objs

:= file1.o file2.o

/*定義儲存核心原始碼的路徑*/

kernelpath:=

/...

.../*

all:目標

-c: 指定原始碼依賴所在路徑

m: 指定模組檔案所在路徑

*/all:

make -c $(kernelpath) m=$(pwd) modules cross_compile=arm-llinux

- arch=arm

Linux 驅動開發核心模組的新增

寫這篇部落格的目的是做一下筆記,便於自己查閱。首先給出核心模組源 當然是最最簡單的helloworld。include include module license gpl gpl 開源協議 static inthello init void static voidhello exit void m...

linux的驅動開發 核心模組的編譯

1.編譯核心模組的編譯器 qquad 編譯器 gcc 交叉編譯器 2.編寫編譯核心模組的makefile qquad 內部編譯 核心模組的原始檔放在核心原始碼中進行編譯,需要修改核心中的kconfig,makefile,make menuconfig qquad 靜態編譯 將核心模組編譯進uimag...

Linux核心驅動模組學習

ko檔案在是elf excutable and link format 格式,是一種可重定位的目標檔案。在編譯驅動模組時,我們在makefile中用obj m o來指定生成核心驅動模組檔案,即.ko檔案。首先insmod會通過檔案系統將ko讀到使用者空間的一塊記憶體中,然後執行系統呼叫sys ini...