Linux 内核驱动程序构建 (NVidia) 的未定义符号
Posted
技术标签:
【中文标题】Linux 内核驱动程序构建 (NVidia) 的未定义符号【英文标题】:Undefined symbols with Linux kernel driver build (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”[/基本的 GPUDirect RDMA 文档是 here。 如section 4.3所示,构建nvidia驱动linux内核模块需要各种驱动头文件和makefile。
可以通过以下方式访问这些文件:
-
获取适当的 NVIDIA linux 驱动程序安装程序(.run 文件),例如 319.72 here
所有 nvidia linux 驱动程序安装程序都有命令行开关选项。基本选项可以通过将--help
附加到驱动安装程序命令字符串中找到,例如:
sh NVIDIA-Linux-x86_64-319.72.run --help
可以通过以下方式访问更多高级选项:
sh NVIDIA-Linux-x86_64-319.72.run --advanced-options
其中一个高级选项是-x
,它只会提取驱动程序文件,不会“安装”任何文件:
sh NVIDIA-Linux-x86_64-319.72.run -x
这将创建一个文件可用的目录。在此目录中,kernel
目录包含必要的头文件和示例内核模块makefile
,可用于学习要链接的适当库:
cd NVIDIA-Linux-x86_64-319.72/kernel
【讨论】:
以上是关于Linux 内核驱动程序构建 (NVidia) 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章
fedora 下 安装 nvidia驱动,总是出错,最后的错误是 unable to load the kernel module 'nvidia.ko'