From: matthieu castet <[EMAIL PROTECTED]>

asbin ;-] wrote:
Roland Mas wrote:

Frederick Ros, 2004-05-28 09:08:02 +0200 :



Quoting "asbin ;-]" <[EMAIL PROTECTED]>:



Roland Mas wrote:
c'est hotplug qui doit lancer le script 2 fois, mais ça l'avait jamais fait avant alors je sais pas trop...


Non, c'est vrai .. avant ca le lancait 3 fois d'affilee ;)



 Je sais pas pourquoi, mais c'est en te lisant que j'ai trouvé la
solution.  Apparemment le contenu de
/etc/hotplug/usb/eagle-usb.usermap se retrouvait dupliqué dans
/etc/hotplug/usb.usermap.  Je suppose que c'était historique.  Si je
nettoie ce fichier, du coup le DSP n'est plus chargé qu'une seule
fois.

Roland.


Nan, c'est pas à cause de ça. Chez moi, /etc/hotplug/usb.usermap est vide, et hotplug lance quand même le script 2 fois.

J'ai une piste tout de même :
un petit 'ls /var/run/usb' me donne :
"%sys%devices%pci0000:00%0000:00:07.2%usb1%1-1 %sys%devices%pci0000:00%0000:00:07.2%usb1%1-1%1-1:1.0" donc le script est lancé 2 fois avec la variable REMOVER différente, donc sûrement une variable DEVICE différente...

J'ai pas vraiment le temps de voir ça maintenant, mais je pense que c'est vers là qu'il faut chercher...


on a REMOVER=/var/run/usb/$(readlink -f $SYSFS/$DEVPATH | sed -e 's;/;%;g')

hotplug est lancer pour chaque interface, actuelemnt on test si LAST_CHARS=`echo $DEVPATH | sed -e "s/.*\-.[^:]*//1"` est vide ou = :1.0,
donc on laisse le script se lancer 2 fois ...
D'ou les 2 remover <>...


Chez moi (debian instable c'est meme pire) le script est lancer 3 fois : une fois lors du demarage (qd le driver vient d'etre juste de charger le firmware) et puis 2 autre fois quand hotplug charge les periph deja branche ...


Fort de ces renseignements précieux, j'ai essayé de comprendre ce qui se passe chez moi. "/etc/init.d/hotplug start" charge un petit nombre de module tel que ohci_hcd. Certain vont se comporter comme des agents et gérer les évenements sur le périphérique qu'il contrôle. Chez moi ohci_hcd exécute /etc/hotplug/usb.agent quand je branche mon modem.

J'ai ajouté quelques lignes pour tracer les appels au script eagle-usb pour contrôler ses appels. Au début il était appelé 5 fois ! Avec l'obsolète /etc/hotplug/usb.usermap, 7 appels ; et sans /etc/hotplug/usb.usermap ni /etc/hotplug/usb/eagle-usb.usermap, encore 3 appels... Dans tous les cas je n'avais qu'un seul chargement du dsp car LAST_CHAR n'est jamais nul.

----------- extrait de usb.agent --------------
   # some devices have user-mode drivers (no kernel module, but config)
   # or specialized user-mode setup helpers
   MODPROBE=:
   for MAP in $MAP_USERMAP $HOTPLUG_DIR/usb/*.usermap
   do
------- fin extrait de usb.agent --------------

En fait eagle-usb.usermap fait doublon avec /lib/modules/<version-kernel>/modules.usbmap.
Je suppose que c'est l'installation du modules qui écrit ce fichier.
Après l'avoir supprimer, le script est lancé trois fois : LAST_CHAR vaut successivement 1.0, 1.1 et 1.2 (le hub et les deux prises non ?).

Mais tout ceci n'explique pas pourquoi le module est chargé plusieurs fois chez certaines gens.

----------- extrait de usb.agent --------------
if [ "$DEVPATH" != "" ]; then
 # probably, 2.6.x
 REMOVER=/var/run/usb/$(readlink -f $SYSFS/$DEVPATH | sed -e 's;/;%;g')
elif [ "$DEVICE" != "" ]; then
 # 2.4.x?
 REMOVER=/var/run/usb/$(echo $DEVICE | sed -e 's;/;%;g')
else
 # should not happen?
REMOVER=/var/run/usb/$(echo "$INTERFACE/$PRODUCT/$TYPE" | sed -e 's;/;%;g')
fi
------- fin extrait de usb.agent --------------

Si j'en crois les commentaires LAST_CHAR vaudra toujours NULL pour les noyau 2.4 (je ne peux plus tester, je l'ai retiré). Si les mêmes évenements sont générés, ils chargeront donc trois fois le module.

On pourrait peut-être remplacer
(je ne suis pas sûr que DEVICE est la même syntaxe que DEVPATH) :
  LAST_CHARS=`echo $DEVPATH | sed -e "s/.*\-.[^:]*//1"`
par
  if [ "$DEVPATH" != "" ]; then
    # probably, 2.6.x
     LAST_CHARS=`echo $DEVPATH | sed -e "s/.*\-.[^:]*//1"`
  elif [ "$DEVICE" != "" ]; then
    # 2.4.x?
     LAST_CHARS=`echo $DEVICE | sed -e "s/.*\-.[^:]*//1"`
  else
    # should not happen?
     exit
  fi


Deux questions :
 - Pour ceux qui constatent plusieurs chargements, noyau 2.4 ou 2.6 ?
 - Pour les noyaux 2.4, quel est la syntaxe de DEVICE ?

mcoolive.

_________________________________________________________________
Bloquez les fenêtres pop-up, c'est gratuit ! http://toolbar.msn.fr


Reply via email to