linux模組中使用其它模組匯出的符號

2021-05-24 03:20:38 字數 1598 閱讀 4548

步驟一:

在被依賴的模組b中匯出要用的符號,如:

int cat9555_state_get_inp(void)

export_symbol(cat9555_state_get_inp);

步驟二:

編譯模組b,當前目錄下生成module.symvers檔案,將其複製到模組a的目錄下。

開啟module.symvers可以看到他的內容如下:

0x3c1007e5 cat9555_add_opt_addr /home/project/meterread/gpio/gpio export_symbol

0x20473c2b cat9555_state_get_inp /home/project/meterread/gpio/gpio export_symbol

0x3cc81287 cat9555_del_opt_addr /home/project/meterread/gpio/gpio export_symbol

0x68be5229 cat9555_release_addr /home/project/meterread/gpio/gpio export_symbol

0x743cae4d cat9555_state_as_gpo /home/project/meterread/gpio/gpio export_symbol

0x9c89640e cat9555_state_as_gpi /home/project/meterread/gpio/gpio export_symbol

0x977f0740 cat9555_open_addr /home/project/meterread/gpio/gpio export_symbol

0xf9713bbb cat9555_state_get_outp /home/project/meterread/gpio/gpio export_symbol

0x28d7d46f cat9555_state_set_outp /home/project/meterread/gpio/gpio export_symbol

原來這是記錄匯出符號的檔案。

步驟三:

在模組a的檔案中引用匯出的符號。

extern cat9555_state_get_inp(void);      //宣告引用的符號是外部變數。

int f(){

cat9555_state_get_inp();                        //在這裡引用匯出的符號

編譯a模組。

我如果沒有步驟二的話,插入a模組時會出現以下錯誤(找不到符號 ):

gprsiodrv: no symbol version for cat9555_state_get_inp

gprsiodrv: unknown symbol cat9555_state_get_inp

gprsiodrv: no symbol version for cat9555_state_as_gpi

gprsiodrv: unknown symbol cat9555_state_as_gpi

insmod: cannot insert 'gprsiodrv.ko': unknown symbol in module

但是有人不用步驟二也可以,猜測與編譯器有關。

linux模組中使用其它模組匯出的符號

步驟一 在被依賴的模組b中匯出要用的符號,如 intcat9555 state get inp void export symbol cat9555 state get inp 步驟二 編譯模組b,當前目錄下生成module.symvers檔案,將其複製到模組a的目錄下。開啟module.symve...

nginx中使用perl模組

自 如果對於乙個絕大部分內容是靜態的 只有極少數的地方需要動態顯示,碰巧你又了解一點perl知識,那麼nginx perl的結合就能很好解決問題。要想nginx支援perl指令碼,在編譯nginx時候需要如下引數 configure with http perl module如果make時候出現如下...

python載入其它路徑模組

新建乙個mylib,py和loadlib.py。mylib.py的內容 class hello def sayhello self print hello python loadlib.py的內容 import mylib a mylib.hello a.sayhello 執行會自動呼叫mylib,...