【问题标题】:Undefined symbols with Linux kernel driver build (NVidia)Linux 内核驱动程序构建 (NVidia) 的未定义符号
【发布时间】:2014-03-01 04:55:38
【问题描述】:

我的内核驱动程序构建有问题。我正在构建一个自定义(尽管非常基本)NVidia RDMA 驱动程序,并且在生成文件期间收到构建警告。具体来说,它正在寻找两个 NVidia API 调用 nvidia_p2p_put_pages 和 nvidia_p2p_get_pages。使用“nm”可以看到这些入口点位于 NVidia 驱动程序模块 (nvidia.ko) 中。但是,我对 Linux 驱动程序 make 文件系统的内部结构不够熟悉,无法在构建时定位这些入口点。

RDMA 工具包文档引用了一个提取脚本“./NVIDIA-Linux-x86_64-.run”和一个构建目录。但是,在提取最新的驱动程序源后,我无法找到任何构建文件。

如您所知,我对此很陌生。任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 根据documentation,这些符号可以在nv-p2p.h头文件中找到。你包括那个头文件吗?听起来您想知道要链接哪些库,但是如果您提供您看到的 实际错误输出,这个问题的清晰度可能会得到改善。您还可以提及您使用的驱动程序版本以及安装程序(.run 文件)的位置。
  • 下载nvidia驱动运行文件安装程序,如319.72。使用sh NVIDIA-L... --advanced-options 获取命令行选项使用sh NVIDIA-L... -x 运行仅提取作业然后切换到创建的目录。你会看到一堆 nvidia 库。然后切换到kernel目录,可以看到nv-p2p.h等头文件。您还会发现一个整体的makefile 和一个Makefile.nvidia,它显示了如何构建内核模块。
  • 这就是我要找的。警告似乎是链接问题的移动:警告:“nvidia_p2p_put_pages”[//kernel_module/gpudirect_rdma.ko] 未定义!警告:“nvidia_p2p_get_pages”[//kernel_module/gpudirect_rdma.ko] 未定义!你的第二套指令似乎是我需要的。我很快就会试一试。谢谢。
  • 成功了,罗伯特。谢谢!

标签: linux-kernel driver nvidia


【解决方案1】:

基本的 GPUDirect RDMA 文档是 here。 如section 4.3所示,构建nvidia驱动linux内核模块需要各种驱动头文件和makefile。

可以通过以下方式访问这些文件:

  1. 获取适当的 NVIDIA linux 驱动程序安装程序(.run 文件),例如 319.72 here
  2. 所有 nvidia linux 驱动程序安装程序都有命令行开关选项。基本选项可以通过将--help附加到驱动安装程序命令字符串中找到,例如:

    sh NVIDIA-Linux-x86_64-319.72.run --help
    

    可以通过以下方式访问更多高级选项:

    sh NVIDIA-Linux-x86_64-319.72.run --advanced-options
    
  3. 其中一个高级选项是-x,它只会提取驱动程序文件,不会“安装”任何文件:

    sh NVIDIA-Linux-x86_64-319.72.run -x
    
  4. 这将创建一个文件可用的目录。在此目录中,kernel 目录包含必要的头文件和示例内核模块makefile,可用于学习要链接的适当库:

    cd NVIDIA-Linux-x86_64-319.72/kernel
    

【讨论】:

    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2014-02-05
    • 2015-12-31
    • 2020-12-03
    • 2022-06-25
    • 1970-01-01
    相关资源
    最近更新 更多