第一、在模块函数定义之后使用EXPORT_SYMBOL(函数名); 第二、在调用该函数的模块中使用extern对之声明; 第三、首先加载定义该函数的模块,再加载调用该函数的模块; 3、区别 EXPORT_SYMBOL(name); EXPORT_SYMBOL_GPL(name); 这两个宏均用于将给定的符号导出到模块外, _GPL版本的宏定义只能使符号对GPL许可的模块...
也就是说,使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。下面以一个简单的例子来说明如何使用 EXPORT_SYMBOL。 我们以导出符号test_add为例,在适当的位置创建 add.c 和 Makefile 文件,内容如下: 【add.c】 #include <linux/module.h> int test_add(int x, int y) { return x+y; } ...
export_symbol用于限制某些符号(函数、变量等)只能在特定模块中使用,不能被其他模块访问。其使用限制包括: 只能用于限制全局变量和函数的可见性,不能用于限制类的可见性。 在使用export_symbol时,必须确保该符号在相应模块内已被定义,否则将导致链接错误。 不能在多个模块中同时使用export_symbol来限制同一个符号。 如...
使用export_symbol宏的步骤如下: 在需要导出符号的源文件中,添加#include <linux/module.h>头文件,以引入相关的宏定义。 在需要导出的符号的定义处,使用EXPORT_SYMBOL宏将其导出。 例如,导出一个名为my_function的函数,可以按照以下步骤进行: 在源文件的顶部添加#include <linux/module.h>。 在my_function函数的...
6.1内核在驱动模块中使用EXPORT_SYMBOL 导出函数给其它模块用的话,必须将导出的函数定义在.h文件中才行。 否则会报:error:local symbol xxxx was exported 编译不过,加入到头文件中编译OK。 然后在使用的模块中…
使用EXPORT_SYMBOL 使⽤EXPORT_SYMBOL 在Linux内核⾥,我们编写驱动程序时,如果遇到的驱动太⼤,需要在各个模块之间共享⼀些变量或函数等,此时就需要⽤到内核⾥的EXPORT_SYMBOL宏了,其在include/linux/export.h⽂件中定义,⽽最常⽤的有如下两个:#define EXPORT_SYMBOL(sym) \ __EXPORT_SYMBOL...
example:模块A导出符号,模块B使用符号,代码如下 A模块代码: // A module #include <linux/init.h> #include <linux/module.h> int add_integar(int a, int b) { return a + b; } EXPORT_SYMBOL(add_integar); int sub_integar(int a, int b) { return a - b; } EXPORT_SYMBOL_GPL(sub_intega...
EXPORT_SYMBOL出现于2.6内核,可以把内核中的函数导出到全局符号表供其他内核模块(包括用户自己写的内核模块)使用。有个限制是,这个导出的符号不能是static类型。由于需要使用内核的do_adjtimex()函数进行tick_length的调节,而这个函数在/kernel/time/ntp.c中,这里便以此为例。
EXPORT_SYMBOL是Linux内核中一个常见的工具,其作用是讲一个”Symbol”(函数或者变量)导出到内核空间,使得内核的所有代码都可以使用。我们用下面的例子来说明其使用方法。注意:在这篇文章中我假设你已经知道了内核模块开发的基本套路。 假设我们创建了两个内核模块mod1和mod2,其中mod1中有一个方法func_exported需要在...