首页 > 代码库 > 01 模块化编程的基本概念

01 模块化编程的基本概念

一、模块化编程

1. 入口

module_init(xxx);

2. 出口

module_exit(xxx);

3. 头文件

#include <linux/init.h>

#include <linux/module.h>

4. 申明许可和作者

MODULE_LICENSE("GPL");

MODULE_AUTHOR("GNB"); 

二、编译模块Makefile

 1 KERNEL_DIR = /lib/modules/$(shell uname -r)/build
 2 PWD = $(shell pwd)
 3 
 4 ifeq ($(KERNELRELEASE), )
 5 
 6 .PHONY:module clean
 7  
 8 module:
 9     $(MAKE) -C $(KERNEL_DIR) M=$(PWD)  modules
10 
11 clean:
12     $(MAKE) -C $(KERNEL_DIR) M=$(PWD)  clean 
13 
14 else
15 
16     obj-m := xxx.o
17 
18 endif 

三、模块加载/卸载/查看

1. 加载模块

$ sudo insmod xxx.ko

2. 查看模块

$ sudo lsmod | grep xxx

3. 卸载模块

$ sudo rmmod xxx

注意:Linux 不允许有同名的模块。

四、例子

技术分享

五、练习

1. 编写一个模块,加载的时候,计算1+2+...+100,卸载的时候输出累加的结果。

 

六、带参的模块

1. 编写一个模块,加载的时候,计算1+2+...+n,卸载的时候输出累加的结果。

 

2. 带参数的模块

七、符号导出

目的:将自己实现的函数或者全局变量,导出给别的模块使用。

方法有2种:

1. EXPORT_SYMBOL(函数名或全局变量)

2. EXPORT_SYMBOL_GPL(函数名或全局变量)  ----导出的符号只允许遵从GPL协议的模块使用

练习:

A模块调用B模块中实现sum()函数。

01 模块化编程的基本概念