我正在尝试在Linux中注册TPM驱动程序。在编译时,我能够得到.ko输出文件,但得到下面列出的错误。在我看来,这与我的机器上的linux头文件有关,可能缺少这些函数的定义。我将linux头文件和内核都升级到最新版本,但仍然遇到问题。
由于这些函数没有被识别,所以modprobe失败并出现相同的错误(这些函数上的未知符号err0)。
构建模块,阶段2。使用KERNELRELEASE = 4.4.0-45-generic构建MODPOST 2模块警告:"tpm_open" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. conf]ko)定义!警告:"tpm_read" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_remove_hardware" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. info]ko)定义!警告:"tpm_release" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_show_pubek" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_show_caps" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_write" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_register_hardware" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. info]ko)定义!警告:"tpm_store_cancel" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!警告:"tpm_show_pcrs" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2. txt]ko)定义!
您正在构建内核4.4.0-45-generic。在我看来,方法就像Tpm_open()和tpm_read()仅在4.4以前的内核中在头文件中声明,最后一个内核其中,它们在pm.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你的模块时,你看到的其他方法也被定义为"未定义"。