尝试在 v6.5 中构建 nvme 驱动程序模块时出现:警告:缺少 Module.symvers。

尝试在 v6.5 中构建 nvme 驱动程序模块时出现:警告:缺少 Module.symvers。

我已经克隆了(v6.5)的源代码,并且正在尝试构建 nvme 驱动程序模块,我正在使用以下命令:

sudo make M=drivers/nvme

但它给了我以下错误:

MODPOST drivers/nvme/Module.symvers
WARNING: Module.symvers is missing.
     Modules may not have dependencies or modversions.
     You may get many unresolved symbol errors.
     You can set KBUILD_MODPOST_WARN=1 to turn errors into warning
     if you want to proceed at your own risk.
ERROR: modpost: "try_module_get" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "misc_deregister" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "__num_online_cpus" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "snprintf" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "class_destroy" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "scnprintf" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "kfree" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "fortify_panic" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "__fentry__" [drivers/nvme/host/nvme-fabrics.ko] undefined!
ERROR: modpost: "__x86_indirect_thunk_rax" [drivers/nvme/host/nvme-fabrics.ko] undefined!
WARNING: modpost: suppressed 927 unresolved symbol warnings because there were too many)
make[2]: *** [scripts/Makefile.modpost:144: drivers/nvme/Module.symvers] Error 1
make[1]: *** [/home/machineName/LinuxKernelCode/linux-6.5/Makefile:1984: modpost] Error 2
make: *** [Makefile:234: __sub-make] Error 2

如何解决这个问题?
我尝试安装标头,并在 .config 文件中启用了 NVM Express 块设备支持。

我的linux内核版本是:6.5.0-25-generic。

答案1

我建议使用 Ubuntu 软件包存储库中的内核源代码,而不是使用任意的 Git 签出。您可以通过以下方式安装源代码:

sudo apt-get install linux-source-6.1

这可确保您获得构建运行内核的源代码树。

提取来源:

unxz -k --stdout /usr/src/linux-source-6.1.tar.xz | tar x

如果您必须使用来自 Git 的源树,请确保使用基于相同主版本和次版本号的分支。

您必须使用 Ubuntu 的构建系统来构建源代码。/lib/modules/<kernel version>/build当您安装linux-headers软件包时,构建系统安装在以下位置:

sudo apt-get install linux-headers

这将安装构建系统/usr/src/linux-headers-<version>(参见示例包装内容

获得源代码后,您可以通过以下方式构建模块:

cd linux-source-6.1
MDIR="/lib/modules/$(uname -r)"
KDIR="${MDIR}/build"
make -C ${KDIR} M=$( pwd )/drivers/nvme/ INSERT_CONFIG_FLAGS_OF_THE-MODULE_HERE=m modules

INSERT_CONFIG_FLAGS_OF_THE-MODULE_HERE=m用空格分隔的内核配置变量列表(即)替换NVME_AUTH=m NVME_FC=m

这指示 make 执行构建工具树 ( -C) 中的 Makefile 并引用当前目录中的源。这些是通过 传递的M=$(pwd)/...INSERT_CONFIG_FLAGS_OF_THE-MODULE_HERE=m变量设置子模块的 Makefile 引用的构建变量,以构造要构建的目标文件列表。modules目标是构建系统的根 Makefile 执行的目标。

注意:显示的版本号仅作为示例。您必须插入您的内核版本。

相关内容