__devexit在函数声明中是什么意思?

肯克龙

我看过的司机

static void __devexit rtsx_remove(struct pci_dev *pci)

__devexit在函数定义的上下文中是什么意思?我见过的其他功能最多都static具有返回类型。

薄荷糖97

长话短说:

这是一个宏,扩展为一组gcc属性它们是一种为编译器提供有关代码中各种内容的特殊信息的方法,例如本例中的函数。

为此,不同的编译器具有不同的语法,这不是标准的。例如,gcc使用属性,但是其他编译器使用不同的构造。

漫长的故事漫长的故事:

因此,我不是Linux内核专家,但是从源代码来看,此宏用于Hotplug我相信它表示该功能应该在特定设备退出时执行某些操作。

例如,您提供的功能似乎来自与Realtek PCI-Express读卡器驱动程序一起使用的Hotplug功能集。

该宏实际上是做什么的?好吧,让我们仔细看一下宏的定义:

#define __devexit        __section(.devexit.text) __exitused __cold

第一部分是__section(.devexit.text)

# define __section(S) __attribute__ ((__section__(#S)))

如您所见,这会创建一个__attribute__(__section__())名为的节".devexit.text"这意味着gcc会将具有此属性的函数的汇编代码编译为带有名称.devexit.text(而不是默认部分)的已编译二进制文件中的命名部分。

第二部分是__exitused(仅在MODULE定义宏的情况下才定义为以下内容):

#define __exitused  __used

并且__used根据gcc版本的定义如下:

# define __used                 __attribute__((__used__))

或像这样:

# define __used                 __attribute__((__unused__))

前者确保即使没有在任何地方引用具有该属性的函数,该函数也会被编译。后者在相同情况下抑制编译器警告,尽管它不会以任何方式影响编译。

最后,__cold

#define __cold                  __attribute__((__cold__))

这是一个属性,它通知编译器不会经常调用具有此属性的函数,以便可以相应地进行优化。

如此,我们到底有什么?看起来像标__devexit有的函数只是很少被调用(如果被调用)的函数,而是塞入命名部分中。

所有源代码都从这里获取看起来该宏实际上已经从Linux内核中删除了

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章