• [^] # Re: Drôle de surprise !

    Posté par . En réponse à la dépêche Sortie de la Debian Woody 3.0r3. Évalué à 2.

    > Hmm, kmodule, c pas un truc vieux sous RedHat?

    Non, ça été fait pour FC3 comme indiqué précédement (à cause de udev).


    > Attention, la je rigole bien: "qui est le *coeur* d'hotplug", ah bon, /sbin/hotplug, un script de 6 lignes est le coeur de hotplug ?

    D'accord, j'ai été rigolo.
    Je disait au début :
    $ cat /proc/sys/kernel/hotplug
    /sbin/hotplug


    Pour parler de ce qui est appelé par le noyau.
    Toi tu me montres un truc appelé en userland (/etc/rc.d/init.d/hotplug).


    > Mandrake, Debian, Suse, ... : Utilisation *complete* du projet hotplug pour la détection à chaud et au boot du matériel.

    Non. Mandrake fait comme Red Hat (depuis la 10.1).
    Pour SuSE, je ne sait pas.


    > A chaud, le kernel appelle le script /sbin/hotplug avec en argument le bus ou il a détecté un nouveau materiel, /sbin/hotplug appelle ensuite /etc/hotplug/bus.rc

    $ ll /etc/hotplug/bus.rc
    ls: /etc/hotplug/bus.rc: Aucun fichier ou répertoire de ce type

    De plus, hotplug appelé depuis le noyau n'utilise jamais /etc/hotplug/*.rc (ici en tout cas).

    Ici /sbin/hotplut appelle que les fichiers :
      DIR="/etc/hotplug.d"

      for I in "${DIR}/1ドル/"*.hotplug "${DIR}/"default/*.hotplug ; do

      J'ai :
      $ find /etc/hotplug.d/ -iname "*.hotplug"
      /etc/hotplug.d/default/05-wait_for_sysfs.hotplug
      /etc/hotplug.d/default/10-udev.hotplug
      /etc/hotplug.d/default/20-hal.hotplug
      /etc/hotplug.d/default/default.hotplug

      Puis default.hotplug appelle /etc/hotplug/AGENT.agent

      Dans les fichiers /etc/hotplug/*.agent j'ai :

      * /etc/hotplug/scsi.agent :
        TYPE=$(cat $TYPE_ATTR)
        case "$TYPE" in
        # 2.5.51 style attributes; <scsi/scsi.h> TYPE_* constants
        0) TYPE=disk ; MODULE=sd_mod ;;
        # FIXME some tapes use 'osst' not 'st'
        1) TYPE=tape ; MODULE=st ;;
        2) TYPE=printer ;;
        3) TYPE=processor ;;
        4) TYPE=worm ; MODULE=sr_mod ;;
        5) TYPE=cdrom ; MODULE=sr_mod ;;
        6) TYPE=scanner ;;
        7) TYPE=mod ; MODULE=sd_mod ;;
        8) TYPE=changer ;;
        9) TYPE=comm ;;
        14) TYPE=enclosure ;;
        esac
        if [ "$MODULE" != "" ]; then
        mesg "$TYPE at $DEVPATH"
        modprobe $MODULE
        else


      Pas de détection matériel. Le noyau qui a lu le bus SCSI dit a hotplug qu'il y a un périphérique type printer, cdrom ou disk... Ce'est pas hotplug qui a "détecté" ça.


      * /etc/hotplug/ieee1394.agent
        # on 2.4 systems, modutils maintains MAP_CURRENT
        if [ -r $MAP_CURRENT ]; then
        load_drivers ieee1394 $MAP_CURRENT "$LABEL"
        fi

      pas de MAP_CURRENT sous Linux 2.6. C'est-à-dire avec module-init-tools. Mais Debian doit être avec modutils pour être compatible Linux 2.4 (comme je l'ai sous-entendu plus haut). Ça regarde Debian.


      * /etc/hotplug/input.agent
        if [ -r $MAP_CURRENT ]; then
        load_drivers input $MAP_CURRENT "$LABEL"
        fi



      * /etc/hotplug/usb.agent :
        # on 2.4 systems, modutils 2.4.2+ maintains MAP_CURRENT
        # ... otherwise we can't rely on it (sigh)
        case "$KERNEL" in
        2.4.*|2.5.*|2.6.*)
        if [ -r $MAP_CURRENT ]; then
        load_drivers usb $MAP_CURRENT "$LABEL"
        fi;;
        *)


        # cope with special driver module configurations
        # (mostly HID devices, until we have an input.agent)
        # not needed on 2.6 - they are loaded by hotplug
        case "$KERNEL" in
        2.6.* )
        : nothing
        ;;


        # 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
        if [ -r $MAP ]; then
        load_drivers usb $MAP "$LABEL"


      $ ll /etc/hotplug/usb/*.usermap
      ls: /etc/hotplug/usb/*.usermap: Aucun fichier ou répertoire de ce type



      En gros sous Linux _2.6_, ça ne charge jamais de module. Sauf pour SCSI mais ce n'est pas de la détection matériel. C'est le noyau qui a fait la détection, puis le communique à hotplug pour configurer la matériel.


      > Pour la détection au boot, c'est encore plus con, on appelle les scripts *.rc qui scannent chaque bus a la recherche du matos et ils chargent les modules de chaque matériel détecté(usb, pci, ...).

      Sous Linux 2.4 et pour certain...
      De plus, ce n'est pas du "hotplug" mais si le projet hotplug fournis les scripts.

      > Redhat/Fedora: on fait bande a part, on prend ce qui nous interesse dans hotplug et on fait tout a notre sauce histoire d'etre bien incompatible avec le reste de la planete.

      C'est du pure FUD. Renseigne toi 2 secondes. La méthode Debian, est la vieille méthode. De plus cette méthode "pue" car ça charge plein de modules pour rien.

      Exemple de ma dernière expérience (catastrophique) Debian : ( http://linuxfr.org/~ehoebadoag/15279.html(...) )
        Je regarde /proc/modules juste après le boot et j'ai 58 modules de chargé ! Je n'ai pas usb et pourtant il y a des modules usb de chargés, etc. Je comprend maintenant pourquoi on explique très tôt qu'il faut recompiler un noyau...


      Ici j'ai 33 modules dont le réseau alors que j'avais pas le réseau sous debian (normal, je l'avais pas configuré). Dans ces 34, je retire sch_tbf, pppoatm, ppp_generic, atm, unicorn_pci_atm et dm_mod que je n'avais pas sous Debian et j'ai au final, 31 modules de trop sous Debian !
      Tu trouves ça "moderne" ?

      Fedora applique la nouvelle méthode. Hotplug sert à communiquer et configurer le matériel. Pas à le détecter. C'est le noyau qui doit détecter le matériel (sans charger les modules). C'est aux autres applis (donc hald qui va prendre une place de plus en plus importante) d'utiliser ces informations pour, pourquoi pas, charger un module.
      Debian est _toujours_ en retard.
      Ce que fait Debian, n'est pas la référence.