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

Iulian Matesica iulian.matesica at gmail.com
Wed Apr 5 19:07:00 EEST 2017


Am găsit o metodă de ocolire a problemei, în caz că se mai lovește
cineva de asta.

Pe mașina fizică cu Ubuntu 16.04 unde aveam qemu nu am găsit o soluție
așa că am instalat qemu într-o mașina virtuală cu Debian. Aici a mers
totul ok (același cod, aceleași repo-uri cu checker + qemu).

Cred că are ceva qemu instalat pe mașina fizică - nu am mai investigat.

O seară faină,
Iulian

Pe 5 aprilie 2017, 14:41, Iulian Matesica <iulian.matesica at gmail.com> a scris:
> 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ă



-- 
Iulian-Răzvan Mateșică


More information about the so2 mailing list