背景

产生的报错如下:

ERROR: "set_pmem_node" [drivers/dax/kmem.ko] undefined!
scripts/Makefile.modpost:103: recipe for target 'modules-modpost' failed
make[1]: *** [modules-modpost] Error 1
Makefile:1301: recipe for target 'modules' failed
make: *** [modules] Error 2

libdaxctl: daxctl_insert_kmod_for_mode: dax1.0: a modalias lookup list was not created
error reconfiguring devices: No such device or address

从源码构建ndctl和daxctl以及傲腾AD模式用作内存的操作步骤 非常建议直接去这个原文看。

debug

把之前的namespace删除了

sudo ndctl destroy-namespace --force namespace1.0

开始之前应该删除旧的及其相关依赖吧

sudo apt-get --purge remove daxctl
sudo apt-get --purge remove ndctl

第一步先下载依赖:

sudo apt install -y git gcc g++ autoconf automake asciidoc asciidoctor bash-completion xmlto libtool pkg-config libglib2.0-0 libglib2.0-dev libfabric1 libfabric-dev doxygen graphviz pandoc libncurses5 libkmod2 libkmod-dev libudev-dev uuid-dev libjson-c-dev libkeyutils-dev libiniparser1 libiniparser-dev bc meson

进入到我的工作台

cd 

下载源码(注意根据内核版本选这个的版本)

wget https://github.com/pmem/ndctl/archive/refs/tags/v66.zip

解压

unzip .zip 

进入到源码文件夹

cd 

Build

meson setup build
meson compile -C build

安装

sudo meson install -C build

参考原文
https://docs.pmem.io/ndctl-user-guide/installing-ndctl/installing-ndctl-from-source-on-linux

注意

要注意编译内核时是选项选择:

< Y >: 模块驱动编译到内核中,启动时自动加载。也对应*号
< N >: 空格:表示该功能不编译到内核中,即新的内核将不支持该功能。 也对应_
< M >:模块会被编译,但是不会被编译到内核中,只是生成.o文件,我们可以收集这些.o文件做到linux的文件系统中,然后用insmod实现动态加载。

如果出现这个报错

如果按照这个链接的开头检查过内核和系统版本上的支持没问题,那么多半就是内核编译时有选项没有开启了。

xconfig的点和勾对应menuconfig的M和Y。

xconfig里的搜索功能,通过经验发现,好像是输入的不能有符号和空格,要不然查不到;被查的可有空格,但凡出现符号之后的字符都查不到。


文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录