Driveri u linuxu

Diskusije o hardveru i driverima pod Linuxom.

Moderator/ica: Moderatori/ce

Odgovori
Avatar
jurastublic
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Spol: M
OS: Mint 10 LXDE itd...
Lokacija: i grupa Film

Driveri u linuxu

Post Postao/la jurastublic »

Driveri u linux sustavima

Pokušat ću ovdje dati neki svoj uvid u to kako funkcionira sustav drivera na prosječnom linuxu, jednostavno jer sam vidio da ima dosta komentara na forumu u kojima ljudi miješaju stvari koje inače ne bi miješali da imaju potpuniju sliku o tome. Nadam se da će mi oni koji primijete da tu nešto ne štima ukazati na pogreške ili na neku novu informaciju.

Daklem, računalo je sustav različitih hardverskih i softverskih dijelova, međusobno spojenih na milijun načina.
Hardverski je dio složen uglavnom tako da postoji nekoliko glavnih busova na matičnoj ploči, na koje se spajaju drugi uređaji ili drugi busovi (npr. USB bus se spaja na PCI bus). Busovi se sastoje od veznih linija (žica, bakrenih traka) i njihovih kontrolerskih čipova.
Većina uređaja ima neku vrstu kontrolera. I većina ih je, u stvari, više uređaja u jednom pakiranju (npr. web kamera ima kontroler za sliku i za zvuk, za usb vezu itd.)
Korisničke aplikacije u linuxu ne upravljaju kontrolerima tih uređaja direktno, nego koriste usluge drugih programa, napisanih za kontrolu svakog od tih uređaja posebno. Ti programi su driveri.
Random smiley: :cura

Gledano sa softverske točke, u linuxu je kernel, tj. jezgra operativnog sustava, odvojena zbog sigurnosnih i stabilnosnih razloga od korisničkih aplikacija i komunicira s korisničkim dijelom proslijeđivanjem parametara. Driveri su također dio kernela i koriste isti mehanizam. Istina, postoje i tzv. user space driveri, koji nisu dio kernela ali svejedno i oni imaju svog "jataka" u kernelu koji mapiranjem omogućuje pristup hardveru.
Driveri mogu biti ugrađeni u kernel a mogu se i naknadno učitavati u obliku modula.

Kernel svoju strukturu uređaja, drivera i hijerarhiju busova održava putem posebnog datotečnog sustava u folderu /sys iz kojega se u svakom trenutku može vidjeti trenutna struktura. U /sys se mogu i dodjeljivati novi parametri atributima drivera, naravno, oni za koje je to dozvoljeno. Driveri su u /sys predstavljeni u obliku foldera, atributi u obliku datoteka a veze između uređaja i njihovih drivera u obliku, tko bi rek'o, symlinkova (shortcuta). :)

Kako linux kernel uopće zna kada je neki uređaj priključen i kako onda dodjeljuje pravi driver svakom uređaju?

Kernel putem već ugrađenih drivera može kontrolirati busove i natjerati ih da sami sebe skeniraju i jave promjene.
Kad bus driver registrira novi uređaj, uzima podatke gdje se na busu nalazi i uzima tvornički kodirane podatke iz uređaja poput VendorID i ProductID te mu dodaje major i minor ID oznake.

Kernel na osnovu tih podataka napravi potrebne foldere i datoteke u /sys za taj uređaj.
Onda upiše te podatke u nekoliko globalnih varijabli sustava i pokrene hotplug korisničku skriptu ili najčešće, udev.
Udev onda koristi te podatke iz globalnih varijabli da doda odgovarajuće datoteke u /dev folder. Putem /dev datoteka korisnički programi koriste usluge uređaja. Udev može raditi i druge stvari poput pokretanja drugih programa i korisničkih skripti kad se određeni uređaj pojavi.
Udev također pokreće i program modprobe koji učita drivere za uređaj.

Kako modprobe učitava drivere?
Not so random smiley: :dosadno

Svaki driver ima u sebi popis ID-ova uređaja koje podržava. Program depmod, koji se pokreće pri podizanju sustava, očitava te popise iz svih drivera i stvara nekoliko datoteka u folderu /lib/modules/naziv_kernela. Te datoteke sadrže popise, ovisnosti i mapiranja svih dostupnih drivera i njih modprobe koristi da bi saznao koje sve drivere da učita osim onoga kojeg mu je kernel poslao. Zato je, na primjer, bitno da se prilikom ručnog dodavanja drivera u /lib/modules/ime_kernela folder pokrene "sudo depmod -a", inače modprobe ne zna za novi driver. Kad se driver automatski instalira onda obično instaler vodi brigu oko pokretanja depmoda.

Ako u depmod datotekama nema oznake drivera koja odgovara oznaci uređaja koju je poslao kernel onda modprobe neće učitati driver. Ako korisnik zna da neki driver može raditi s određenim uređajem, da bi ga modprobe učitao treba dodati novi "alias" drivera u /etc/modprobe.d .
Taj alias odgovara modaliasu u /sys folderu tog uređaja.

