DKMS

DKMS (Dynamic Kernel Module Support) Linux çekirdeği için dinamik sürücü desteği sağlayan bir sistemdir. Linux çekirdeğine yerleşik olan modüller dışında kalan, yani çekirdek üzerinde doğrudan derlenmeyen sürücülerin yönetimini sağlar.

Kullanımı

Örneğin /mnt/test dizininde örnek bir kernel modülü olsun.

Bir dkms paketini eklemek için:

# modül dizinimizi /usr/src içine kopyalayalım
cp /mnt/test /usr/src/test
# modülü ekleyelim:
dkms add /usr/src/test

Eklediğimiz modülleri listelemek için:

dkms status

Eklediğimiz modülü derlemek için:

# derlemek istediğimiz modülün adı ve sürümünü gereklidir.
# Mevcut modüller /var/lib/dkms/ içerisinde bulunur.
# Bu örnekte test 1.0 olduğunu var sayalım.
dkms build -m test -v 1.0

derlediğimiz modülü yüklemek için:

# zaten var olan bir modülse --force kullanarak üzerine yazabilirsiniz.
dkms install -m test -v 0.1 --force

Kurulan modülü yüklemek için:

# öncelikle modül bağımlılık ağacını güncelleyelim.
depmod -a
# modülü yükleyelim
modprobe test

Çekirdek güncellendiğinde modülleri otomatik olarak derkelem için:

# Bu komutu paket sisteminiz otomatik olarak çalıştırıyor olabilir.
dkms autoinstall

Modülü kaldırmak için:

# önce modülü kapatalım
modprobe -r test
# modülü silelim
dkms remove -m test -v 0.1

dkms paketi hazırlama

Aşağıdaki gibi bir örnek kernel modülümüz olsun:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");

MODULE_DESCRIPTION("Example Module");
MODULE_VERSION("0.1");

static int __init test_start(void) {
    printk(KERN_INFO "Hello world\n");
    return 0;
}

static void __exit test_end(void) {
    printk(KERN_INFO "Goodbye\n");
}

module_init(test_start);
module_exit(test_end);

Bu modülü derlemek için aşağıdaki Makefile dosyası kullanılır:

obj-m = test.o
KERNELVER := $(shell uname -r)
all:
        make -C /lib/modules/$(KERNELVER)/build/ M=$(PWD) modules
clean:
        make -C /lib/modules/$(KERNELVER)/build M=$(PWD) clean

Şimdi bu kernel modülüne aşağıdaki gibi dkms.conf dosyası oluşturabiliriz:

PACKAGE_NAME="test"
PACKAGE_VERSION="0.1"
CLEAN="make clean"
MAKE[0]="make all KERNELVER=$kernelver"
BUILT_MODULE_NAME[0]="test"
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"

Örnek projemizin yapısı aşağıdaki gibidir:

test-0.1
├── Makefile
├── dkms.conf
└── test.c