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

2021-08-25 15:40:49 字數 1541 閱讀 4802

步驟一:

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

intcat9555_state_get_inp(void)

export_symbol(cat9555_state_get_inp);

步驟二:

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

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

0x3c1007e5cat9555_add_opt_addr/home/project/meterread/gpio/gpioexport_symbol

0x20473c2bcat9555_state_get_inp/home/project/meterread/gpio/gpioexport_symbol

0x3cc81287cat9555_del_opt_addr/home/project/meterread/gpio/gpioexport_symbol

0x68be5229cat9555_release_addr/home/project/meterread/gpio/gpioexport_symbol

0x743cae4dcat9555_state_as_gpo/home/project/meterread/gpio/gpioexport_symbol

0x9c89640ecat9555_state_as_gpi/home/project/meterread/gpio/gpioexport_symbol

0x977f0740cat9555_open_addr/home/project/meterread/gpio/gpioexport_symbol

0xf9713bbbcat9555_state_get_outp/home/project/meterread/gpio/gpioexport_symbol

0x28d7d46fcat9555_state_set_outp/home/project/meterread/gpio/gpioexport_symbol

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

步驟三:

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

externcat9555_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中匯出要用的符號,如 int cat9555 state get inp void export symbol cat9555 state get inp 步驟二 編譯模組b,當前目錄下生成module.symvers檔案,將其複製到模組a的目錄下。開啟module.symv...

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,...