久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

專欄中心

EEPW首頁 > 專欄 > 關于EXPORT_SYMBOL的作用淺析

關于EXPORT_SYMBOL的作用淺析

發布人:電子禪石 時間:2020-12-11 來源:工程師 發布文章

在查看內核驅動代碼的時候會經常看到在一些函數后面總會跟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加載時也會出錯。

// Module A (mod_a.c)
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
 
static int func1(void)
{
       printk("In Func: %s...\n",__func__);
       return 0;
}
 
// Export symbol func1
EXPORT_SYMBOL(func1);
 
static int __init hello_init(void)
{
       printk("Module 1,Init!\n");
       return 0;
}
 
static void __exit hello_exit(void)
{
       printk("Module 1,Exit!\n");
}
 
module_init(hello_init);
module_exit(hello_exit);


// Module B (mod_b.c)
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
 
static int func2(void)
{
       extern int func1(void);
       func1();
       printk("In Func: %s...\n",__func__);
       return 0;
}
 
static int __init hello_init(void)
{
       printk("Module 2,Init!\n");
       func2();
       return 0;
}
 
static void __exit hello_exit(void)
{
       printk("Module 2,Exit!\n");
}
 
module_init(hello_init);
module_exit(hello_exit);


*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

關鍵詞:

相關推薦

基于onsemi NCP10672的隔離寬輸入輔助電源方案

「絕對對得起那四個字」 —— Mate 70系列發布第二代靈犀通信

2024-11-28

禮品豐厚,米爾將亮相2024瑞薩技術交流會議

優化簡易PCB電路板的大規模測試,提高生產效率

第三屆飛思卡爾智能車大賽華南賽區決賽

視頻 2010-02-01

3.5mm接口將被徹底放棄?

2024-11-28

華為鴻蒙智家全新亮相:AI 智慧重塑全屋智能

為何需要NPU?它是如何工作的

2024-11-28

開關電源的輸入電容的PCB設計技巧

μPD3575D CCD圖像傳感器的原理及應用

ZLGISP 下載編程器

x5045在單片機中的應用技巧

米爾出席openEuler Summit 2024,攜全志T536和RK3562核心模組亮相

第三屆全國大學生智能車大賽-全國季軍決賽視頻

視頻 2010-02-01

第三屆飛思卡爾智能車——白騎士(決賽)

視頻 2010-02-01

μC-OS-II在C8051F上的移植

μCOS-II在C8051F上的移植

第三屆全國大學生智能車大賽-全國冠軍決賽視頻

視頻 2010-02-01

Vishay推出采用eSMP系列SMF(DO-219AB)封裝的全新1A和2A Gen 7 1200V FRED Pt超快恢復整流器

第三屆飛思卡爾智能車——白騎士(預賽)

視頻 2010-02-01
更多 培訓課堂
更多 焦點
更多 視頻

技術專區