DKMS 框架可以让我们在升级内核时自动将内核模块重新构建到当前内核中。硬件厂商通常将其硬件的设备驱动作为 DKMS 包分发,以便用户可以在升级到较新的内核时自动更新已安装的驱动程序。
在 Linux 上安装 DKMS
各主流 Linux 发行版都支持 DKMS,这里以 RH 系为例。
$ sudo dnf install dkms
使用 DKMS 自动构建内核模块
这里使用 ixgbe 网卡驱动作为示例,首先下载并安装驱动程序的源代码。
$ wget http://tenet.dl.sourceforge.net/project/e1000/ixgbe%20stable/4.3.15/ixgbe-4.3.15.tar.gz
$ sudo tar -xf ixgbe-4.3.15.tar.gz -C /usr/local/src
$ sudo mv /usr/local/src/ixgbe-4.3.15/src /usr/src/ixgbe-4.3.15
创建 dkms.conf 配置文件,配置如下:
$ cat /usr/src/ixgbe-4.3.15/dkms.conf
PACKAGE_NAME="ixgbe"
PACKAGE_VERSION="4.3.15"
BUILT_MODULE_NAME[0]="ixgbe"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/intel/ixgbe/"
AUTOINSTALL="yes"
通过 dkms 命令将模块添加到内核树:
$ sudo dkms add -m ixgbe -v 4.3.15
或者
$ sudo dkms add ixgbe/4.3.15
$ sudo dkms add ixgbe/4.3.15
Creating symlink /var/lib/dkms/ixgbe/4.3.15/source ->
/usr/src/ixgbe-4.3.15
DKMS: add completed.
$
针对当前运行的内核编译指定的模块
$ sudo dkms build -m ixgbe -v 4.3.15
或者
$ sudo dkms build ixgbe/4.3.15
$ sudo dkms build ixgbe/4.3.15
Kernel preparation unecesary for this kernel. Skipping...
Building module:
cleaning build area...
make KERNELRELEASE=3.10.0-229.el7.x86_64 -C /lib/modules/3.10.0-229.el7.x86_64/build M=/var/lib/dkms/ixgbe/4.3.15/build........
cleaning build area...
DKMS: build completed.
$
最后在当前内核树下安装模块
$ sudo dkms install -m ixgbe -v 4.3.15
或者
$ sudo dkms install ixgbe/4.3.15
$ sudo dkms install ixgbe/4.3.15
ixgbe:
Running module version sanity check.
- Original module
- Found /lib/modules/3.10.0-229.el7.x86_64/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
- Storing in /var/lib/dkms/ixgbe/original_module/3.10.0-229.el7.x86_64/x86_64/
- Archiving for uninstallation purposes
- Installation
- Installing to /lib/modules/3.10.0-229.el7.x86_64/extra
Adding any weak-modules
depmod...
DKMS: install conmpleted
$
内核模块安装成功。可以使用以下命令检查内核模块的状态:
$ dkms status | grep ixgbe
ixgbe, 4.3.15, 3.10.0-229.el7.x86_64: installed (original_module exists)
$
内核升级的内核模块自动编译
为 ixgbe 驱动程序配置 DKMS 后,让我们看看升级到新内核时已安装的驱动程序会发生什么事情。升级内核:
$ sudo yum -yinstall kernel kernel-devel
重启到新内核后,检查 ixgbe 驱动模块信息
$ modinfo ixgbe
filename: /lib/modules/3.10.0-327.13.1.el7.x86_64/extra/ixgbe.ko
version: 4.3.15
license: GPL
...
总结
对于生产环境来说,基本上不会使用 DKMS,对于个人电脑还是可以简化不少系统升级工作。
本文暂时没有评论,来添加一个吧(●'◡'●)