From: matthieu castet <[EMAIL PROTECTED]>
Cyril Olivier MARTIN wrote:
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 ?).


tu oublis qu'au demarage c'est /etc/hotplug/usb.rc qui est lancer et ca donne :
----------------------------------
for device in /sys/bus/usb/devices/[0-9]*; do
                    DEVPATH=${device#/sys/}
                    if [ -f $device/idVendor ]; then
PRODUCT="$(cat $device/idVendor)/$(cat $device/idProduct)/$(cat $device/bcdDevice)"
                         if [ -f $device/bDeviceClass ]; then
TYPE="$((0x$(cat $device/bDeviceClass)))/$((0x$(cat $device/bDeviceSubClass)))/$((0x$(cat $device/bDeviceProtocol)))"
                         fi
# in case the device may not care about $INTERFACE
                         /etc/hotplug/usb.agent

# try each interfaces if any (TYPE=0/* case only?)
                         for intf in $device/[0-9]*; do
                             DEVPATH=${intf#/sys/}
                             if [ -f $intf/bInterfaceClass ]; then
                                 # $INTERFACE will be updated in usb.agent
                                 /etc/hotplug/usb.agent
                             fi
                         done
                    fi
                done
--------------------------------
le resultat chez moi est en remplacant les appel a hotplug par des echo $DEVPATH
bus/usb/devices/2-1
bus/usb/devices/2-1/2-1:1.0
bus/usb/devices/2-1/2-1:1.1
bus/usb/devices/2-1/2-1:1.2
d'ou les 2 passages dans le script : une fois avec LASTCHAR null et l'autre avec :1.0

Oui c'est vrai.
J'ai passé rapidement cette partie du script car je ne l'exécute pas.
Je sors prématurement à cause de ce bout de code. Là je n'ai pas trop compris, ils font une distinction entre cold plug et hot plug...

       # synthesize hotplug events if we can
       # we need (non-bash) programs to parse descriptors.
       LISTER=`which usbmodules`
       if [ "$LISTER" = "" -o ! -f /proc/bus/usb/devices ]; then
               echo "** can't synthesize root hub events"
               return
       fi

Enfin c'est donc à cause de cela que je ne charge qu'une seule fois le dsp (et que je n'attends sa synchronisation qu'une seule fois).

Pour résumer on a deux problèmes bien distincts :
1 - /etc/hotplug/usb/eagle-usb est appelé plusieurs fois (et c'est normal), mais il semblerait qu'on l'appel trop de fois même si c'est sans conséquence. 2 - Un test dans ce fichier doit nous assurer que l'on ne charge qu'une seule fois le code dsp dans le modem.

Pour le second, si j'ai bien compris ce qu'a écrit Matthieu il faudrait remplacer
  if [ -z "$LAST_CHARS" ] || [ "x$LAST_CHARS" = "x:1.0" ] ; then
par
  if [ "x$LAST_CHARS" = "x:1.0" ] ; then
J'ai bien compris ?
Question annexe, si on a deux modems, on injecte le code dsp dans les deux modems en même temps ? Si oui, alors en branchant un second modem je désynchronise le premier...


Pour le premier, je reviens sur ma première conclusion, à savoir supprimer eagle-usb.usermap. Il est nécessaire, mais il faudrait peut-être renommé eagle-usb en eagle-usb.post ou eagle-usb.dsp.

Trace d'exécution chez moi :
 -  /etc/init.d/hotplug restart lance /etc/hotplug/usb.rc
- /etc/hotplug/usb.rc monte les partitions et charge les modules concernant l'USB dont usbcore (et que ça chez moi, pas de COLD). - (HOT) usbcore (drivers/usb/core/usb.c) regarde "/proc/sys/kernel/hotplug" et lance "/sbin/hotplug usb" qui lance "/etc/hotplug.d/default/default.hotplug usb" qui lance "/etc/hotplug/usb.agent" - "/etc/hotplug/usb.agent" appelle load_driver d'abord sur /lib/modules/<kernel-version>/modules.usbmap puis sur /etc/hotplug/usb/eagle-usb.usermap. - load_driver regarde si le périphérique matche une entrée de la map, si oui il exécute le script associé (toujours eagle-usb dans notre cas), et APRÈS il essaye de charger le module homonyme.

Donc eagle-usb est exécuté pour rien plusieurs fois parce qu'il est référencé par /lib/modules/<KVERS>/modules.usbmap. Ce dernier fichier est correct, sans lui on ne chargerait pas le module eagle-usb. Puis eagle-usb est exécuté comme prévu car il est référencé par eagle-usb.usermap.

Ça marche bien comme ça mais on éviterait un peu de travail inutile en renommant eagle-usb en eagle-usb-quelquechose, et en reportant les modifications sur eagle-usb.usermap.

mcoolive.

_________________________________________________________________
Hotmail : un compte GRATUIT qui vous suit partout et tout le temps ! http://g.msn.fr/FR1000/9493


Reply via email to