步驟一:
在被依賴的模組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,...