标签:des style blog color io ar 使用 for sp
实现:在一个内核模块调用另一个内核模块中的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; //定义参数a static int b; //定义参数b module_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.o obj-m += file4.o KDIR = ./kernel_src all: make -C $(KDIR) M=`pwd` modules clean: 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
标签:des style blog color io ar 使用 for sp
原文地址:http://www.cnblogs.com/achsnw/p/4040826.html