在 Ubuntu 上使用 DKMS 构建内核模块
本文介绍 DKMS 的使用与手动内核模块构建步骤,并提供具体命令。DKMS 会在内核更新时自动重建已注册的模块。
1 安装 DKMS 与内核头
Section titled “1 安装 DKMS 与内核头”sudo apt updatesudo apt install -y dkms build-essential linux-headers-$(uname -r)确保头文件与 uname -r 输出一致。
2 简单手动构建(测试用)
Section titled “2 简单手动构建(测试用)”在 ~/projects/hellomodule/ 中创建最小模块:
hellomodule.c:
#include <linux/module.h>#include <linux/kernel.h>static int __init hello_init(void){ printk(KERN_INFO "hello loaded\n"); return 0; }static void __exit hello_exit(void){ printk(KERN_INFO "hello unloaded\n"); }module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");Makefile:
obj-m += hellomodule.oall: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean构建并加载:
makesudo insmod hellomodule.kodmesg | tailsudo rmmod hellomodule3 DKMS 工作流(打包模块)
Section titled “3 DKMS 工作流(打包模块)”在 /usr/src/yourmod-1.0/ 放置源代码并创建 dkms.conf,最小示例:
PACKAGE_NAME="yourmod"PACKAGE_VERSION="1.0"BUILT_MODULE_NAME[0]="yourmod"DEST_MODULE_LOCATION[0]="/kernel/drivers/misc"AUTOINSTALL="yes"注册并使用 DKMS 构建:
sudo dkms add -m yourmod -v 1.0sudo dkms build -m yourmod -v 1.0sudo dkms install -m yourmod -v 1.0DKMS 会在 /var/lib/dkms/yourmod/1.0/ 存储构建结果,并在内核更新时自动重建。
卸载:
sudo dkms remove -m yourmod -v 1.0 --all4 DKMS 构建排错
Section titled “4 DKMS 构建排错”- 查看构建日志:
/var/lib/dkms/<module>/<version>/build/make.log。 - 确保已安装匹配的
linux-headers-$(uname -r)。 - 若内核升级后 DKMS 构建失败,手动运行
dkms build查看错误,并修复缺失符号或 API 变更。 - 使用
dkms status列出已安装模块及其状态。