Linux内核开发-将内核模块通过DKMS的方式来管理和编译

0.前言

之前已经编写了一个简单的内核模块,通过之前在源码目录下make/make install完成了编译和安装动作。

实际内核开发中,会存在各种各样的驱动需要维护和管理(主要是针对操作系统厂商而言),如果将第三方驱动全放在内核源码树中(一般流程是驱动厂商向操作系统厂商发起合入请求,操作系统厂商进行改造适配),可能导致内核源码越来越臃肿,操作系统厂商会投入太多的人力在这种重复性的工作上。

通过DKMS的方式,将第三方驱动的维护任务交还给驱动厂商,操作系统厂商只负责整个包管理,可以极大得减少适配的工作量。

下面以之前写过的简单内核模块为例,总结一下如何改造成通过DKMS来管理。

1. 源码

基础源码还是使用之前的一个简单内核模块作为示范:
Linux内核开发-编写一个proc文件
源码github链接
源码gitee链接
后续都在gitee开发了,github在公司不稳定也不太敢进行各种魔法操作

2. 步骤

无需修改源码,只需要在根目录下添加一个文件dkms.conf,内容如下:

//kernel_module/dkms.conf
PACKAGE_NAME="kernel_module"
PACKAGE_VERSION="1.0" # 这个版本号应当匹配源码版本
MAKE[0]="make"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="km" # makefile中的模块名
DEST_MODULE_LOCATION[0]="/updates" # ko产物install位置
AUTOINSTALL="yes"
  1. 将源码拷贝到/usr/src/目录下:
sudo cp -r ../kernel_module /usr/src/kernel_module-1.0 # 这里的xxx-1.0这个xxx就是上面的PACKAGE_NAME和PACKAGE_VERSION

将源码拷贝到/usr/src/目录下

  1. 在dkms中加入本模块:
sudo dkms add -m kernel_module -v 1.0

在dkms中加入本模块

  1. 通过dkms编译:
sudo dkms build -m kernel_module -v 1.0

通过dkms编译

  1. 安装
sudo dkms install -m kernel_module -v 1.0

在这里插入图片描述
可以看到module.dep已更新:
在这里插入图片描述

  1. 后面就可以加载模块了
sudo insmod /lib/modules/5.10.0-15-generic/updates/km.ko

在这里插入图片描述

  1. 移除dkms包
sudo dkms remove -m kernel_module -v 1.0 --all

移除dkms包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值