Kernel module (Bosanski)

From ArchWiki

Kernel moduli su dio koda koji može se loadati i unloadati iz kernela na zahtjev. Oni produžuju funkcionalnost kernela bez rebootanja sistema.

Da kreirate kernel module, možete pročitati The Linux Kernel Module Programming Guide. Module može biti konfigurisan kao built-in ili loadable. Da dinamično učitate ili uklonite modul, mora biti konfigurisan kao loadable modul u kernel konfiguraciji (linija povezana sa modulom će pokazati slovo M).

Dohvaćanja informacija

Moduli su smješteni u /usr/lib/modules/kernel_release. Možete koristiti uname -r da vidite svoju trenutnu kernel verziju.

Note: Imena modula često imaju _ ili -; ovi simboli se mogu smjenjivati kada se koristi modprobe komanda i u konfiguracijskom fajlu u /etc/modprobe.d/.

Da vidite trenutno loadane module u kernel:

$ lsmod

Da vidite informacije u modulu:

$ modinfo module_name

Da vidite listu opcija za modul:

$ systool -v -m module_name

Da izlistate veliku konfiguraciju svih modula:

$ modprobe -c | less

Da prikažete konfiguraciju određenog modula::

$ modprobe -c | grep module_name

Izlistajte dependency-e modula (ili aliasa), uključujući i sami modul:

$ modprobe --show-depends module_name

Automatsko loadanje module sa systemd

Danas, svo potrebno loadanje module automatski radi udev, tako da ukoliko ne koristite out-of-tree kernel modul, nema potrebe da stavljate module koji će se bootati u bootu u konfiguracijski fajl. Ipak, postoje slučajevu gdje možda želite loadati dodatni modul tokom boot procesa ili blacklistati drugi za ispravno funkcionisanje računara.

Kernel moduli se mogu eksplicitino izlistati u fajlovima pod /etc/modules-load.d/ za systemd da ih loada tokom boot-a. Svaki konfiguracijski fajl ja imenovan kao /etc/modules-load.d/<program>.conf. Konfiguracijski fajlovi jednostavno sadrže listu kernel modula koji će se loadati, odvojeni novom linijom. Prazne linije i linije čiji prvo non-whitespace karakter je # ili ; su ignorisane.

/etc/modules-load.d/virtio-net.conf
# Load virtio_net.ko tokom boota
virtio_net

Vidi modules-load.d(5) za više detalja.

Manuelno održavanje modula

Upravljanje kernel modulima vrši se sa alatima iz kmod paketa. Možete manuelno koristiti ove alate.

Note: Ake ste upgrade kernel, ali niste još uvijek rebootali sistem, modprobe će failati bez error poruke i sa exit kodom 1 jer putanja /usr/lib/modules/$(uname -r) više ne psotoji. Provjerite manuelno da li putanja postoji kada modprobe faila da vidite da li je to slučaj.

Da loadate module:

# modprobe ime_modula

Da loadate modul na osnovu imena (oni koji nisu instalirani u /usr/lib/modules/$(uname -r)/):

# insmod naziv_fajla [argumenti]

Da unloadate modul:

# modprobe -r module_name

Ili:

# rmmod module_name

Podešavanje opcija modula

Da proslijedite parametar kernel modulu, možete ih proslijediti manuelno sa modprobe ili osigurati da određeni parametri su uvijek primijenjeni korištenjem modprobe konfiguracijskog fajla ili koristeći kernel command line.

Manauelno prilikom loadanja sa modprobe

Osnovni način prosljeđivanja parametara modulu je korištenjem modprobe komadne. Parametri su navedeni na command line koristeći jednostavne ključ=vrijednost dodjele:

# modprobe ime_module ime_parametra=vrijednost_parametra

Koristeći fajlove u /etc/modprobe.d/

Fajlovi u /etc/modprobe.d/ folderu mogu biti korišteni da se postave podešavanja za modul za udev, koji će koristiti modprobe da upravlja loadanjem module tokom bootanja. Konfiguracijski fajlovi u ovom folderu mogu imati bilo kakvo ime, ali moraju završavati sa .conf ekstenzijom. Sintaksa je:

/etc/modprobe.d/myfilename.conf
options module_name parameter_name=parameter_value

Npr:

/etc/modprobe.d/thinkfan.conf
# Na ThinkPadima, ovo omogućava 'thinkfan' daemon da kontroliše brzinu ventilatora
options thinkpad_acpi fan_control=1
Note: Ukoliko je bilo koji od zahvaćenih modula učitan iz initramfs-a, onda se mora dodati odgovarajući {{ic}.conf}} u FILES u mkinitcpio.conf ili koristiti modconf hook tako da bude uključen u initramfs. Da vidite sadržaj initramfs-a, koristite lsinitcpio /boot/initramfs-linux.img.

