標籤:原始碼 linux核心
在閱讀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的段中。以便在載入模組時,提供模組資訊。