1.模組載入函式(
必須)模組載入函式必須以「module_init(
函式名)」
的形式被指定。若初始化成功則返回0,
否則返回錯誤編碼。 s
truct int __init initialization_funcfction(void)
module_init(initialization_function);//
指定initialization_function
為初始化函式。
2.模組解除安裝函式(必須)
模組解除安裝函式必須以「module_exit(
函式名)」
的形式被指定,無返回值。 s
truct void __exit cleanup_function(void)
module_exit(cleanup_function);//
指定cleanup_function
為模組解除安裝函式。
3.模組許可宣告(必須)
許可宣告描述核心模組的許可許可權,如果不宣告license
,模組載入時,收到keneltainted
警告。
license
包括:gpl
,gplv2,gpl and additional rights, dual bsd/gpl, dual mpl/gpl, proprietary.
宣告方法: module_license(
許可權); 4.
模組引數(可選)
可以用「module_param(
引數名,引數型別,引數讀/
寫許可權)」
為模組定義乙個引數。例如:
static char * name;
module_param(name,charp,s_irugo);
在insmod
時就可以這樣傳入引數:insmod test.ko name=」zhangsan」
5匯出符號(可選)
linux2.6
的「/proc/kallsy「
檔案對應著核心符號表,它記錄了符號以及符號所在的記憶體位址。模組可以使用巨集export_symbol(
符號名)
或者export_symbol_gpl(
符號名)
把符號匯出到核心符號表,這樣其他模組就可以使用匯出的符號表了,
使用時用extern
宣告一下即可。
6.模組宣告與描述(可選)
module_author(author);//作者
module_description(description);//
模組描述
module_version(version_string);//版本
… 7.乙個簡單的核心模組例子hello.c。
#include
#include
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init); /*指定hello_init為模組載入函式*/
module_exit(hello_exit); /*指定hello_exit為模組解除安裝函式*/
module_author("miaohy");/*作者*/
module_license("gpl");/*許可權*/
module_description("a****** hello world module");/*模組描述*/
module_alias("a******st module");/*模組別名*/
CH04 Linux核心模組程式結構 md
乙個linux核心模組主要由以下幾部分組成 模組解除安裝函式 通過rmmod命令解除安裝模組時,模組的解除安裝函式會自動被核心執行,完成與模組載入函式相反的功能。模組許可證宣告 許可證 license 宣告描述核心模組的許可許可權,如果不宣告license,模組被載入時,將收到核心被汙染 kerne...
C 程式結構
c 中的組織結構的關鍵概念是程式 program 命名空間 namespace 型別 type 成員 member 和程式集 assembly 命名空間 型別 成員 類 class 資料成員 字段 函式成員 方法,屬性,索引器,事件,運算子,構造 析構函式 介面 inte ce 函式成員 附經典理解...
c 程式結構
東南大學第5章c 程式結構 本章重點注意const static兩個關鍵字,也是企業面試中常見的面試題 一 作用域 作用域 識別符號的可見範圍 可見性 識別符號是否可以引用的問題。1,函式原型作用域 函式原型裡的形參 2,塊作用域 塊中的識別符號作用域在花括號之間 3,類作用域 類x的乙個成員m,在...