Kada je učitavanje dovršeno, kernel odlučuje koji je od učitanih drivera kandidata najbolji a ostale odbacuje. Tek onda kernel povezuje određeni driver s uređajem. To se zove bindanje.

Kod tog odlučivanja može doći do pogrešnog odabira. Moguće je da postoji driver za koji kernel pretpostavlja da je bolji od onoga kojega bi korisnik htio iako oba odgovaraju i onda "binda" njega. U tom slučaju, najjednostavnije je "blacklistati" nepoželjni driver.
Primjer:

Kod: Označi sve

sudo echo "blacklist ime_drivera" >> /etc/modprobe.d/blacklist.conf
 
Ako slučajno taj driver koristi još neki uređaj onda se to ne smije već se taj driver "unbinda" putem datoteke u /sys folderu
Primjer:

Kod: Označi sve

sudo echo -n "Oznaka uređaja" > /sys/bus/naziv_busa/drivers/nepoželjni_driver/unbind
i isto tako binda drugi:
sudo echo -n "Oznaka uređaja" > /sys/bus/naziv_busa/drivers/dobar_driver/bind  
Ponekad driver odbija ID uređaja jer popis ID-ova uređaja u driveru nije ažuriran iako bi taj driver odgovarao. U tom slučaju do "bindanja" ne dolazi makar je driver učitan ručno. Za to postoji datoteka u folderu /sys.../drivers pod nazivom new_id i upisivanjem ID-a u tu datoteku se može dodati novi ID uređaja u driverov popis. Isto tako se ID upisivanjem u remove_id može obrisati iz tabele i tako spriječiti da se nepoželjni driver binda na uređaj.

Te ručno dodane postavke u /sys ne ostaju nakon reboota već ih treba upisati u obliku skripte ili udev pravila.
:cenzura
Toliko za danas.
Avatar
shrike
Moderator
Postovi: 10322
Pridružen/a: 07 pro 2007, 18:07
Spol: Y
OS: utuntu 19.10
Kontakt:

Re: Driveri u linuxu

Post Postao/la shrike »

super tekst, i evo par nadopuna:

Kod blackilistanja je potrebno na dosta distri napraviti update initramfsa koji se radi ovako:

Kod: Označi sve

update-initramfs -u -k all
Dodatno, primjetio sam da jako puno ljudi pita nešto u stilu "da li posotje dirveri za distru A jer ih nema za distru B". driveri na linuxu ne dolaze za distre, već dolaze za kernele. ako vaša distra nema neki driver, "linux način rješavnaja problema" je upgreadati kernel bilo instalacijom veće verzije iz paketnog sustava, bilo ručnom kompilacijom.
Es gibt keinen Gott, kein Universum, keine menschliche Rasse, kein irdisches Leben, keinen Himmel, keine Hölle. Es ist alles ein Traum - ein grotesker und dummer Traum. Nichts existiert außer dir. Und du bist nur ein Gedanke - ein vagabundierender Gedanke, ein nutzloser Gedanke, ein heimatloser Gedanke, der verloren in der leeren Ewigkeit wandelt!
Avatar
Suko
Site Admin
Postovi: 16079
Pridružen/a: 03 tra 2008, 18:09
Spol: M
OS: Mint 17 Cinnamon
Lokacija: Svugdi me ima. Slavonija uglavnom.

Re: Driveri u linuxu

Post Postao/la Suko »

Vidim da se tu već sprema tekst za naslovnicu. :zvizdi
Avatar
Medojedni jazavac
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Spol: M
OS: eOS Luna
Lokacija: ForHill Croatia
Kontakt:

Re: Driveri u linuxu

Post Postao/la Medojedni jazavac »

Super informativno. Hvala na ovome.
stefan je napisao/la:tu mač gemišta
To understand recursion, you must first understand recursion.
Avatar
Vl@do
Moderator
Postovi: 6222
Pridružen/a: 28 lis 2011, 23:31
Spol: M
OS: Arch KDE Plazma
Lokacija: Zagreb
Kontakt:

Re: Driveri u linuxu

Post Postao/la Vl@do »

Za mene pretesko, ali i prezanimljivo stivo. Svakako bi bilo korisno, u ovom stilu, na portalu objasniti svima nama koji ulazimo polako, ali sigurno u ovaj svijet.
Moj pogled na sve to.
Glavna snaga GNU/Linuxa nije besplatnost, nego SLOBODA.
http://wiki.open.hr/wiki/Linux_CLI_naredbe
zvir
Postovi: 25
Pridružen/a: 28 ožu 2012, 20:43
Spol: M
OS: Debian Jessie
Lokacija: Regensburg, Deutschland

Re: Driveri u linuxu

Post Postao/la zvir »

A ako nekoga zanima programiranje Linux drivera, evo jedna serija članaka koji čitatelja u problematiku uvode pisanjem jednostavnih drivera. LINK

Have fun. :)
Beware of programmers who carry screwdrivers.
Odgovori