Bonjour,
Sur un ordinateur avec deux cartes réseaux identiques, ( eth0
et eth1
), je voudrais charger un driver différent sur chaque interface.
Mais quand je charge le driver pour eth0
, il détecte aussi eth1
et se l'accapare, m'empêchant ainsi de charger mon autre driver.
Comment résoudre ce problème ?
Voici plus de détails:
L'ordinateur est une single-board-computer au format VME avec deux interfaces Intel Pro/100.
Je voudrais charger e100
(driver Linux) sur eth0
et ec_e100
(driver temps-réel pour EtherCAT) sur eth1
.
Il n'y a pas de disque dur, aussi l'ordinateur démarre Debian 6.0 i686 en réseau.
Il démarre en PXE/TFTP via eth0
, il télécharge le noyau puis initrd
. Il trouve le driver e100
dans initrd
, le charge pour pouvoir initialiser le réseau et monter sa racine en NFS.
Le module e100
ne peut plus être déchargé sous peine de bloquer l'ordinateur puisqu'il n'aura plus accès à sa racine.
Au cours de l'init, il faut donc je charge le module e100
uniquement sur eth0 et que je laisse eth1 libre pour pouvoir charger l'autre module plus tard.
Est ce qu'il y a une méthode standard pour faire ca ? Ou bien est ce que je dois modifier le code du driver e100
(ce que je souhaiterai éviter) ?
Merci d'avance pour votre aide.
# argument de boot du kernel, ça fonctionne ?
Posté par nono14 (site web personnel) . Évalué à 3.
eth0=e100
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
# udev, alias, modprobe et compagnie
Posté par NeoX . Évalué à 2.
je ne sais pas si ca entre en jeu au moment des drivers chargés par l'initrd
mais il fut un temps ou on pouvait blacklister un module, ou lui dire qu'il ne se charge pour pour telle ou telle carte.
on doit donc pouvoir specifier quelque part que eth0=e100 et eth1=ec_e100
de memoire le fichier contenait des lignes comme
[^] # Re: udev, alias, modprobe et compagnie
Posté par totof2000 . Évalué à 3. Dernière modification le 05 novembre 2011 à 10:29.
J'ai ça chez moi dans /etc/modprobe.conf :
# Probe PCI
Posté par ninis666 . Évalué à 1.
À mon humble avis (les avis, c'est comme les trouducu, tout le monde en a un ;) ), je ne crois pas que ça soit possible sans modifier / configurer le driver de ton NIC : dans un driver qui fait du "probe PCI", tel que celui de ton NIC, il va détecter tous les devices PCI qu'il peut traiter (par l'intermédiaire des vendorID / deviceID) : si tes 2 cartes apparaissent dans un même driver, elles vont être gérées par celui-ci. Je pense donc les contournements avec les modprobe / modules.conf ne marcheront pas ... Faudrait voir si c'est faisable de modifier les 2 drivers pour ne gérer que les interfaces dont tu passerais la mac address par exemple.
# OK je vais hacker les drivers
Posté par koopa . Évalué à 1.
Je remercie chacun de vous pour vos avis, mais je crois que c'est ninis666
qui a raison: ca se passe directement au niveau du probe PCI et donc je vais être obligé de hacker les drivers.
Je reviendrai poster les résultats de mon expérience dans ce thread.
[^] # Re: OK je vais hacker les drivers
Posté par NeoX . Évalué à 2.
avant de modifier/recompiler les modules/drivers
ce serait mieux d'utiliser ce que font les autres (c'est ainsi plus facile à maintenir à la mise à jour du noyau)
http://www.linuxquestions.org/questions/linux-general-1/module-load-order-648599/
[^] # Re: OK je vais hacker les drivers
Posté par totof2000 . Évalué à 4.
Eh bien non, il n'a pas raison. Normalement modprobe.conf est bien la pour forcer tel ou tel driver pour telle ou telle interface.
Essaie avant de mettre en doute.
[^] # Re: OK je vais hacker les drivers
Posté par koopa . Évalué à 0.
Moi je regarde dans le manuel de
modprobe.conf
et demodprobe
, et je constate qu'il n'y a aucun moyen externe d'empêcher le driver d'initialiser les deux cartes identiques.Voici un essai pour le prouver.
Le système est Debian 6.0.3 / i386 dans VirtualBox avec deux cartes Intel Pro/1000 identiques.
On voit bien que le driver exécute
e1000_probe
pour chaque carte et donc c'est probablement cette fonction que je vais modifier pour arriver à mes fins. Je vais ajouter un paramètre au module pour sélectionner la carte que je veux initialiser.[^] # Re: OK je vais hacker les drivers
Posté par NeoX . Évalué à 2.
essaye de la faire à l'envers
charge le driver eth1 (ec_e100) AVANT celui de eth0 (e100)
ainsi e100 ne pourra pas prendre eth1 car il est deja géré par un autre module
[^] # Re: OK je vais hacker les drivers
Posté par ninis666 . Évalué à -1.
On est obligé de modifier le driver en commentant certaines entrés référencées par la struct "pci_driver" : il y a une table listant tous les devices PCI que le driver doit gérer. Les bidouilles avec modprobe / depmod ne peuvent pas marcher dans ce cas précis ....
Comme dirait l'autre, "get things done !" : ne donnez votre avis que sur les sujets que vous maîtrisez / avez déjà fait !
# bien relire la documentation
Posté par koopa . Évalué à 0.
En fait en relisant la documentation Ethercat Master 1.5.0, section 4.2 Native EtherCAT Device drivers, j'ai compris qu'il faut charger le driver ec_e100 à la place du driver e100, car le driver ec_e100 peut aussi être utilisé pour faire de l'Ethernet standard.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.