LINUX驅動模塊示例講解

驅動模塊示例代碼:
https://gitee.com/yuewguo/linux_module_example.git

最簡單的內核模塊由1個c源文件和1個Makefile文件組成。
1、C源文件內容
 1    #include <linux/init.h>
 2    #include <linux/module.h>
 3    
 4    MODULE_LICENSE("GPL");
 5    
 6    static int UF_init(void)
 7    {
 8        printk(KERN_EMERG"install urlfilter succ!\r\n"); //與用戶態的printf功能相似
 9        return 0;
10    }
11    
12    static void UF_exit(void)
13    {
14        printk(KERN_EMERG"uninstall urlfilter succ!\r\n");
15        return ;
16    }
17    
18    module_init(UF_init);  // 指定模塊被裝載到內核時的調用函數
19    module_exit(UF_exit); // 指定模塊被從內核移除時的調用函數
2、Makefile內容
 1    ifneq ($(KERNELRELEASE),)
 2        obj-m :=xxx.o
 3        xxx-objs = yyy.o zzz.o
 4    else
 5        KDIR ?= /lib/modules/$(shell uname -r)/build
 6        PWD := $(shell pwd)
 7    
 8    all:
 9        make -C $(KDIR) M=$(PWD) modules
10    endif
解釋以下:
Makefile被執行兩次。
第一次由make命令觸發,由於KERNELRELEASE未被設置,綠色部分被執行。
      -C選項指定內核源代碼目錄,M=選項指定在構造modules以前返回到模塊源代碼目錄
第二次由「M=」選項觸發,由於KERNELRELEASE此時已被設置,紫色部分被執行。
      obj-m指定模塊名稱,好比上文指定的模塊名稱爲 xxx.ko
      xxx-objs指定構建該模塊須要哪些目標文件

3、編譯、安裝、卸載
編譯 make
安裝模塊 insmod xxx.ko
卸載模塊 rmmod xxxlinux

相關文章
相關標籤/搜索