在檢視核心驅動**的時候會經常看到在一些函式後面總會跟export_symbol()這樣的巨集定義,通過網上查閱,它的作用大致總結如下:
1、定義說明
把核心函式的符號匯出,也可以理解成將函式名作為符號匯出;符號的意思就是函式的入口位址,或者說是把這些符號和對應的位址儲存起來的,在核心執行的過程中,可以找到這些符號對應的位址的。
2、相關處理
(1)、對編譯所得的.ko進行strip -s,處理掉除錯資訊,這樣可以大大縮小ko檔案的大小;
(2)、使用kbuild_extra_symbols
主要使用於下面這樣的場合:
有兩個我們自己的模組,其中module b使用了module a中的export的函式,因此在module b的makefile檔案中必須新增:
kbuild_extra_symbols += /path/to/modulea/module.symvers
export kbuild_extra_symbols
這樣在編譯module b時,才不會出現warning,提示說func1這個符號找不到,而導致編譯得到的ko載入時也會出錯。
[cpp]view plain
copy
// module a (mod_a.c)
#include
#include
#include
static
int func1(void)
// export symbol func1
export_symbol(func1);
static
int __init hello_init(void)
static
void __exit hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
[cpp]view plain
copy
// module b (mod_b.c)
#include
#include
#include
static
int func2(void)
static
int __init hello_init(void)
static
void __exit hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
巨集EXPORT SYMBOL在核心中的作用
module執行在kernel space,不能直接呼叫應用程式庫,只能呼叫核心函式。export symbol的作用是把核心函式的符號匯出,也就是將函式的入口位址匯出。module在執行的時候會根據kernel中的符號表 exportsymbol的名字表 去找symbol 根據核心函式loadmo...
EXPORT SYMBOL的作用簡單介紹
linux驅動 中經常可以看到這個巨集定義,那麼這個巨集定義的作用是什麼呢?其實就是在這個巨集定義內的函式或者標籤對整個核心是公開其符號表,意思就是直接可以在核心了得其他模組直接呼叫,而不需要修改核心 乙個簡單的例子 module a modulea.c include include includ...
關於android核心從linux核心分支上除名
最近不單只是看android開發與測試相關知識,也在了解這之外相關的資訊.畢竟,自己的眼界不能太狹窄.今天我在逛乙個android論壇上時候看到乙個很老的帖子,轉了個關於android被從linux分支樹上移除的新聞.以為是假新聞來著,後面上網找了找,還真是搜尋出一堆結果,發現有些比較大的it 上也...