2016-11-08 97 views
0

我正在嘗試在Linux中註冊TPM驅動程序。在編譯時,我可以得到.ko輸出文件,但是得到下面列出的錯誤。在我看來,這與我的機器上的linux頭文件有關,這可能會遺漏這些函數的定義。我將linux頭文件和內核升級到最新版本,但仍然遇到問題。編譯tpm驅動程序給出tpm_open()undefined

由於這些函數沒有被識別,所以modprobe失敗時會出現相同的錯誤(這些函數上的未知符號err0)。

建築模塊,階段2 建築用KERNELRELEASE = 4.4.0-45泛型 MODPOST 2個模塊 警告: 「tpm_open」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko]未定義! 警告:「tpm_read」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_remove_hardware」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_release」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_show_pubek」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_show_caps」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_write」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_register_hardware」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_store_cancel」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined! 警告:「tpm_show_pcrs」[/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] undefined!

回答

0

您正在針對內核4.4.0-45-generic進行構建。在我看來,諸如 tpm_open()和tpm_read()的方法只在比4.4早的內核的頭文件中聲明,並且它們在tpm.h頭文件中聲明的最後一個內核 是3.9: http://lxr.free-electrons.com/source/drivers/char/tpm/tpm.h?v=3.9

難道是你基於你的代碼建立在一個內核模塊上,該模塊的內核版本是< = 3.9?

在內核4.4中,您不會在tpm.h頭文件中找到這些方法。

tpm_open()被定義爲內核4.4中的靜態方法。

我相信,當你嘗試modprobe你的模塊時,你看到的「未定義」的其他方法被定義爲靜態。

+0

是的,你是絕對正確的。這意味着我將不得不更改驅動程序代碼以符合4.4版本。 – Bwani