Re: Programmation systeme HELP !!

Top Page

Reply to this message
Author: habib.bouaziz-viallet
Date:  
To: guilde
Subject: Re: Programmation systeme HELP !!
On Tue, 13 Sep 2005 09:10:22 +0200
"habib.bouaziz-viallet" <habib.bouaziz-viallet@???> wrote:

> On Mon, 12 Sep 2005 20:30:12 +0200
> JLM aka cityhunter <jlm_devel@???> wrote:
>
> > habib.bouaziz-viallet a écrit :
> >
> > >Bonsoir la liste Guilde !
> > >
> > >Je suis en train de modifier un pilote de port série synchrone sur
> > >une plateforme légère (Cf. developer.axis.com) pour qu'il s'adapte
> > >à un codec particulier (CS4334)
> > >
> > >l'objectif etant de faire ceci : ./madplay < mon_morceau.mp3 |
> > >./transfert_sser
> > >
> > >le programme "transfert_sser" ouvre le port serie synchrone
> > >(/dev/sser0), recoit le flux standard en entrée et le redirige vers
> > >/dev/sser0. Le codec est connecté en hard sur ce port série.
> > >
> > >Mon problème : C'est que *kmalloc() échoue dans mon code pilote de
> > >/dev/sser0 au bout de quelques appels (j'en suis sûr mais je ne
> > >peux pas donner de copie d'ecran vu qu'il n'y a pas d'écran ...)
> > >
> > >La question : Y a t'il des précautions avec *kmalloc() ?? ca fait
> > >déja longtemps que j'y suis et je cherche de l'aide aussi sur la
> > >liste de axis
> > >
> > >HELP !!, Habib.
> > >
> > >
> > >
> > >
> > >
> Bonjour.
>
> > The data sizes available are generally powers of two. In the 2.0
> > kernel, the available sizes were actually slightly less than a power
> > of two, due to control flags added by the management system. If you
> > keep this fact in mind, you'll use memory more efficiently. For
> > example, if you need a buffer of about 2000 bytes and run Linux 2.0,
> > you're better off asking for 2000 bytes, rather than 2048.
> > Requesting exactly a power of two is the worst possible case with
> > any kernel older than 2.1.38 -- the kernel will allocate twice as
> > much as you requested. This is why /scull/ used 4000 bytes per
> > quantum instead of 4096
> > In any case, the maximum size that can be allocated by /kmalloc/ is
> > 128
> > KB -- slightly less with 2.0 kernels. If you need more than a few
> > kilobytes, however, there are better ways than /kmalloc/ to obtain
> > memory, as outlined next.
> >
> > kmalloc a aussi d'autres inconvénients il alloue des chuncks de
> > mémoires : si tu spécifie une taille trop grande il se peut que
> > l'allocation échoue si aucun chunk de mémoire n'est assez grand (si
> > la
> >
> > mémoire est très fragmentée
> >
> >
> >     get_free_page and Friends

> >
> > If a module needs to allocate big chunks of memory, it is usually
> > better to use a page-oriented technique. Requesting whole pages also
> > has other advantages, which will be introduced later, in "The mmap
> > Device Operation" in Chapter 13, "mmap and DMA".
> >
> >
> > http://www.xml.com/ldd/chapter/book/ch07.html
> Trés bonne réf mais je n'ai pas le bouquin. J'apprends enfin ce que
> veut dire GFP_xxx comme argument de *kmalloc() et je crois que mon
> problème vient d'ici.
> Je m'interroge sur mon système ; il n'y a pas par défaut sur ma
> plateforme de zone de swap (je peux en monter en FLASH mais pas
> recommendé) est ce que mon problème d'alloc ne viendrait pas d'ici ?
> Je ne suis pas un gourou de la mémoire virtuelle sous linux mais j'ai
> cru avoir lu que la mémoire du noyau n'est pas swappable ...
> Je vais monter une zone de swap aujourd'hui et on verra
> >
> >
> > dans un de mes drivers j'avais besoin de grosse tailles de mémoire
> > pour faire du DMA, j'allouais des petits chunks de pages que je
> > linkais entre eux pour faire du scatter gather (sur les périfs le
> > supportant on passe directement la liste et le dma s'éffectue au fur
> > et à mesure, remplissant les différents chunks... sur les dma ne le
> > supportant pas il existe en général deux jeux de registres un jeu
> > dit"working" et un jeu de "programation" en général on peut
> > programmer celui de programmation pendant que le working et en
> > travail, et on peut programmer automatiquement le swap entre les
> > deux.... sur l'IT de fin de dma on reprogramme celui de
> > programmation et ainsi de suite....) il faut mieux utiliser des
> > buffers tournants plutôt que d'allouer/désallouer....
> Trop compliqué pour moi.
> >
> >
> >
>
> Merci, Habib
>
>
>
>



Bonjour Bonjour !

Je retire tout ce que j'ai dit sur l'échec de *kmalloc(). J'ai tout
simplement mal compris le mécanisme de copie de données utilisateur <-->
pilote (au moment d'un read(), ioctl() ... etc) et notamment de l'usage
de access_ok(). Mon application plantait "dans le grave" ... !

Merci cityhunter, Habib.