模块间通信实例 - newer2/Blog GitHub Wiki

模块间通信实例

. 基本功能 . 源文件 . 头文件 . Makefile

. 基本功能 module1导出加法和减法两个功能函数,module2通过insmod时传入参数,决定调用对应功能函数

. 源文件

module1.c ------ 该源文件只是为module2提供一些功能实现,所以module1并没有模块加载函数、模块卸载函数(module_init module_exit) +++++++

#include <linux/init.h>
#include <linux/module.h>
#include "module1.h"	//module1 头文件

long add(int a, int b)
{
	return a+b;
}
long sub(int a, int b)
{
	return a-b;
}

EXPORT_SYMBOL(add);		//导出两个功能函数
EXPORT_SYMBOL(sub);
MODULE_LICENSE("Dual BSD/GPL");

module2.c

#include <linux/init.h>
#include <linux/module.h>
#include "module1.h"	//提供待引用函数原型

static long a = 1;		
static long b = 1;		
static AddOrSub = 1;	//传入参数,决定加or减

static int module2_init(void)
{
	long result = 0;

	if(1 == AddOrSub){
		result = add(a,b);
	}
	else{
		result = sub(a,b);
	}
	printk(KERN_ALERT "result: %ls\n", result);

	return 0;
}

static void module2_exit(void)
{
	printk(KERN_ALERT "communicaton among modules exit\n");
}

module_init(module2_init);
module_exit(module2_exit);

module_param(a, long, S_IRUGO);
module_param(b, long, S_IRUGO);
module_param(AddOrSub, int, S_IRUGO);

MODULE_LICENSE("Dual BSD/GPL");

. 头文件 module1.h

#ifndef _MODULE1_H_
#define _MODULE1_H_
long add(int a, int b);
long sub(int a, int b);
#endif

. Makefile module1 Makefile module2 Makefile

⚠️ **GitHub.com Fallback** ⚠️