Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Input/Output mapa u VC++

[es] :: C/C++ programiranje :: Input/Output mapa u VC++

[ Pregleda: 2805 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Beban
Beograd

Član broj: 6351
Poruke: 39
*.beg.sezampro.yu



Profil

icon Input/Output mapa u VC++19.11.2002. u 00:21 - pre 260 meseci
Pošto sam nov na forumu, prvo bih pozdravio sve učesnike.
Ukoliko je neko ranije već načeo ovu temu, nadam se da se nećete ljutiti što je ponavljam.

Naime, interesuje me kako da pročitam upišem nešto u IO mapu koristeći VC++ i MFC.

Ovo mi je potrebno radi pisanja drajvera za određene PCI karte.
Do sada su karte sa kojima sam radio bile memorijski mapirane, pa sam pišući i čitajući sadržaj fizičke memorije mogao sa njima da radim ono što mi je bilo potrebno.

Međutim, sada mi je potreban drajver za kartu koja nije memorijski mapirana, već koristi IO mapu (tako kaže User Manual). Pošto nisam elektroničar, možda sam nešto i pogriješio...
E sada, ako se ne varam,u toj IO mapi se nalaze i tastatura i portovi. Pitanje je kako im "prići"?

Karte se u okviru te IO mape džamperima mogu setovati na određenu adresu. Još jednom ponavljam da to nije adresa u fizičkoj memoriji.

Nadam se da se neko već sreo sa ovim problemom...

Hvala.

P.S.
I da li bi neko mogao da objasni razliku između adrese u memoriji i u IO mapi, odnosno šta je ta IO mapa, zapravo?
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Input/Output mapa u VC++12.05.2003. u 18:38 - pre 255 meseci
Iskren da budem nisam se time bavio, ali imam jedan komentar: zar je bitno da li je VC++/MFC u pitanju? - To je na Windows-u totalno nezavisna stvar od kompajlera ja mislim. Ako gresim slobodno me ispravite. I/O treba da bude nesto low-level i trebalo bi da sa svakim kompajlerom to na Windows-u radi na (uglavnom) isti nacin.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Input/Output mapa u VC++13.05.2003. u 04:05 - pre 255 meseci
Razlika između memorijskog i I/O adresnog prostora
Intel arhitektura 32 (nadalje IA32) razlikuje dva potpuno nezavisna adresna prostora. Adresni prostor je skup adresa kojima se nečemu može pristupiti.

I/O adresni prostor je 16-bitni na IA32, dok je memorijski adresni prostor 32-bitni.

Pristup I/O adresnom prostoru se vrši preko naredbi procesora IN i OUT, dok se pristup memorijskom prostoru vrši preko većeg broja naredbi (prve mi padaju na pamet LEA, MOV, ...).

Ograničavanje pristupa I/O i memorijskom adresnom prostoru se vrši na nivou TSS-a, ali na drugačije načine. I/O pristup se odobrava ili zabranjuje pomoću bitmape dozvoljenih portova, čija se adresa čuva u jednom polju TSS-a, dok se pristup memoriji kontroliše pomoću segmentiranja i/ili straničenja za pojedinačni proces (pomoću LDT/Local Descriptor Table, ili PDT/Page Directory Table).

U suštini, I/O i memorijski adresni prostor su veoma slični, ali koriste razne mehanizme za iste stvari.

Takođe, neki operativni sistemi (kao npr. ranije Linux, nisam siguran za najnovija izdanja), pojednostavljuju upravljanje I/O permission mapom tako što je smeštaju uz sam TSS, i to sve u jednu stranicu od 4kb, pa nije moguće dozvoliti pristup I/O portovima većim od 0xe00, pošto je TSS inače oko 512 bajtova, nisam tačno siguran.

Međutim, za konkretni problem (tastatura, čini mi se port 0x60, mada to onako napamet, kao i sve ostalo), ovo ne može biti uzrok.

Sam problem
Prvo, pominješ da pišeš drajvere, međutim, sve veoma izgleda kao da pišeš korisnički program, pošto drajveri mogu (i najčešće moraju) da rade u ring0, a tada imaju maksimalna ovlašćenja. Zbog toga, ako želiš, možeš i sam da popuniš I/O mapu čime želiš, ali onda prvo iščitaj TSS i iz njega adresu I/O mape (ili već pronađi neku API funkciju koja direktno menja I/O mapu, npr. io_enable(0x60);).

Ovde bih ja mogao da pomognem u načelu, ali Intelova dokumentacija će sigurno biti od mnogo veće pomoći.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Beban
Beograd

Član broj: 6351
Poruke: 39
*.ptt.yu



Profil

icon Re: Input/Output mapa u VC++14.05.2003. u 00:31 - pre 255 meseci
Citat:
Sam problem
Prvo, pominješ da pišeš drajvere, međutim, sve veoma izgleda kao da pišeš korisnički program, pošto drajveri mogu (i najčešće moraju) da rade u ring0, a tada imaju maksimalna ovlašćenja. Zbog toga, ako želiš, možeš i sam da popuniš I/O mapu čime želiš, ali onda prvo iščitaj TSS i iz njega adresu I/O mape (ili već pronađi neku API funkciju koja direktno menja I/O mapu, npr. io_enable(0x60);).

Ovde bih ja mogao da pomognem u načelu, ali Intelova dokumentacija će sigurno biti od mnogo veće pomoći.


Korisniccka aplikacija ne predstavlja problem, kada se karte koje koristim "opamete"; a one se opameccuju na osnovu protokola koji uz njih isporuccuje proizvodjacc, tako ssto postoji taccno opisana procedura (upisa ili ccitanja bajtova, pa ccak i bitova) na odredjene memorijske lokacije (ako je memorijski mapirana) ili IO lokacije (ako se nalazi u input/output) mapi. Kada napissess program koji posstuje taj protokol - dobio si drajver za tu kartu...

Btw., problem sam rijessio, nassao sam biblioteke na internetu koje omoguccavaju pisanje i ccitanje IO mape (kao i pisanje i ccitanje po fizicckoj memoriji), pomoccu njih sam napisao pomenute drajvere, ali sve to me zaintrigiralo, pa bih rado da ukapiram kako to radi.

A potpuno je irelevantno u ccitavoj pricci zbog ccega zzelim da saznam te stvari (korisniccka aplikacija ili drajveri za taj komad hardware-a).

I hvala ti za pominjanje f-je io_enable - pogledaccu dokumentaciju da vidim da li ima nessto visse o njoj.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Input/Output mapa u VC++14.05.2003. u 02:20 - pre 255 meseci
Uh, ja sam tu „funkciju“ io_enable izmislio, možda postoji, a možda i ne, ali nešto što radi sličan posao bi trebalo da postoji.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Input/Output mapa u VC++

[ Pregleda: 2805 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.