Razlika između inačica stranice Dokumentacija DKMS

Izvor: HrOpenWiki
Skoči na: orijentacija, traži
(Podešavanje)
(Podešavanje)
Redak 43: Redak 43:
 
  AUTOINSTALL="yes"
 
  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:
 
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_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
+
*''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>
+
*''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> stabla.
 +
*''MAKE[0]='' i ''CLEAN='' ostavite kao u primjeru
 +
*''BUILT_MODULE_NAME[0]='' ime modula koji se izgrađuje. Ako ih ima više onda svaki mora biti naveden, s time da se broj u zagradi povećava za n+1. Sukladno ovome treba napraviti isti broj linija sa ''DEST_MODULE_LOCATION''
 +
*''POST_INSTALL='' Ako je potrebno izvršiti dodatnu skriptu nakon instalacije modula onda njezino ime navedemo ovdje
 +
*''POST_REMOVE='' Ako je potrebno izvršiti dodatnu skriptu nakon micanja modula onda njezino ime navedemo ovdje
 +
*''AUTOINSTALL='' Ako želimo da se modul automatski izgrađuje i instalira nakon ažuriranja kernela onda postavljamo ovaj parametar na "yes".

Inačica od 14:57, 27. siječnja 2010.

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> stabla.
  • MAKE[0]= i CLEAN= ostavite kao u primjeru
  • BUILT_MODULE_NAME[0]= ime modula koji se izgrađuje. Ako ih ima više onda svaki mora biti naveden, s time da se broj u zagradi povećava za n+1. Sukladno ovome treba napraviti isti broj linija sa DEST_MODULE_LOCATION
  • POST_INSTALL= Ako je potrebno izvršiti dodatnu skriptu nakon instalacije modula onda njezino ime navedemo ovdje
  • POST_REMOVE= Ako je potrebno izvršiti dodatnu skriptu nakon micanja modula onda njezino ime navedemo ovdje
  • AUTOINSTALL= Ako želimo da se modul automatski izgrađuje i instalira nakon ažuriranja kernela onda postavljamo ovaj parametar na "yes".