Outils pour utilisateurs

Outils du site


user:pascal_cabaud:blog:marvell_88e8056_et_sk98lin

sk98lin et Marvell 88e8056

C'est bien connu (enfin, c'est M. Google qui le dit), GNU/Linux se comporte assez mal avec ces cartes réseau.

Ça se manifeste après quelques transferts : plus de connexion, ifconfig(8) indique des erreurs, netstat(8) aussi, ping(8) est muet… Pour remettre en état l'interface, utiliser ifdown et ifup mais ça n'est pas viable. Une autre méthode consiste à décharger puis recharger le module (skge dans mon cas).

Si on suit la documentation, on va sur le site du constructeur http://www.marvell.com/drivers/search.do, on choisit Network Controller puis Linux Kernel 2.4.20 or higher et on télécharge le fichier install_v10.60.2.3.tar.bz2. Pas la peine, choisissez plutôt Linux 2.6 - Fedora puis Kernel 2.6.x Linux Driver Install Package for Yukon Devices.

Dans l'archive, bien lire le README pour voir que :

  • les sources du noyau doivent être dans /usr/src/linux (un symlink suffit)
  • il faut évidemment pas mal de paquetages pour pouvoir compiler

Sur une Debian à jour, pour compiler un noyau, il faut : linux-patch-debian-2.6.25, linux-source-2.6.25, linux-support-2.6.25-2 et linux-tree-2.6.25 ; seul linux-source-2.6.25 va nous servir dans notre cas. Il nous faut aussi un GCC, qui plus est, la version la plus proche possible de celle ayant compilé notre noyau actuel. Installer build-essential suffit.

Une fois les sources installées, dans /usr/src, extraire l'archive et faire le lien symbolique.

Retournons aux sources fournies par Marvell : lançons le script install.sh. Suivant ce que l'on va vouloir faire, il est faut être root (sudo(8) est votre ami). En effet, le script propose :

  • de compiler et d'installer le module
  • de générer un patch

Optons pour la première solution. Au passage, on demande au script de supprimer les modules existants (skge et sky2). À la fin, on obtient un tout beau tout neuf /lib/modules/2.6.25-2-686/kernel/drivers/net/sk98lin/sk98lin.ko.

Sur une machine SMP, ajouter noapic en argument au noyau (dans /etc/lilo.conf, ajouter une ligne append=“noapic” ; dans /grub/menu.lst, ajouter noapic sur la ligne kernel) et rebooter.

Plus qu'à tester, avec iperf par exemple :

$ iperf -c 172.17.7.248 -t 6000 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 172.17.7.248, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  5] local 172.17.3.50 port 35154 connected with 172.17.7.248 port 5001
[  4] local 172.17.3.50 port 5001 connected with 172.17.7.248 port 37376
   [ ID] Interval       Transfer     Bandwidth
[  4]  0.0-5999.8 sec  64.4 GBytes  92.2 Mbits/sec
[  5]  0.0-6000.0 sec  35.6 GBytes  50.9 Mbits/sec
user/pascal_cabaud/blog/marvell_88e8056_et_sk98lin.txt · Dernière modification: 2008/08/25 23:08 par Pascal Cabaud