[so2] [SO2][Tema 2 - Driver UART] Pipe între COM1 și COM2 (lipsă!?)

Iulian Matesica iulian.matesica at gmail.com
Wed Apr 5 14:41:18 EEST 2017


Salut Adrian,

Tot nu reușesc să trimit date de la COM1 la COM2.
Îmi rămâne agățat la testul 3, la primul test de transmisie-receptie
(rămâne în primul receive).
Nu îmi dau seama cum a mers la tine de a ajuns la testul 8 când la
mine nu trece de 3.

Am făcut următoarele (de la zero):
1. Clonat repo de la [1] și făcut din nou mașina virtuală
2. Clonat repo de la [2] și compilat checker-ul din nou
3. Pus .ko de la commit-ul cu care ai încercat și tu
Rezultat: se agață la testul 3 la receive.

Am încercat și altfel: am inserat manual doar solutie.ko și am făcut
/dev/com1 și /dev/com2 cu mknod.
În două terminale diferite, pe qemu, am rulat:
Terminal 1: cat < /dev/com2
Terminal 2: echo "abcd" > /dev/com1

Nu primesc nimic pe com2. Nu știu ce să mai încerc.

Ce versiune de qemu-system-i386 ai? (eu am 2.5.0)

[1] https://github.com/tavip/qemu-so2
[2] https://github.com/systems-cs-pub-ro/so2-assignments

Pe 4 aprilie 2017, 21:36, Adrian Stanciu <adrian.stanciu.pub at gmail.com> a scris:
> 2017-04-04 19:08 GMT+03:00 Iulian Matesica via so2 <so2 at cursuri.cs.pub.ro>:
>> Salut,
>
> Salut,
>
>> Am o problemă cu cele două porturi, COM1 și COM2 - nu reușesc să obțin
>> pe COM2 ce trimit de pe COM1 și invers (checker-ul rămâne blocat
>> într-un receive).
>
> Ar trebui să meargă transfer de la COM1 la COM2 dar invers nu pentru
> că pipe-ul este unidirecțional.
>
>> Device-ul este configurat corespunzător deoarece dacă activez bit-ul
>> de LOOP din Modem Control Register, ce trimit pe COM1 primesc imediat
>> tot pe COM1 (la fel și pentru COM2). Acest lucru îmi confirmă că
>> operațiile de read/write + întreruperi funcționează.
>>
>> Am verificat în Makefile-ul pentru QEMU și este prezentă linia următoare:
>> serial pipe:pipe1 -serial pipe:pipe2
>>
>> Am dezactivat modul de loopback și am încercat să scriu de pe mașina
>> fizică în fișierul pipe1.in:
>> echo -n "abcd" > pipe1.in
>>
>> În mașina virtuală primesc întrerupere de receive după care citesc
>> datele - totul ok.
>>
>> Am procedat și invers: am scris de pe mașina virtuală în COM1 și am
>> primit date în pipe1.out ('echo -n "abcd" > /dev/com1', respectiv 'cat
>> pipe1.out').
>>
>> La fel funcționează și pentru COM2.
>> Ar părea ca cele două porturi nu sunt conectate. Cum pot rezolva?
>>
>
> Am testat ultima variantă a codului tău de pe GitLab (6f1b133c este
> ultimul commit) cu LOG_LEVEL setat la KERN_DEBUG. Observ că se
> blochează intermitent la testul 8 (read/write, high speed). Dacă nu
> ajungi la acest comportament, asigură-te că ai configurația corectă a
> mașinii virtuale [1].
>
> [1] https://github.com/tavip/qemu-so2
>
>
> Adrian



-- 
Iulian-Răzvan Mateșică


More information about the so2 mailing list