Dokumentacija DKMS

Izvor: HrOpenWiki
Inačica od 14:48, 27. siječnja 2010. koju je unio/unijela Grof (razgovor | doprinosi)

Skoči na: orijentacija, traži
DKMS

DKMS je skraćenica od Dynamic Kernel Module Support ili u prijevodu: Podrška za promjenljive kernel module. DKMS zapravo predstavlja svojevrsni podsustav za upravljanje izgradnjom modula koji ne pripadaju u postojeće kernel stablo (nisu dio standardnog, vanilla kernela).

Pomoću njega omogućena je automatska izgradnja i ugradnja takvih modula nakon svakog ažuriranja kernela npr. putem standardnog sustava za ažuriranje paketa. Dakle, ako ne želite nakon svakog ažuriranja kernela ručno izgrađivati i ugrađivati kernel module koji se nisu mogli ažurirati preko paketnog upravitelja, onda je DKMS jedino rješenje.

DKMS je razvijen od strane DELL-ovih Linux inženjera.

Uvod

Na ovim stranicama nalazi se postupak pripreme i izgradnja jednog takvog modula putem DKMS podsustava, te njegova automatska integracija u initrd.img sliku u sistemskom /boot direktoriju.

Izveden je primjer na cmd64x kernel modulu koji predstavlja pogonski program za IDE diskove na nekim starijim računalima.

Priprema

Izvorni kod modula postavljamo u standardni /usr/src direktorij u kojemu smo kreirali jedan poddirektorij sa imenom modula i verzijom.

# mkdir /usr/src/cmd64x-0.1
# cd /usr/src/cmd64x-0.1

Također je potrebno na računalo instalirati DKMS paket preko paketnog upravitelja distribucije (ulavnom se on svuda zove dkms)

Modul iz primjera ima samo jednu izvornu datoteku koja se zove cmd64x.c. Dakle, smještamo je u /usr/src/cmd64x-0.1

Podešavanje

Sada je potrebno napraviti dvije datoteke:

  • Makefile sa ovim sadržajem:
obj-m := cmd64x.o
KVERSION = $(shell uname -r)
all:
       $(MAKE) -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
       $(MAKE) -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

u liniji obj-m:=, cmd64x.o zamjenite sa imenom vaše datoteke. Ako Makefile dođe sa paketom izvornog koda modula, onda ga ne treba mijenjati.

  • dkms.conf sa ovim sadržajem:
PACKAGE_NAME="cmd64x"
PACKAGE_VERSION="0.1"
DEST_MODULE_LOCATION[0]="/kernel/drivers/ata/"
MAKE[0]="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules"
CLEAN="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean"
BUILT_MODULE_NAME[0]="cmd64x"
POST_INSTALL="post-install-cmd64x.sh $kernelver"
POST_REMOVE="post-uninstall-cmd64x.sh $kernelver"
AUTOINSTALL="yes"

Kako je ova datoteka od velike važnosti za ispravnu izgradnju i rad modula unutar DKMS podsustava, malo detaljnije ćemo pogledati njezine linije:

  • PACKAGE_NAME= - ime paketa modula (posebno interesantno ako paketiramo u .deb i .rpm, te ako više modula ide pod jedan paket) kojeg izgrađujemo
  • PACKAGE_VERSION= - zadajemo internu verziju paketa
  • DEST_MODULE_LOCATION[0] - mjesto gdje će izgrađeni modul (.ko) biti postavljen. Broj u zagradi mora biti jednak broju iz linije BUILT_MODULE_NAME. Na Linux distribucijama Ubuntu, Fedora, OpenSuse i još nekima ova linija mora postojati u .conf datoteci, ali je DKMS zaobilazi i postavlja modul na, od strane distribucije određeno mjesto unutar /lib/modules/<kernel_version>