memory map driveru

Michl Ladislav xmichl03 na stud.fee.vutbr.cz
Středa Duben 18 08:10:06 CEST 2001


On Wed, 18 Apr 2001, Jaroslav Gratz wrote:

> On Tue, 17 Apr 2001, Michl Ladislav wrote:
>
> > zarizeni ocekava pole deskriptoru (architekrura MIPS, velikost stranky
> > 4 kB) a na adresu jimi urcenou sype pres DMA data. funguje to asi tak, ze
> > natahne prvni deskriptor a na adresu jim urcenou prenese 4kB dat, pak
> > vezme dalsi deskriptor atd. tohle by se dalo zaridit pres get_free_page,
> > ale zarizeni musi podporovat mmap a ja nevim jak takto alokovanou pamet
> > mapovat ven. dalsi moznost je alokovat linearni pamet, ale tam jednak
> > nevim jak ziskat deskriptory na jednotlive stranky a taky se vzhledem
> > k fragmentaci alokace nemusi vzdy zdarit - jde o nekolik megabyte. jak z
> > toho ven?
>
> Co na to jit od lesa a nejdriv pamet alokovat a pak z ni teprve vyrobit
> ty deskriptory (BTW to je presne co, jenom fyzicka adresa v pameti nebo i
> neco dalsiho?). Neco jako:
>
> ps = getpagesize();
> buf = malloc(potrebna_pamet + ps);
> mlock(buf, potrebna_pamet + ps);
> if (buf & ps - 1) buf = (buf & ~(ps - 1)) + ps;
> for (i = 0; i < potrebna_pamet; i += ps)
>   {
>     pa = virt_to_phys(buf + i); /*virt_to_phys je v <asm/io.h>*/
>     /*Z fyzicke adresy vyrobit deskriptory pro zarizeni*/
>   }

no, mozna to je tim, ze jsem se prave probudil, ale moc to nechapu... aha,
to bude zpusob, jak zarovnat pamet na velikost stranky.

> Pak se cely buffer da normalne nmapnout, protoze pri pristupu pres
> logickou adresu buf + x se o vsechno postara strankovani. Jenom si nejsem
> jisty, jestli nahodou kernel nekdy nepresunuje mlocknute stranky fyzicky v
> pameti, pak by to fungovalo jenom chvili :) Nicmene nenapada me zadny
> rozumny duvod, proc by se to melo delat, tak snad ne.

no, to je jedna z veci, ktere bych rad pochopil protoze pokus/omyl mi
neprijde jako dobry zpusob, jak psat drivery. ja jsem jeste nikdy nic
takoveho nepsal, dokumentace je fakt docela malo a jine ovladace se o
deskriptory nestaraji.

hezky den,
ladislav michl



Další informace o konferenci Linux