我正在尝试在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]未定义!
答案 0 :(得分: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你的模块时,你看到的其他方法也是“未定义的”被定义为静态。