编译 tpm 驱动程序给出 tpm_open() undefined

标签 c linux linux-device-driver tpm

我正在尝试在 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.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 时,您看到的其他“未定义”方法也被定义为静态的。

关于编译 tpm 驱动程序给出 tpm_open() undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478387/

相关文章:

c++ - 如何使用 char 数组索引的排列作为运算符?

c - 添加到同一地址的链表节点

c++ - 如何正确报告 Linux 中另一个进程的突然结束?

linux - 错误 : Device or resourse is busy

linux - arm-eabi arm-gnueabi 和 gnueabi-hf 编译器之间的区别

linux - 在没有 O_SYNC 的情况下使用 O_DIRECT 是否安全?

c - Visual Studio 中 OpenCv Unresolved external symbol 错误

linux - Vim 增量搜索

c++ - 如何在Linux中的C++中查找函数属于哪个库

除了 C 的标准库中的键盘,您能否从设备获取输入?