1. 程式人生 > 實用技巧 >01Linux驅動模組04-->匯出符號表

01Linux驅動模組04-->匯出符號表

四、匯出符號表

vim ./include/linux/export.h +50

在一個核心模組中呼叫另外一個核心模組中的函式,需要提供者將函式的符號表(地址)匯出,呼叫者直接使用這個地址即可

1、匯出符號表的意義:

1)可以解決核心程式碼冗餘的問題,同種問題,一次實現,多次呼叫。
2)可以減小驅動開發的難度,在編寫Linux核心驅動的時候,一些核心機制實現的過程,驅動工程師不需要太過關心,核心工程師將這些介面直接供給驅動工程師使用,從而減小開發的難度。

2、操作過程:

1)在第一個模組的函式實現後,使用匯出函式符號表的巨集(即:EXPORT_SYMBOL_GPL(func)巨集);

  如: 
  int add(int a,int b)
  {
        return (a+b);
  }
  EXPORT_SYMBOL_GPL(add);

2)編譯第一個模組,生成一個Module.symvers的檔案,檔案中記錄著add函式的地址

3)將這個Module.symvers檔案複製到第二個模組目錄下,

4)在第二個模組中使用函式前,先進行宣告,

  如:
  extern int add(int,int);
  int c = add(7,8);

5)正常編譯第二的模組,等待編譯通過,

6)模組載入時,先安裝第一個模組,在安裝第二個模組

7)模組移除時,先解除安裝第二個模組,在解除安裝第一個模組