memory map driveru

Gratz Jaroslav xgratz01 na stud.fee.vutbr.cz
Středa Duben 18 15:24:33 CEST 2001


On Wed, 18 Apr 2001, Michl Ladislav wrote:

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

Celkem dobra dokumentace je tady
http://www.uwsg.indiana.edu/hypermail/linux/kernel/9603.1/0502.html
a tady
http://www.scs.ch/~frey/linux/memorymap.html

Myslim, ze je to zhruba presne to, co potrebujes. Jinak existuji dva
pristupy, jak alokovat par MB a namapovat to do user space. Alokovat pamet
postupne pomoci kmalloc(), ale pak nevim, jestli by to slo jednoduse
mapovat do linearniho adresoveho prostoru. Nebo zavolat jednou vmalloc,
coz alokuje jednotlive stranky vsude mozne a pomoci strankovani je mapuje
do linearniho adresoveho prostoru a v tom druhem linku je i priklad jak to
cele namapovat do user space. Jeste pozor na to, ze kdyz chces pouzivat
DMA potrebujes fyzickou adresu v pameti - virt_to_phys() - to se neda
pouzivat na pamet alokovanou pomoci vmalloc, tam se musi fyzicke adresy
(vsech jednotlivych stranek) zjistovat trochu sloziteji, v tom druhem
linku je popsano jak. Jo a jeste se nenech se zmylit tim, ze se tvrdi, ze
na pamet alokovanou pomoci vmalloc se neda pouzivat DMA, ono to jde, ale
kvuli fragmentaci jenom po jednotlivych strankach a vzdycky musis znat
fyzickou adresu stranky v pameti.

J.G.



Další informace o konferenci Linux