Lab04 interrupts #4
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Laboratorul 4
Exercițiul 1
Am înregistrat două porturi cu numele "io port 1" și "io port 2" sub id-urile 0x61 și 0x65 folosind
request_region. Apoi în funcția de exit eliberat resursele folosindrelease_region.Am verificat corectitudinea prin:
Când am dat
rmmodam observat că nu mai apar aceste informații.Exercițiul 2
Am definit funcția
kbd_interrupt_handlerce va juca rolul de interrupt handler. În aceasta vom afișa un mesaj pe care îl vom observa folosind dmesg. Am folositrequest_irq(I8042_KBD_IRQ, kbd_interrupt_handler, IRQF_SHARED, MODULE_NAME, &devs[0])pentru a asocia handlerul definit anterior.În caz de eroare sau atunci când se apelează exit am eliberat resursele.
Exercițiul 3
Am citit valoarea de la
I8042_DATA_REGși am stocat-o în variabilaval(nu este caracter ASCII). Apoi am printat în handler scancode-ul.În handler am stocat scancode-ul și am verificat daca acesta reprezintă o apăsare sau eliberare. Acțiunea reprezintă o apăsare daca valoarea obținută din
scancode & 0x80este 0. Dacă o tastă a fost apăsată atunci se v decodifica caracterul ASCII asociat apoi se vă stoca în buffer.Am verificat corectitudinea prin apăsarea unor taste și verificarea output-ului cu tabelul cerinței.
La apăsarea tastei 'a':
- În cerința exercițiului cred că este o eroare în tabel la linia tastei 'ENTER'Exercițiul 4
În funcția
get_charam implementat funcționalitatea de a returna caracterul de la indexulget_idxdin buffer. Apoi am modificat valoarile dincount(decrementare) șiget_idx(poziția următoare din buffer-ul circular).Într-o buclă dependentă de parametrul formal
size, am citit caracter cu caracter și am transferat conținutul către bufferul din userspace folosindput_user(am avut grija că aceasta operație să nu se afle intre lock și unlock ale spinlock-ului).Exercițiul 5
Am completat funcția
kbd_writeși am adăugat-o pentru operația write în fops. După aceea am completat funcția de reset a bufferului zeroizand conținutul acestuia împreună cu indecșii și dimensiunea acestuia.