首页 > 代码库 > 一个内核模块例子(实现调用其他模块中的方法,传递参数等)
一个内核模块例子(实现调用其他模块中的方法,传递参数等)
实现:在一个内核模块调用另一个内核模块中的a+b函数,并通过命令行给参数a,参数b赋值。
file3.c
#include<linux/module.h>void add_num_func(int a,int b){ printk("file1 a+b = %d \n",a+b);}EXPORT_SYMBOL(add_num_func); //表示该函数可以被外部调用MODULE_LICENSE("GPL");
查看内核符号表使用该命令:#cat /proc/kallsyms
file4.c
#include <linux/kernel.h>#include <linux/module.h>static int a; //定义参数astatic int b; //定义参数bmodule_param(a,int,S_IRUSR); //声明该变量作为module的参数,S_IRUSR 文件所有者的读权限module_param(b,int,S_IRUSR);extern void add_num_func(int a,int b);static int __init add_module_init(void){ printk("add_module_init"); add_num_func(a,b); return 0;}static void __exit add_module_exit(void){ printk("add_module_exit");}module_init(add_module_init);module_exit(add_module_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Achilles");MODULE_DESCRIPTION("A simple module for linux : a+b");MODULE_VERSION("V1.0");MODULE_PARM_DESC(a,"parm A"); //说明参数的功能MODULE_PARM_DESC(b,"parm B");
Makefile:
obj-m += file3.oobj-m += file4.oKDIR = ./kernel_srcall: make -C $(KDIR) M=`pwd` modulesclean: make -C $(KDIR) M=`pwd` clean
Makefile中的kernel_src是软连接,链接向内核源码顶级目录。
效果:
[root@(none) /modules]# insmod file3.ko
[root@(none) /modules]# insmod file4.ko a=1 b=3
add_module_initfile1 a+b = 4
注意:需要先安装file3.ko模块,然后安装file4.ko模块,否则报错,找不到符号。
[root@(none) /modules]# insmod file4.ko
[14905.833510] file4: Unknown symbol add_num_func (err 0)
insmod: can‘t insert ‘file4.ko‘: unknown symbol in module, or unknown parameter
一个内核模块例子(实现调用其他模块中的方法,传递参数等)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。