在閱讀Linux Driver源碼時,我們常常會在文件的結尾處看到諸如:MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE等宏定義,這些宏主要是定義了一些模塊信息。
但這些模塊信息詳細是怎么加到模塊里的?就須要深入分析一下這些宏定義詳細是怎么定義的。以下我們以MODULE_AUTHOR為例。來詳細分析一下有關module信息的宏。
首先,我門來看一下MODULE_AUTHOR()宏的定義:
#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
#define __MODULE_INFO(tag, name, info) \
static const char __UNIQUE_ID(name)[] \
__used __attribute__((section(".modinfo"), unused, aligned(1))) \
= __stringify(tag) "=" info
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
#define ___PASTE(a,b) a##b
#define __PASTE(a,b) ___PASTE(a,b)
到這里。關於MODULE_AUTHOR()宏的所有定義已經所有展開。以下我們以一個實例來說明MODULE_AUTHOR的使用方法。
比如:MODULE_AUTHOR("Dennis")
展開后變為:
static const char __UNIQUE_ID_Dennis0[]
__used__attribute__((section(".modinfo"), unused, aligned(1)))
= "author"“=”“Dennis”
所以。展開后,我們能夠發現,事實上MODULE_AUTHOR宏事實上是定義了一個以參數__author為標識符的一部分的字符數組。且將此變量放在.modinfo的段中。以便在載入模塊時。提供模塊信息。