Hollosi Information eXchange /HIX/
HIX CODER 2159
Copyright (C) HIX
2004-10-29
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 RE:Soros port kezeles (mind)  8 sor     (cikkei)
2 Re: win kernel driver kerdesek (mind)  132 sor     (cikkei)
3 re: re: want a Rolex? (mind)  4 sor     (cikkei)

+ - RE:Soros port kezeles (mind) VÁLASZ  Feladó: (cikkei)

Megoldasok:
1. A handshaking vonalakat hasznalod leolvasasra, azok allithatoak, 
olvashatoak, ha kell interruptot adnak.
2. keszitesz egy kicsi kartyat, amin van egy max232, ez a +-9 V-tot 
atalakitja TTL szintre, es a printer porton vizsgalod az egeszet.
-- 
Tiszai Istvan
http://www.tiszaii.tk
+ - Re: win kernel driver kerdesek (mind) VÁLASZ  Feladó: (cikkei)

Thus spake HIX CODER:

> Elekron is olvastam a kerdesedet.
> Probalok valaszolni, ahogy en gondolom az egeszet.

Koszi. Jobb hogy itt valaszolsz, itt ontopic :)
Kozben feltettem a leglenyegesebb kerdeseket newsgroupokban es az OSR
ntdev listan is, ugyhogy reszben meg tudom valaszolni a sajat kerdeseim :)

>  > Ha ez a fuggveny sikeresen elvegzi a foglalast, egyuttal be is mappeli
>  > azt a kerneles virtualis cimtartomanyba.
> 
> Igen, de csak a kezdo bazis virtualis cimet, es nem blokkos, tordelt a 
> memoria, folyamatos.
> Meg nem hasznaltam, nem javasolja a ddk, mert egy ido utan fregmentalt 
> lesz a memoria, ezt irja a DDK.

Elso korben nem problema, a lenyeg hogy mukodjon. Mas garantaltan mukodo
modszert egyelore nem tudok, de ha letezik, nagy valoszinuseggel lenyegesen
bonyolultabb lesz mint ez. Termeszetesen ez igen lamer megoldas, hiszen a
memoriat a driver inicializalasakor le kell foglalni, kesobb mar a
fragmentacio miatt nem biztos hogy lehetseges. Igy akkor is lenyel 1G-t a
driver, ha sohasem fogjak elinditani a kezeloprogit, ami hasznalna.
(Nem gond, ez abszolut celhardver, a gepet nem fogjak masra hasznalni)

> Ezt nem tudom, nekem win2000-es ddk-am van, 2000 alatt szoktam dolgozni, 
> abban ilyet nem ir, nincs benne limit, vagy meg nem talaltam meg...

Lehet hogy nem irja, de biztos hogy van ilyen limit. Az 1G kernel terulet
akkor van, amikor az user progiknak ad 3G-t, adatbazisolokhoz meg egyebekhez
jo. Sajna nem tudom hogy melyik windoz tamogatja. A 2G hatar viszont biztos,
minden windozban benne van.

>  > 2. Ez miert problema, hiszen a parameterekben meg lehet adni a 
> legmagasabb
>  >    fizikai cimet amit a hardver kezelni tud?
> 
> A fg.-ben lehet, a hardverben nem biztos, ez a IC gyarto cegtol fugg, a 
> PCI IC-ben van egy 0-256 cimu terulet, ahova be kell irni a kezdo 
> cimeket, a felhasznalando lokalis mem nagysagot, PCI interface speckokat.

Az tok mas. Az a PCI konfig terulet, valoszinulag a base address
regiszterekre gondolsz. Ebben az esetben en gyartom a PCI chipet :),
en irtam a progit egy programozhato logikaba. A DMA engine-nek nincs
semmilyen szabvany interfesze a PCI konfig teruleten, teljesen gyartofuggo.
A konfiguracio soran csak azt tudja lekerdezni a gep, hogy a kartya tud-e
bus master lenni, erre van 1 bit: vagy igen, vagy nem.
Sejtesem szerint itt valami olyasmirol lehet szo, hogy a lefoglalt memoria
nem feltetlenul page hataron kezdodik, vagy ilyesmi... De meg varom a
megerositest a mesterektol.

>  > 3. Mashol azt irjak, hogy ez a fuggveny long-term internal buffer
>  >    foglalasara alkalmas. Ez nem azt jelenti, hogy a hardver szamara nem
>  >    feltetlenul elerheto? Vagy csak hibas fogalmazas a DDK-ban?
> 
> Lehet, azt irja hogy a DriverEntry hasznalja, pl. cash-re.

De akkor annak miert kene fizikailag folytonos memorianak lennie?
Egy esetben van ertelme a fizikailag folytonos memorianak: ha egy hardver
eszkoz dolgozik benne, amely nem tud scatter DMA-t.

