编译 tpm driver 给出 tpm_open() undefined

Compiling a tpm driver gives tpm_open() undefined

我正在尝试在 Linux 中注册 TPM driver。编译时,我能够获取 .ko 输出文件,但出现下面列出的错误。在我看来,这与我机器上的 linux headers 有关,它可能缺少这些函数的定义。我将 linux headers 和内核都升级到了最新版本,但问题仍然存在。

由于未识别这些函数,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.ko] 未定义! 警告:"tpm_read" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_remove_hardware" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_release" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_show_pubek" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_show_caps" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_write" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_register_hardware" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_store_cancel" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义! 警告:"tpm_show_pcrs" [/home/burwani/Desktop/tpm_act2_driver_poc/tpm_act2_driver/tpm_act2.ko] 未定义!

您正在构建内核 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 时,您看到的其他方法 "undefined" 也被定义为静态的。