- DKMS全称是DynamicKernel ModuleSupport,动态内核模块支持。1996年,Oikawa等人提出的一种与LKM类似的动态核心模块技术
- DKMS是为了解决linux内核模块编译后,在不同的内核运行可能出现版本不一致的问题,比如主动升级的kernel版本,尤其是小版本;再比如把某个ko放到新的内核版本系统中
- 对于DKMS内核模块编译解决不同内核版本上使用ko,主要解决的一个场景是内核小版本升级后,内核模块ko可以正常使用。对于这种场景主要问题是内核模块编译的时候所使用的符号表地址可能变化造成异常,dkms原理是相当于一个管理模块,通过dkms.cfg进行配置指定编译和安装方式,在系统启动的时候系统会根据配置主动编译被管理的模块,从而让ko使用的地址这些都是match的。这种方式有点类似systemctl的管理模式提供的是一个统一的框架,具体编译还是要各个模块处理
- DKMs以文件的形式存储并能在系统运行过程中动态地加载和卸载
- 安装方式:sudo apt-install dkms
- dkms常用命令:
- dkms add -m qla2x00 -v v6.04.00
- dkms build -m qla2x00 -v v6.04.00 -k 2.4.20-8smp
- dkms install -m qla2x00 -v v6.04.00 -k 2.4.20-8smp
- dkms uninstall -m qla2x00 -v v6.04.00 -k 2.4.20-8smp
- dkms status
- dkms的配置方式
PACKAGE_NAME="@_PKGBASE@"
PACKAGE_VERSION="@PKGVER@"
MAKE[0]="make --uname_r=$kernelver"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="@_PKGBASE@"
DEST_MODULE_LOCATION[0]="/kernel/drivers/misc"
AUTOINSTALL="yes"
参考:
https://wiki.archlinuxcn.org/wiki/DKMS
https://www.linuxjournal.com/article/6896