如何导出内核模块符号以及如何引用导出的符号

以下是file1.c文件:

#include<linux/init.h>
#include<linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

int add_integar(int a, int b)
{
 return a+b;
}

int sub_integar(int a, int b)
{
 return a-b;
}

/*导出符号*/

EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);

 

以下是和file1.c文件在同一目录下的Makefile文件

#KERNELDIR := /usr/src/kernels/2.6.18-8.el5-i686
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

obj-m := file1.o
modules:
        make -C $(KERNELDIR) M=$(PWD) modules
modules_install:
       $(MAKE) -C $(KERNELDIR) M=$(PWD) module_install

clean:
       rm -rf *.o
       rm -rf *.mod.*
       rm -rf *.ko
       rm -rf *.symvers

 

以下是book.c文件

#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>

static char *book_name = "dissecting Linux Device Driver";
static int num =4000;

/*导出符号是函数名的话必须要写出形参,否则引用的时候出错,且有返回值类型是要写明返回类型*/
extern int add_integar(int, int);
extern int sub_integar(int, int);

static int __init book_init(void)
{
 add_integar(1,2);
 printk(KERN_INFO "book name:%s/n", book_name);
 printk(KERN_INFO "book num:%d/n",num);
 return 0;
}

static void  __exit book_exit(void)
{
 printk(KERN_ALERT "book module exit/n");
}

module_init(book_init);
module_exit(book_exit);
module_param(num, int, S_IRUGO);
module_param(book_name, charp, S_IRUGO);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("cai zhengbo");
MODULE_DESCRIPTION("A simple module for test module params");
MODULE_VERSION("V1.0");

以下是和book.c文件在同一目录下的Makefile文件

#KERNELDIR := /usr/src/kernels/2.6.18-8.el5-i686
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

obj-m := book.o

modules:
        make -C $(KERNELDIR) M=$(PWD) modules
modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) module_install

clean:
       rm -rf *.o
       rm -rf *.mod.*
       rm -rf *.ko
       rm -rf *.symvers

 

先在file1.c文件的目录下运行make,然后insmod

再在book.c文件目录下运行make,然后insmod,发现在book.c文件中可以引用add_integar符号

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值