Linux驅動開發入門基礎
Linux驅動開發
簡單的helloworld核心模組程式
原始碼分析
1 #include <linux/init.h> //位於核心原始碼include下,主要包含了核心模組的載入、解除安裝函式的宣告,還有一些巨集定義。涉及到核心模組程式設計需要
2 #include <linux/module.h> //一些巨集定義,MODULE_LICENSE 這個是指定該核心模組的許可證,必須要有。其它看情況
3
4 //預設不輸出除錯資訊 許可權有限制
5 ***********核心模組引數**************
6 bool debug_on = 0; //布林型別的模組引數,控制除錯資訊的輸出,正常執行不需要,為0
7 module_param(debug_on, bool, S_IRWXU); //第三個是許可權,使用者擁有IRW三個許可權。該巨集定義在/linux/moduleparam.h
8
9
10 ******* 核心模組載入/解除安裝函式************
11 static int __init hello_init(void) //如果和核心原始碼中的函式重複則會編譯失敗報錯,所以要static
12 {
13 if (debug)
14 printk("[ DEBUG ] debug info output\n"); //核心模組執行時無法呼叫C庫的printf
15 printk("Hello World Module Init\n");
16 return 0; //返回值為0,初始化成功,在/sys/module 下新建一個以模組名為名的目錄,
17 }
18 module_init(hello_init); //該巨集告訴核心註冊一個模組載入函式 hello_init,來進行模組初始化,具體見下
19
20
21 static void __exit hello_exit(void)
22 {
23 printk("Hello World Module Exit\n");
24 }
25 module_exit(hello_exit); //該巨集告訴核心註冊該模組的解除安裝函式。
26
27 *********核心模組許可證及其它資訊********
28 MODULE_LICENSE("GPL"); //必須宣告該模組使用遵循的許可證,這裡我們設定為 GPL 協議。
29 MODULE_AUTHOR("embedfire");
30 MODULE_DESCRIPTION("hello world module");
31 MODULE_ALIAS("test_module"); //用於起別名
————————————————
版權宣告:本文為CSDN博主「致丶簡」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_40662725/article/details/105884252