[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
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:
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 charX
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 secho "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.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): napravitipoll()
, pregledatirevent
zastavice svakog aktivnogfd
te izabrati nasumicno jedanfd
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.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 samoshofer.c
i to na tri mjesta gdje su zakomentirana “todo”. Svaki put kada zelimo provjeriti funkcionalnost, potrebno je izvrsitisudo make
isudo ./load_shofer
. Modulshofer.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 dolaziioctl
funkcija, cija je svrha da prebacuje dan broj bajtova s meduspremnika. To koristimo tako da compile-amoioctl.c
i pokrenemo u konzoli./ioctl.o /dev/shofer_control 10
gdje10
predstavlja broj bajtova koji se prebacuju s meduspremnika. Dakle, jedina svrha naprave/dev/shofer_control
je da komunicira sioctl()
za brze prebacivanje bajtova sto radi preko funkcijecontrol_ioctl()
ushofer.c
. Svaka naprava ima svoje specificne funkcije koje koristi. Naime, sada ce te primjetiti ushofer.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. Ushofer_open_write
izmijenis zastavicuO_RDONLY
, ushofer_write
izmijenisout_buff
->in_buff
tekfifo_to_user
->kfifo_from_user
, a ucontrol_ioctl()
umjesto da se prebacuje jedan bajt, prebacuje se predani brojcmd
bajtova izioctl.o
programa. Dakle, za svako testiranje, pokrenetesudo ./load_shofer
, napraviteecho "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
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.