>  > 4. Hogy lehet, hogy ez a fuggveny lazan lefoglal 1G-t, ugyanakkor a hozza
>  >    hasonlo funkcionalitasu AllocateCommonBuffer doksiban mindig felhivjak
>  >    a figyelmet arra, hogy rettento takarekosan kell banni vele, mert
>  >    kulonben elfogynak a map registerek, es akkor hetbaj lesz.
> 
> Gondolom ez egy olyan fg. amit nem illik hasznalni, max. rovid tavra, 
> pl. cache-re, mert pl. nincs korlatozva a mem foglalas.

Ha csak ennyi, az nem fog zavarni :) De ha esetleg kiderul hogy nehany
k-t tud csak lefoglalni, az gaz. (Tobbet tud, mar teszteltem, csak meg
nincs itt az 1G RAM) Az okosok azt mondjak, hogy ez is a fent emlitett
fuggveny tesojat, az MmAllocateContiguousMemorySpecifyCache-t hasznalja,
tehat annyit tud lefoglalni, amennyit az. Ha igy van, minden kerdesem
targytalan :))

>  > 5. Ugyanez a kerdes vonatkozik arra is, ha az user progi lefoglal 1G
>  >    memoriat, azt METHOD_IN_DIRECT io-val atadja a drivernek. Az IOmanager
>  >    meghivja ra az MmProbeAndLockPages fuggvenyt, a driver pedig utana az
>  >    MmGetSystemAddressForMdlSafe-t. Ugyanaz tortenik mint fent, csak az
>  >    le tud foglalni 1G-t, raadasul fizikailag folytonos memoriat(!), ez
>  >    meg nem folytonosat csinal, es be is xarhat barmely fazisban. Miert?
> 
> Ez folytonosat csinal, es inkabb cache-nek.
> A useres mem belekerul az MDL-be, ez meg nem, tehat az a rendszerbe be 
> lesz illesztve, a masik nem nagyon, mert inkabb cashe-nek kell, mint mar 
> irtam

Varjunk csak! Ha direct io-t csinalok, akkor ahhoz biztos hogy keletkezik
Mdl, az alapjan tudja memoriaba lockolni a lapokat stb... Ha az AllocContMem
fuggvennyel foglalok, ahhoz _nem_ keletkezik Mdl. Pont ez a lenyeg, ugyanis
mint kiderult, az Mdl struktura max 64 megas bufferek leirasara alkalmas!
Tehat maximum tobb kulon bufferrel lehetne megcsinalni, de lehet hogy
mukodne, viszont jo komplikalt lenne.

> A map regiszter kell a logikai cimhez, ami a hardverhez van kapcsolva, 
> az MDL kell a virtual cimhez, ami a  deriverekhez van kotve.

De mi a kulonbseg a logikai es virtualis cimek kozott?
Miert nem jo, ha sima page table bejegyzes keszul, amit a kernel page
fault eseten betolt a proci TLB tablazataba?

>  > 7. Mi tortenik, ha az user progi akkora memoriat szeretne atadni direct
>  >    IO-val, amennyi fizikai lapot nem tud csinalni az MmProbeAndLockPages?
>  >    Hol fog keletkezni es milyen hiba? Ugyanis ilyenkor az Irp ha jol
>  >    sejtem, el sem fog jutni a driverig feldolgozasra, mert a buffert nem
>  >    lehet memoriaba lockolni.
> 
> Szerintem a visszaadott erteked hibas lesz pl. NULL, es elszallsz.

Es mi van, ha en olyan sajat konvenciot hasznalok a driver es az user
progi kozott, mely 0 eseten success, -3 eseten fail? :) Hulyeseg, az teny,
de vagy van szabvanyos lekezelese egy hibanak, vagy nem tudom mi van...
Kek halal peldaul :))

>  > 10. Es vegul: hogy lehet azt megcsinalni, hogy elkuldok egy ioctl-t,
>  >    de ne kelljen megvarni hogy a driver kesz legyen vele. Kozben tudjak
>  >    tovabbi parancsokat kuldeni a drivernek, es egy ilyen tovabbi parancs
>  >    hatasara vegezzen az elso parancssal?
> 
> Dispatch fg.-nek elkuldod az elsot, az beallit egy flagat es kesz, ha 
> jon a masik akkor csinal valamit, akkor kuld vissza adatokat, vagy 
> valamit nem ertek...

Nem, igazad van, en vagyok kezdo :) Mar rajottem. Koszi!

> Tiszai Istvan
> http://www.tiszaii.tk

-- 
Valenta Ferenc <vf at elte.hu>   Visit me at http://ludens.elte.h u/~vf/
"Mar elobb is valaszoltam volna a leveledre, de nem irtal egyet sem..."
+ - re: re: want a Rolex? (mind) VÁLASZ  Feladó: (cikkei)

Minden napra egy Rolex?
Vagy ketto?
Egyszer lattam egy ilyet: arra a kerdesre, hogy "hany ora van?", az 
illeto felhuzta a karjan az inget es megmutatta: "Tizenhat!"

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS