Linux内核驱动程序构建的未定义符号(NVidia)

时间:2014-02-04 23:30:17

标签: linux-kernel driver nvidia

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

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

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

1 个答案:

答案 0 :(得分:3)

基本的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