【问题标题】:Compiling a tpm driver gives tpm_open() undefined编译 tpm 驱动程序会导致 tpm_open() 未定义
【发布时间】:2016-11-08 03:20:57
【问题描述】:

我正在尝试在 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] 未定义!

【问题讨论】:

    标签: c linux linux-device-driver tpm


    【解决方案1】:

    您正在构建内核 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

    您的代码是否基于内核模块,而该内核模块是针对版本为

    在内核 4.4 中,您不会在 tpm.h 头文件中找到这些方法。

    tpm_open() 在内核 4.4 中被定义为静态方法。

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

    【讨论】:

    • 是的,你完全正确。这意味着我必须更改驱动程序代码以符合 4.4 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多