我已经克隆了(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 执行的目标。
注意:显示的版本号仅作为示例。您必须插入您的内核版本。