四、导出符号表

vim ./include/linux/export.h +50

在一个内核模块中调用另外一个内核模块中的函数,需要提供者将函数的符号表(地址)导出,调用者直接使用这个地址即可

1、导出符号表的意义:

1)可以解决内核代码冗余的问题,同种问题,一次实现,多次调用。
2)可以减小驱动开发的难度,在编写Linux内核驱动的时候,一些内核机制实现的过程,驱动工程师不需要太过关心,内核工程师将这些接口直接供给驱动工程师使用,从而减小开发的难度。

2、操作过程:

1)在第一个模块的函数实现后,使用导出函数符号表的宏(即:EXPORT_SYMBOL_GPL(func)宏);

  如: 
  int add(int a,int b)
  {
        return (a+b);
  }
  EXPORT_SYMBOL_GPL(add);

2)编译第一个模块,生成一个Module.symvers的文件,文件中记录着add函数的地址

3)将这个Module.symvers文件复制到第二个模块目录下,

4)在第二个模块中使用函数前,先进行声明,

  如:
  extern int add(int,int);
  int c = add(7,8);

5)正常编译第二的模块,等待编译通过,

6)模块加载时,先安装第一个模块,在安装第二个模块

7)模块移除时,先卸载第二个模块,在卸载第一个模块

posted on 2020-12-06 15:50  八杯水  阅读(320)  评论(0)    收藏  举报