EXPORT_SYMBOL_GPL是Linux内核中的一个宏,用于将一个符号(函数、变量或其他)导出为符号表的全局符号。它的作用是允许其他模块或驱动程序使用该符号,即可以在其他模块中调用该导出的符号。 EXPORT_SYMBOL_GPL与EXPORT_SYMBOL的区别在于,EXPORT_SYMBOL_GPL将符号标记为“GPL许可证”下可用,意味着只有遵循GPL许可证规定的...
EXPORT_SYMBOL_GPL 是一个宏,用于将符号(函数、变量、结构体等)导出为 Linux 内核模块的全局符号。 在Linux 内核中,一些符号是被标记为 EXPORT_SYMBOL 或 EXPORT_SYMBOL_GPL 的,这意味着它们可以在内核模块中使用。EXPORT_SYMBOL_GPL 和 EXPORT_SYMBOL 的区别在于,EXPORT_SYMBOL_GPL 导出的符号只能被 GPL 许可证...
EXPORT_SYMBOL_GPL宏: // linux-4.10.1/kernel/module.c/\*\* Mutex protects:\* 1) List of modules (also safely readable with preempt\_disable),\* 2) module\_use links,\* 3) module\_addr\_min/module\_addr\_max.\* (delete and add uses RCU list operations). \*/DEFINE\_MUTEX(modu...
EXPORT_SYMBOL和EXPORT_SYMBOL_GPL用于导出符号到内核符号表中(内核符号表可通过 ‘/proc/kallsyms’ 查看),导出的符号可以被其它模块调用,调用前需要先声明。 通过EXPORT_SYMBOL导出的符号可以被包含GPL许可权的模块和不包含GPL许可权的模块调用; 通过EXPORT_SYMBOL_GPL导出的符号只能被包含GPL许可权的模块调用,否则会...
EXPORT_SYMBOL(name); EXPORT_SYMBOL_GPL(name); 这两个宏均用于将给定的符号导出到模块外. _GPL版本的宏定义只能使符号对GPL许可的模块可用。 符号必须在模块文件的全局部分导出,不能在函数中导出,这是因为上述这两个宏将被扩展成一个特殊用途的声明,而该变量必须是全局的。这个变量存储于模块的一个特殊的可执...
这里只显示EXPORT_SYMBOL,EXPROT_SYMBOL_GPL处理过的符号。 3.System.map内核符号文件 通过more /boot/System.map 可以查看内核符号列表。 可以显示编译好内核后所有在内核中的符号,模块中的要另行查看。 4.通过nm vmlinux也可以查看内核符号列表 可以显示编译好内核后所有在内核中的符号,模块中的要另行查看。
EXPORT_SYMBOL_GPL(符号名) 只适用于包含GPL许可权的模块。 导出的符号可以被其他模块使用,不过使用之前一定要extern声明一下。这就是作为模块之间互相通信的一种方法。 举一个代码演示: 一个文件是hello.c文件,定义2个函数,用于导出 #include <linux/init.h> ...
EXPORT_SYMBOL(test_add); MODULE_LICENSE("Dual BSD/GPL"); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 【Makefile】 obj-m += add.o KERN_VER := $(shell uname -r) KERN_DIR = /lib/modules/$(KERN_VER)/build modules: $(MAKE) -C $(KERN_DIR) M=`pwd` modules ...
EXPORT_SYMBOL_GPL(kdb_register); #define __EXPORT_SYMBOL(nr_irqs, _gpl) \ extern typeof(nr_irqs) nr_irqs; \ //申明nr_irqs是全局变量 __CRC_SYMBOL(nr_irqs, _gpl) \ //CRC校验用,一般是空的 static const char __kstrtab_nr_irqs[] \ //定义一个字符串 ...
//#define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec //#define __cond_export_sym_0(sym, val, sec) /* nothing */ #include <linux/kconfig.h> #include <generated/autoksyms.h> .macro __ksym_marker sym .section ".discard.ksym","a" __ksym_marker_\sym...