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

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


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

Mă bucur că ai găsit o soluție.

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


More information about the so2 mailing list