Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[NOS] 2. laboratorijska vježba - 2021/2022

Zivot_nije_FER

Može li bilo tko reći kako da povežem ono što je Leonardo napisao (shofer.c) sa kodom koji se nalazi na poll stranici? Izbacuje mi grešku za kompajliranje shofer.c koda. Kako se to radi? Ja koristim “gcc -o shofer shofer.c” pa mi izbaci grešku No such file or directory (linux/moduleparam.h)… Poll program koji sam skinuo sa one stranice što piše u uputama mi radi sam za sebe, ali kako da ga povežem sa driverom koji je Jelenković napisao?


steker

Jel imo ko problem da mu u burzi grupa nema grupa ‘neraspoređeno’. Htjela sam se danas malo prije 6 premjestit jer nisam uspjela napravit i samo su mi bili ponuđenj ostali termini. To neki bug u ferku?


Ardura

Sto bi ioctl trebao vratiti da vidim da radi? Uvijek vraca 0, pokrecem ga s ./ioctl /dev/shofer_control nekibroj.
Cini mi se da taj njegov program uopce ne poziva ono što smo mi nadopisali? Kako onda pozvati tocno to napisano umjesto timera?


BillIK

Maddy Isto mi se dogada. Jesi li uspio išta?


branimir1999

Maddy vraca 0 ako je sve poslo dobro, osim ako si drugacije postavio return (da ti nije retval).

Spuk samo .c fileove sto je za mene pisac.c, citac.c, shofer.c

branimir1999 @BillIK @flicka


Ardura

BillIK Probala sam s sudo cat /proc/kmsg vidjeti sto se dogada, tako vidis kad pozoves ioctl da se zapravo ispise ioctl, a ne timer za neki znak. A return vraca 0 kad je sve ok, mozes promjeniti da mozda vrati broj prenesenih byteova, ali msm da je jedino bitno da ne bude -1.


Spuk

branimir1999 E sta si sve stavio u tip file koji si predo?


branimir1999

Buduci da nitko nema ideje sto se dogada ovdje i dobio sam par poruka da pomognem, pokusat cu objasniti najbolje sto mogu sto treba raditi u labosu. MASOVNA NAPOMENA: Ja ne znam je li ista od mojeg tocnog, ali to cu vidjet sutra na demonstraciji. Napravio sam najbolje sto znam i razumijem, a nemam vremena konstantno premisljati zbog nekolicine bodova. Takoder, ovo mozda nece biti primjenjivo za nagodinu.

Drugi labos se sastoji od 3 zadatka - 2 podzadatka za lab2a i 1 podzadatak za lab2b. Ogromna vecina toga je vec implementirana, i nije potrebno puno razmisljati ni koda pisati. Cak i dosta zadataka sto “moramo napraviti” suvec implementirani. Moje razumijevanje labosa i njene svrhe je ovakvo:

Za oba zadatka, mora se napraviti sudo make i sudo ./load_shofer. On ti stvara sve potrebne virtualne naprave, i ti tu ne trebas nista pisati i dodavati. U lab2a se te naprave zovu od /dev/shofer0 do /dev/shofer5, dok se u lab2b nazivaju /dev/shofer_in, /dev/shofer_out te /dev/shofer_control. U lab2a, virtualne naprave mogu obavljati read i write, dok u lab2b, svaka naprava ima ogranicena prava prema tekstu zadatka.

U ovome labosu (koliko znam) nema provjere plagijata jer pretpostavljam da nemamo niti znanja niti vremena da ovo implementiramo na raznolike nacine. To me navodi na to da je njima cilj da mi razumijemo teorijsku pozadinu napisanog C koda. Stoga, ako dodete s kodom, ali ne mozete suvislo odgovoriti na postavljena pitanja, vjerojatno ce te dobiti disproprocionalno niski broj bodova. Nemojte plagirati nego razumijte kod i budite ga sposobni izmijeniti.

