驱动编程之“导出符号”
1) 文件代码main.c:
#include<linux/init.h>
#include<linux/module.h>
#include"include/pymath.h"
MODULE_LICENSE("Dual BSD/GPL");
static int num=30;
module_param(num,int,S_IRUGO);
static int __init py_init(void)
{
int a=22;
printk("address=%p\n",&a);
printk("num=%d\n",num);
printk("add(2,3)=%d\n",pyadd(2,3));
printk("welcome to you!!!\n");
return 0;
}
static void __exit py_exit(void)
{
printk("goodbye!I go out!\n");
return ;
}
module_init(py_init);
module_exit(py_exit);
MODULE_AUTHOR("cuina");
2) Main.c目录下的Makefile文件:
ifneq ($(KERNELRELEASE),)
obj-m :=hello.o
hello-objs:=main.o add.o
else
KDIR:=/lib/modules/2.6.28/build
all:
make -C $(KDIR) M=`pwd` modules
clean:
-rm -f *.ko *.o *.mod.o *.symvers
endif
3) Pymath.h文件:
#ifndef PY_MATH_H_
#define PY_MATH_H_
int pyadd(int x,int y);
#endif
4) Pymath.c文件:
#include<linux/init.h>
#include<linux/module.h>
#include"../include/pymath.h"
MODULE_LICENSE("Dual BSD/GPL");
extern int pyadd(int x,int y)
{
return x+y;
}
EXPORT_SYMBOL(pyadd);
MODULE_AUTHOR("cuina");
5) Pymath.c目录下的Makefile文件:
ifneq ($(KERNELRELEASE),)
obj-m :=pymath.o
else
KDIR:=/lib/modules/2.6.28/build
all:
make -C $(KDIR) M=`pwd` modules
clean:
-rm -f *.ko *.o *.mod.o *.symvers
endif
6) 此模块遇到的为题:
insmod hello.ko
insmod: error inserting 'hello.ko': -1 Unknown symbol in module
7) 解决方法:把在pymath。C的make出来的Module.symvers拷到main.c所在的目录中即可