Koristeći kernel command line

Ukoliko je modul buildan u kernel, možete proslijediti opcije modulu koristeći kernel comamnd line. Za sve česte bootloadere, sljedeća sintaksa je tačna:

ime_modula.ime_parametra=vrijednost_parametra

Npr:

thinkpad_acpi.fan_control=1

Jednostavno dodate ovo u bootloader kernel liniju, ako što je opisano u Kernel parametrima.

Podešavanja aliasa

Aliasi su alternativna imena za module. Npr: alias my-mod dugi_naziv_modula znači da možete koristiti modprobe my-mod umjesto modprobe dugi_naziv_modula. Možete također koristiti shell-like wildcarde, tako da alias my-mod* dugi_naziv_modula znači da modprobe my-mod-something ima isti efekat. Kreiranje aliasa:

/etc/modprobe.d/mojalias.conf
alias mymod dugi_naziv_modula

Neki moduli imaju aliase koji su korišteni automatski da se loadaju kada ih aplikacija treba. Isključivanje ovih aliasa može spriječiti automatsko loadanje, ali će i dalje dozvoljati manuelno loadanje modula.

/etc/modprobe.d/modprobe.conf
# Spriječi Bluetooth autoload
alias net-pf-31 off

Blacklistanje

Blacklistanje, u kontekstu kernel modula, je mehanizam spriječavanja kernel modula da se automatski loadaju. Ovo može biti korisno ako npr. asocirani hardware nije potreban ili ako loadanje tog modula izaziva probleme: npr mogu biti dva kernel modula koja pokušavaju da kontrolišu isti dio hardware-a i loadanje oba može prouzrokovati konflikt.

Neki module su loadani kao dio initramfs-a. mkinitcpio -M će ispisati sve automatski detektovane module: da spriječite initramfs da ne loada automatski neke od tih, blacklistajte ih u .conf fajlu unutar /etc/modprobe.d i bit će dodano tokom modconf hookanja tokom generisanja image-a. Pokretanjem mkinitcpio -v će izlistati sve pullane module za različitim hookovima (npr. filesystems hook, block hook itd.). Zapamtite da dodate .conf fajl u FILES niz u /etc/mkinitcpio.conf ako nemate modconf hook u vašem HOOKS nizu (npr. odudarate od defaultne konfiguracije), i nakon što ste blacklistali module, regenerišite initramfs i rebootajte iza toga.

Korištenje fajlova u /etc/modprobe.d/

Kreirajte .conf fajl unutar /etc/modprobe.d/ i dodajte liniju za svaki modul koji želite blacklistati koristeći blacklist ključnu riječ. Ako npr. želite spriječiti pcspkr module da se loada:

/etc/modprobe.d/nobeep.conf
# Ne loadaj 'pcspkr' modul tokom boota.
blacklist pcspkr
Note: blacklist komanda će blacklistati modul da se automatski loada, ali modul se može loadati od strane drugog neblacklistanog module ako taj module osivi o tom modul ili ako se loada automatski.

Ipak, postoji workaround za ovo ponašanja; install komanda govori modprobe da pokrene custom komandu umjesto loadanja modula u kernel uobičajeno, tako da možete forsirati da modul uvijek faila sa:

/etc/modprobe.d/blacklist.conf
...
install ime_modula /bin/true
...
Ovo će efikasno blacklistati taj modul i bilo koji drugi koji ovisi o njemu.

Korištenje kernel command line

Tip: Ovo može biti korisno ukoliko broken modul onemogućava bootanje sistema.

Mozete također blacklistati module iz bootloadera.

Jednostavno dodajte module_blacklist=modname1,modname2,modname3 u kernel line bootloadera, kao što je opisano u Kernel parametrima.

Note: Kada blacklistati više od jednog modula, uzmite u obzir da se razdvajaju zarezom. Razmak ili bilo koji drugi sistem može breakati sintaksu.

Troubleshooting

Moduli se ne loadaju

U slučaju kada se određeni moduli ne loada i boot log (dostupan sa journalctl -b) kaže da je modul blacklista, ali ne postoji entry unutar /etc/modprobe.d, provjerite drugi modprobe source folder na /usr/lib/modprobe.d za blacklistane module.

Modul se neće loadati ukoliko "vermagic" string unutar kernel modula se ne poklapa sa vrijednošću trenutnog kernela na vašem sistemu. Ukoliko je poznato da je modul kompatibilan sa trenutnim kernel, "vermagic" provjera se može ignorisati sa modprobe --force-vermagic.

Warning: Ignorisanje provjere verzije za kernel modul može prouzrokovati da se kernel crasha ili da sistem ima nedefinisano ponašanje zbog nekompatibilnosti. Koristite --force-vermagic sa maksimalnom dozom opreza.

Vidi i