Podzadaci:

  1. Podzadatak: Potrebno je loadati modul preko bash skripte, te napisati svoj .c program koji cita iz spomenutih naprava. Za doticni .c program iskoristite ovaj kod: https://man7.org/linux/man-pages/man2/poll.2.html. Taj kod na dnu stranice doslovno copy-pasteajte i compileajte. On ce zadovoljavati svrhu 1. podzadatka, ali vrlo nezgodno; program slusa samo naprave koje su navedene u komandnoj liniji pri pokretanju c programa (./citac.o /dev/shofer0 /dev/shofer1 ... /dev/shofer5). Medutim, moj savjet je da ne budete lijeni nego isprogramirajte tako da se program prilagodi zadatku. Dodajte dinamicno slusanje naprava preko varijable (npr. imate string /dev/shoferX i dinamicno mijenjate char X u broj ovisno u kojoj ste iteraciji u petlji, iako nemojte me plagirati na ovome pls). Kada ste gotovi, pokrenite slusanje s jednom konzolom, i na drugoj posaljite poruke slusajucim napravama s echo "tekst za primjer" > /dev/shofer2. Ocito, 2 je placeholder broj te mozete napisati skriptu koja ce ovo automatizirati u svhui testiranja. Komentirajte dijelove koda da sami sebi dokazete da razumijete.

  2. Podzadatak: Potrebno je loadati modul preko bash skripte i napisati svoj .c program, ali ovaj program ce piatie u naprave. Duplicirajte .c file iz prvog podzadatka i preimenujte ga. Izmijenite sve zastavice tako da je relevantno za pisanje (O_RDONLY-> O_WRONLY, POLLIN-> POLLOUT, read(...) -> write(...)). Vas zadatak je svakih 5 sekundi (dokle god uopce ima veza, ali taj dio nije toliko relevantan): napraviti poll(), pregledati revent zastavice svakog aktivnog fd te izabrati nasumicno jedan fd koji je spreman za pisanje i napisati random znak u njega. Ova izvedba je malo kompliciranija, ali to vam je osnovni pseduokod. Na koji nacin ce te implementirati provjeru zastavica, nasumicni odabir i pisanje je na vama. Sada, ako pokrenete oba programa paralelno, svakih 5 sekundi ce program iz ovog podzadatka randomly poslat poruku programu iz prvog podzadatka preko zajednicke naprave.

  3. Podzadatak: Ovaj zadatak je malo zbunjuci, ali pazljivo pratite. Postoje tri virtualne naprave s zajednickim spremnikom. Cilj ovog podzadatka je manipulacija tim meduspremnikom koristeci naprave. Iz tog razloga postoje navedene tri naprave s ogranicenim pravima jer svaka radi specificnu funkciju s meduspremnikom. Na svu srecu, preko sudo ./load_shofer stvaraju se doticne naprave pa tu ne moramo nista. Medutim, mi u ovom zadatku modificiramo sâm modul, ali samo i iskljucivo njega. Mijenja se samo shofer.c i to na tri mjesta gdje su zakomentirana “todo”. Svaki put kada zelimo provjeriti funkcionalnost, potrebno je izvrsiti sudo make i sudo ./load_shofer. Modul shofer.c je napisan tako da bilo koja promjena u meduspremniku je logirana na dnu /var/kern.log i upravo tu vidite funkcionira li vam program ili ne. Alaram/timer za prebacivanje jednog znaka svakih 5 sekundi je vec implementiran. Medutim, to je samo 1 znak svakih 5 sekundi, sto je prilicno sporo, pa tu dolazi ioctl funkcija, cija je svrha da prebacuje dan broj bajtova s meduspremnika. To koristimo tako da compile-amo ioctl.c i pokrenemo u konzoli ./ioctl.o /dev/shofer_control 10 gdje 10 predstavlja broj bajtova koji se prebacuju s meduspremnika. Dakle, jedina svrha naprave /dev/shofer_control je da komunicira s ioctl() za brze prebacivanje bajtova sto radi preko funkcije control_ioctl() u shofer.c. Svaka naprava ima svoje specificne funkcije koje koristi. Naime, sada ce te primjetiti u shofer.c da svaki “todo” ima “slican” komentar nakon njega, i to je istina sto komentar tvrdi; potrebno je copy paste-ati kompletan kod slicne funkcije u doticnu funkciju i izmijeniti par redova. U shofer_open_write izmijenis zastavicu O_RDONLY, u shofer_write izmijenis out_buff->in_buff te kfifo_to_user -> kfifo_from_user, a u control_ioctl() umjesto da se prebacuje jedan bajt, prebacuje se predani broj cmd bajtova iz ioctl.o programa. Dakle, za svako testiranje, pokrenete sudo ./load_shofer, napravite echo "tekst za primjer" > /dev/shofer_in i pratite u periodicno (timer) i naglo (ioctl) prebacivanje bajtova u /var/kern.log.

