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

Adrian Stanciu adrian.stanciu.pub at gmail.com
Wed Apr 5 20:58:19 EEST 2017


2017-04-05 14:41 GMT+03:00 Iulian Matesica <iulian.matesica at gmail.com>:
> 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)

Am aceeași versiune de qemu. Compilez cu gcc 5.4.0 pe un Ubuntu 16.04.

> [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


More information about the so2 mailing list