首页 > 代码库 > 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 模块化编程的基本概念
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。