1. 程式人生 > 其它 >Linux驅動開發入門基礎

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