当前位置: 首页 > 面试题库 >

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

谢英耀
2023-03-14
问题内容

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

下面是一段代码,其中包含EXPORT_SYMBOL_GPL

62 struct resource *platform_get_resource(struct platform_device *dev,
 63                                        unsigned int type, unsigned int num)
 64 {
 65         int i;
 66 
 67         for (i = 0; i < dev->num_resources; i++) {
 68                 struct resource *r = &dev->resource[i];
 69 
 70                 if (type == resource_type(r) && num-- == 0)
 71                         return r;
 72         }
 73         return NULL;
 74 }
 75 EXPORT_SYMBOL_GPL(platform_get_resource);

该宏在内核代码中多次出现。


问题答案:

将某些符号(例如函数)定义为可导出(从内核可加载模块中看到)是宏。如果该符号没有“ EXPORT_SYMBOL”,则将无法从模块访问该符号。

EXPORT_SYMBOL_GPL将仅在GPL许可的模块中显示该符号,并且EXPORT_SYMBOL-在具有任何许可的模块中显示该符号。

http://lwn.net/Articles/154602/-关于EXPORT_SYMBOL_GPL的值(2005年,corbet)

插入可加载模块时,必须将其对内核功能和数据结构的任何引用链接到当前正在运行的内核。但是,模块加载器并不提供对所有内核符号的访问。仅那些已明确导出的文件才可用。

出口有两种口味:香草(EXPORT_SYMBOL)和纯GPL(EXPORT_SYMBOL_GPL)。前者可用于任何内核模块,而后者不能被任何不具有GPL兼容许可证的模块使用。



 类似资料:
  • 问题内容: 从这里 我没有得到它的含义以及为什么使用它。我试图搜索它,但不了解其含义。 问题答案: 它使动态加载的模块可以访问符号(前提是所述模块添加了声明)。

  • 问题内容: 我正在研究Linux内核,但是有问题。 我看到许多Linux内核源文件都有。那是什么? 问题答案: 它是指向当前进程(即发出系统调用的进程)的指针。 在x86上,它是在(其他拱门的类似文件)中定义的。 Linux设备驱动程序第2章中的更多信息: 当前指针是指当前正在执行的用户进程。在执行系统调用(例如打开或读取)期间,当前进程是调用该调用的进程。如果需要,内核代码可以通过使用curre

  • 问题内容: 在Linux内核源代码中,我找到了以下功能: 在这里我不明白这意味着什么。 问题答案:

  • 问题内容: 当我经历了以下块的Linux的字符设备驱动程序代码,我发现结构的指针在。 我想知道指向的结构及其完整元素。 此结构有什么作用? 问题答案: 它是指向当前进程(即已发出系统调用的进程)的指针。 从文档: 当前过程 尽管内核模块不像应用程序那样顺序执行,但是内核执行的大多数操作都与特定进程有关。内核代码可以通过访问全局项current来了解驱动它的当前进程,该全局项current是指向st

  • 问题内容: 在Linux中开发内核模块时,不允许使用C标准库。 但是,如果我需要使用某些常用功能,例如,我应该去哪里? 问题答案: 无论Linux内核中没有实现什么,您都必须实现自己或从另一个开源内核模块中借鉴。但是,您会发现它是在内核中实现的。 请参阅内核API文档。特别是关于您的一般问题的“ 基本C库函数”部分,以及有关的特定问题的“ 字符串处理”部分。 您将要包含。 我不知道为什么内核API

  • 问题内容: 我读到Linux内核是抢占式的,这与大多数Unix内核不同。那么,内核抢占到底意味着什么呢? 一些类比或示例将比纯理论解释更好。 添加2018年1月1日-11:00 AM 抢占式只是多任务处理的一种范例。还有其他类似协作多任务处理。通过比较它们可以更好地理解。 问题答案: 想象一下抢占式多任务的简单视图。我们有两个用户任务,它们都一直在运行,而没有使用任何I / O或执行内核调用。这两