Sretno svima koji jos rade ovaj labos, i zao mi je ako ista od ovog moje netocno.


branimir1999

Dakle, isto sto Učečuču kaze. Moj kod branimir1999 je valjao i dobio sam sve bodove. Dakle, implementacija je trivijalna, ali odgovaranje nije. Moze pitati bilo sto iz 5. i 6. poglavlja ukljucujuci stvari poput kfifo tako da savjetujem da proucite skriptu s razumijevanjem.


steker

branimir1999


flicka

branimir1999 može slika kak bi trebalo izgledat to u var/kern.log?


Nocna_smjena

Jel ima netko problem sa drugim zadatkom labosa da mu kenja za importe? Ak ima neko da je rijesio taj problem bio bi zahvalan da podijeli kako je uspio. Koristim ubuntu 18.04


Nocna_smjena

Nocna_smjena short update za one koji se isto muce s ovim. Ovo vam nije bitno. Samo modificirajte kod prema uputama nevezano kaj baca gresku kod importanja. Taj problem sa importanjem rjesava makefile. Vidjet cete da normalno prevodi kod i normalno ga ucitava u kernel


pingvinka

jel netko imao termin već da kaže što ispituju?


Uchenikowitz

pingvinka citiram kolegu koji je imao danas:
Prvo smo zajedno s asistentom 20 min trazili ucionu
Pito me da runnam i opisem poll i ioctl
Cemu sluze sta primaju i tak to
Jos jedno pitanje je bilo sta je jezgrin modul


123

jel nekome kad pokrene ./ioctl.out /dev/shofer_control

bude Permission denied? I kako ste to uspili rješit


ana

FERella meni je bilo nes slicno pa sam unloadala shofere 1. zad i loadala ponovno za drugi i onda mi je radilo, samo sto se meni zablokira cijela virtualka kad pokrenem tu funkciju tako da…


branimir1999

FERella kada god dobijes “permission denied”, onda moras koristiti “sudo naredbu”. Probaj sudo ./unload_shofer pa sudo ./load_shofer pa sudo ./ioctl.out /dev/shofer_control 5


Nocna_smjena

Mogu confirmat sve navedeno za demonstraciju labosa. Labos je relativno jednostavno za napisat al teoriju iza svega razumjet i bas i nije i tu ce vas stisnut


123

Nocna_smjena jel se sjecas nekih pitanja?

meni ovo nije bilo jednostavno niti za napisat XDD


Nocna_smjena

FERella za prvi zadatak kako ti kad nesto saljes napravi se zna da se referiras na nju (ima struktura file_operations na pocetku shofer.c fajla i prek nje se zna kom se referira) i jos neka pitanja pitao za prvi zadatak uz demonstraciju. Za drugi jel potrebno lock-ati buffere, ak da zasto da ak ne zasto ne. Odg je ne ali sad se vise ne sjecam objasnjenja. Sto je ioctl, zasto bas njega koristimo i jos neka pitanja kojih se fkt vise ne sjecam al nisu bas easy bila. Ugl in depth treba razumjet kak to funkcionira


bodilyfluids

Koliko ste komentirali po kodu znacenja funkcija i slicno? jel bi im smetalo na predaji da kod ima puno komentara?


Retard00

Dragi prijatelj strojnog učenja Ja nisam niš komentiro, dobio 10 bodova. Pitanja koja sam bio pitan su već navedena gore.


« Prethodna stranica Sljedeća stranica »