我有一個從a.ko(一個內核模塊)導出的函數foo()和foo1(),foo1()接受輸入參數,一個函數指針。 我從b.ko調用foo1(),並將foo()作爲輸入參數。EXPORT_SYMBOL | insmod中的未定義符號
我看到b.ko(未知符號foo)的insmod失敗,即使a.ko在b.ko之前已經被insmoded了。
任何解釋/解決方案?
謝謝, 幸運
我有一個從a.ko(一個內核模塊)導出的函數foo()和foo1(),foo1()接受輸入參數,一個函數指針。 我從b.ko調用foo1(),並將foo()作爲輸入參數。EXPORT_SYMBOL | insmod中的未定義符號
我看到b.ko(未知符號foo)的insmod失敗,即使a.ko在b.ko之前已經被insmoded了。
任何解釋/解決方案?
謝謝, 幸運
有兩種方法來解決這個問題,1)編譯都在相同的生成文件的內核模塊即的OBJ-M:= a.o b.o. 2)在內核模塊的Makefile中包含** KBUILD_EXTRA_SYMBOLS = <「內核模塊的Module.symvers的絕對路徑」,該模塊將使用導出的函數或變量。
KBUILD_EXTRA_SYMBOLS行的格式是什麼? Make告訴我「混合隱含規則和正常規則:不贊成使用的語法」 – jeremiah
@jeremiah,KBUILD_EXTRA_SYMBOLS是一個make變量,我猜這裏沒有格式。 GNU make引起「混合的隱式和普通規則:不贊成使用的語法」是因爲使用了更新的GNU make版本(4.0)。嘗試使用GNU make version(3.8.1)來編譯模塊。瀏覽鏈接http://blog.melski.net/2015/01/12/whats-new-in-gnu-make-4-1/ –
您是否在不同的目錄中構建模塊?構建b.ko時是否使用了.symvers文件?另請參閱:http://stackoverflow.com/questions/12311867/ – Eugene
最小工作示例:https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another-模塊/ 44614246#44614246 –