0

我正在尝试在 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

1 回答 1

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 中被定义为静态方法。

我相信,当您尝试修改模块时,您看到的“未定义”的其他方法也被定义为静态的。

于 2016-11-10T23:01:07.980 回答