Bonjour,
Voilà j'ai installé la FC8 sur mon portable. Et en même temps je me suis commander une carte pcmcia wifi. Et comme j'avais pas trop d'idée j'ai fait simple. j'ai été sur le site d'un fourniseur internet. Sur son site j'ai fait une recherche avec comme filtre: carte pcmcia, pas trop cher et populaire. Pour être sur de ne pas me tromper et de l'avoir dans les 48 heures car en stock.
voila j'ai installé la FC8 sur le portable. j'ai démarré une console. et j'ai lancé la commande iwconfig
et là le bonheur :
# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
irda0 no wireless extensions.
sit0 no wireless extensions.
wmaster0 no wireless extensions.
wlan0 IEEE 802.11g ESSID:""
Mode:Managed Channel:0 Access Point: Not-Associated
Tx-Power=0 dBm
Retry min limit:7 RTS thr:off Fragment thr=2352 B
Encryption key:A4AC-5B9B-DE
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
cool!!
ensuite je fait un "iwlist wlan0 scan" pour voir si je reçois mon routeur wifi.
# iwlist wlan0 scan
wlan0 Interface doesn't support scanning : Network is down
et là c'est le drame!
bizarre j'ai une interface wlan0 mais ça marche pas.
faisons une petite investigation:
j'ai lancé la commande suivante:
# lsmod
lsmod me permet de lister les modules chargés (souvent de driver de matériel)
si je fais un lsmod tout seul ça me fait une belle jambe j'ai une liste incomprehensible de modules.
nous allons utiliser modinfo.
modinfo va me permettre d'avoir des informations sur un module.
par exemple si je fait:
# modinfo ext3
je vais avoir des infos sur le module qui gère le système de fichier ext3:
# modinfo ext3
filename: /lib/modules/2.6.23.1-49.fc8/kernel/fs/ext3/ext3.ko
license: GPL
description: Second Extended Filesystem with journaling extensions
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
depends: mbcache,jbd
vermagic: 2.6.23.1-49.fc8 SMP mod_unload 586 4KSTACKS
mais j'ai toujours un problème : je ne sais pas quel est le module qui m'interesse.
quand je fait un lsmod j'obtiens des lignes de ce type:
# lsmod
[...]
ext3 110665 2
[...]
seule la première colonne m'intéresse, car c'est le nom du modules.
il faut que je me débrouille pour récupérer que la première colonne.
on va utiliser le langage awk, qui peut être utilisé en ligne de commande.
je fais donc cette commande pour tester:
lsmod | awk '{print $1}'
j'ai donc deux commandes séparées par un "|" ou pipe. il va me permettre de renvoyer le résultat de la première commande vers la seconde. ici la permière commande est le lsmod. on connait maintenant. et la seconde est awk '{print $1}'. Ceci me permet de récuperer la premiere colonne de chaque ligne renvoyée par le "|". Par défaut awk considère l'espace ou la tabulation comme un séparateur de champs/colonne et $1 correspond à la première colonne, $2 à la seconde et ainsi de suite. Oui je sais y a aussi la commande cut gnagna et gnagni.
donc cela donne :
# lsmod | awk '{print $1}'
[...]
scsi_mod
ext3
jbd
mbcache
uhci_hcd
[...]
ça régle toujours pas notre problème mais on approche. maintenant on va coupler la commande "lsmod | awk '{print $1}'" avec la commande "modinfo"
# lsmod | modinfo $(awk '{print $1'})
cela va vous donner les informations de tout les modules. Mais trop d'info tue l'info. Donc on n'est pas plus avancé. couplons cette commande avec grep pour rechercher une ligne contenant je sais pas moi euh... wireless ...par exemple
# lsmod | modinfo $(awk '{print $1}') | grep wireless
modinfo: could not find module Module
filename: /lib/modules/2.6.23.1-49.fc8/kernel/drivers/net/wireless/b43/b43.ko
description: Broadcom B43 wireless driver
filename: /lib/modules/2.6.23.1-49.fc8/kernel/net/wireless/cfg80211.ko
description: wireless configuration support
ah je vois qu'il y a un module b43.ko et je vois Broadcom B43 wireless driver.
je fais donc:
# modinfo b43
filename: /lib/modules/2.6.23.1-49.fc8/kernel/drivers/net/wireless/b43/b43.ko
license: GPL
author: Michael Buesch
author: Stefano Brivio
author: Martin Langer
description: Broadcom B43 wireless driver
alias: pcmcia:m02D0c0448f*fn*pfn*pa*pb*pc*pd*
alias: ssb:v4243id0812rev0A*
alias: ssb:v4243id0812rev09*
alias: ssb:v4243id0812rev07*
alias: ssb:v4243id0812rev06*
alias: ssb:v4243id0812rev05*
depends: mac80211,ssb,input-polldev,rfkill
vermagic: 2.6.23.1-49.fc8 SMP mod_unload 586 4KSTACKS
parm: pio:enable(1) / disable(0) PIO mode (int)
parm: bad_frames_preempt:enable(1) / disable(0) Bad Frames Preemption (int)
parm: fwpostfix:Postfix for the .fw files to load. (string)
parm: hwpctl:Enable hardware-side power control (default off) (int)
parm: nohwcrypt:Disable hardware encryption. (int)
voilà je crois que j'ai trouvé mon modules
de plus je lance la commande lspci qui va me permettre de connaitre le materiel installé sur ma machine:
# lspci
[...]
02:00.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)
donc mon système à bien détecté le materiel et à l'air d'avoir bien lancé le bon module. (je dis bien, à l'air).
je fait :
# lsmod | grep b43
b43 129637 0
ssb 30021 1 b43
rfkill 9297 1 b43
mac80211 112461 1 b43
input_polldev 7369 1 b43
oui le module en question est bien chargé
bien que pourrais je faire d'autre?
rechargé le module et voir ce qu'il se passe dans les log
donc je fait un "modprobe -r b43 " pour le déchargé
je refais :
# lsmod | grep b43
rien
ok il est bien arrété
j'ouvre une nouvelle console texte et je lance cette commande (je me met sous root , su - pour rappel)
# tail -f /var/log/messages
et sur l'autre console je fais:
# modprobe b43
et je regarde mes log sur l'autre console:
Nov 18 15:53:55 hebus kernel: ACPI: PCI Interrupt 0000:02:00.0[A] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11
Nov 18 15:53:55 hebus kernel: ssb: Sonics Silicon Backplane found on PCI device 0000:02:00.0
Nov 18 15:53:55 hebus kernel: b43-phy0: Broadcom 4318 WLAN found
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: Firmware file "b43/ucode5.fw" not found or load failed.
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: Firmware file "b43/ucode5.fw" not found or load failed.
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).
Nov 18 15:53:55 hebus dhclient: wmaster0: unknown hardware address type 801
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: Firmware file "b43/ucode5.fw" not found or load failed.
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: Firmware file "b43/ucode5.fw" not found or load failed.
Nov 18 15:53:55 hebus kernel: b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).
Nov 18 15:53:55 hebus dhclient: wmaster0: unknown hardware address type 801
Nov 18 15:53:55 hebus dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 18 15:53:55 hebus dhclient: send_packet: Network is down
Nov 18 15:53:55 hebus dhclient: receive_packet failed on wlan0: Network is down
......oups!! ...
Y a un problème. Mais il est cool il me dit d'aller chercher un firmware sur
http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware
et de télécharger le bon firmware (version 4). j'obtient par la même occasion le nom du firmware en question :bcm43xx
bien... ça été plus facile d'acheter la carte pcmcia....
Bon la recherche internet commence (déjà j'ai un lien dans les logs) et j'ai de la chance sur le site fedora-fr.org y a quelqu'un qui a fait un tutoriel sur comment faire marcher une carte wifi avec le chipset bcm43xx la page se trouve ici:
http://doc.fedora-fr.org/wiki/Installation_du_wifi_-_belkin_(bcm43xx)
j'apprend aussi qu'il y a un projet pour que dans le futur et bien l'utilisation de la carte wifi soit aussi rapide que son achat.
Voilà ce que j'ai pu trouver j'ai essayer de le traduire en français.
Le projet en question:
Ce projet a commencé avec Andrew Miklas comme une réponse au refus de Broadcom de diffuser les specifications du chipset 43xx utilisé dans les routeurs Linksys(comme le WRT54G). Il y aurait semble t il quelque soucis avec la GPL et les binaires des pilotes Broadcom. En effet il y a une suspicion(1) comme quoi certaines sources GPL aurait été utilisée pour coder les firmwares bcm43xx. Une pétition a même été lancée pour convaincre Broadcom de la nécéssité de fournir des drivers libres ou au moins de fournir les spécifications(2).
Jusqu'à ce jour, Broadcom à refuser de fournir les spécifications ou les sources de ses drivers. Donc un projet a été créé pour écrire les spécifications du chipset bcm43xx et ainsi permettre à Linux de supporter nativement l'un des plus populaires chipset wifi.
Les spécifications:
L'équipe "bcm-specs" a fait du reverse engineering sur le chipset de la famille des 43xx de broadcom en faisant bien attention a analyser du code provenant de plusieurs revisions de driver Broadcom. Dans un premier temps l'équipe "bcm-specs" a partiellement traduit le code assembleur en C. Ceci leur à permis une meilleure comprehension du materiel ainsi que de ses fonctionalités. En utilisant cela ainsi qu'une amélioration/modification/contournement de Mac-On-linux pour permettre le proxying PCI, L'équipe "bcm-specs" à mieux compris comment le matériel fonctionnait et le résultat de ce travail se trouve à cette adresse:
http://bcm-specs.sipsolutions.net
Une fois les specifications trouvées il a fallu trouver une deuxième équipe de dévellopeur pour coder un pilote libre pour le chipset bcm43xx. Le travail de cette deuxième équipe se trouve à ces deux adresses:
http://bcm43xx.berlios.de
et
http://linuxwireless.org/ tiens j'ai déjà vu cette adresse quelque part (ah oui dans les log)
Voilà pour la petite histoire.
Maintenant passons à l'installation et à la configuration de la carte wifi.
donc pour rappel l'installation a été faite sur une Fedora Core 8
la carte : une PCMCIA Linksys wireless G avec comme numéro de Modèle: WPC54G
pour moi un lspci donne :
# lscpi
02:00.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)
# lspci -v
02:00.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)
Subsystem: Linksys WPC54G-EU version 3 [Wireless-G Notebook Adapter]
Flags: bus master, fast devsel, latency 64, IRQ 11
Memory at 24000000 (32-bit, non-prefetchable) [size=8K]
# lspci -nv
02:00.0 0280: 14e4:4318 (rev 02)
Subsystem: 1737:0048
Flags: bus master, fast devsel, latency 64, IRQ 11
Memory at 24000000 (32-bit, non-prefetchable) [size=8K]
donc les deux premières commandes me confirme bien que j'ai une carte avec un chipset Broadcom Corporation BCM4318 [AirForce One 54g]
la trosième commande me donne le numero de constructeur ainsi que le numero de la carte pci soit dans le même ordre 14e4 et 4318 et me donne le numero du constructeur soit 1737 et le numero de la carte PCI soit 0048 pour le sous système.
si je vais sur le site des developpeurs du chipset bcm43xx ici :
http://linuxwireless.org/en/users/Devices/PCI.
on devrait avoir une confirmation du type de materiel installé....ou non en effet si on regarde au début du tableau il y a la petite phrase qui peut faire mal : "Note: this list is still incomplete as not all drivers have information". pour moi ça a été le drame j'ai pas trouvé mon matériel.
bon passons
sur le site des developpeurs du chipset voilà ce qu'ils disent. le module b43 développé par eux et intégré dans le noyau linux ne permet pas seul de faire fonctionner la carte wifi. voilà pourquoi il me trouve bien une interface wlan0 mais ne va pas plus loin. pour aller plus loin il faut ajouter le firmware broadcom comme dit sur le site des dévellopeur du chipset (3)
le firmware broadcom pour le module b43 se trouve ici:
http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
une fois télécharger ils expliquent qu'il faut utiliser la commande "b43-fwcutter" pour extraire le fameux firmware du fichier de pilote.
la commande b43-fwcutter devrait être installée par défaut (elle semble être installée avec le système de dépendance à l'installe du module b43) sinon vous faite un
# yum install b43-fwcutter
Pour récupérer le firmware il faut faire de cette manière
Donc j'ai téléchargé ce fichier : broadcom-wl-4.80.53.0.tar.bz2
je le met dans le repertoire /usr/local/src pour travailler avec.
# mv ./broadcom-wl-4.80.53.0.tar.bz2 /usr/local/src
# cd /usr/local/src
je décompresse les sources:
# tar xjvf broadcom-wl-4.80.53.0.tar.bz2
broadcom-wl-4.80.53.0/
broadcom-wl-4.80.53.0/kmod/
broadcom-wl-4.80.53.0/kmod/wl_apsta_mimo.o
broadcom-wl-4.80.53.0/kmod/wl_apsta.o
broadcom-wl-4.80.53.0/nas
broadcom-wl-4.80.53.0/wl
broadcom-wl-4.80.53.0/WHERE_FROM
broadcom-wl-4.80.53.0/libbcmcrypto.so
je me déplace dans le répertoire fraichement décompressé
# cd broadcom-wl-4.80.53.0
# ls
kmod libbcmcrypto.so nas WHERE _FROM wl
le firmware se trouve dans le répertoire kmod
# cd kmod
# ls
wl_apsta_mimo.o wl_apsta.o
maintenant j'extrais le firmware avec la commande b43-fwcutter et le résultat je l'envois dans le répertoire /lib/firmware (en effet il semble que le module b43 cherche le firmware en question dans ce répertoire). Le fichier ou se trouve le firmware est wl_apsta.o
donc:
# b43-fwcutter -w /lib/firmware wl_apsta.o
This file is recognised as:
filename : wl_apsta.o
version : 351.126
MD5 : 9207bc565c2fc9fa1591f6c7911d3fc0
Extracting b43/ucode4.fw
Extracting b43/ucode5.fw
Extracting b43/ucode11.fw
Extracting b43/ucode13.fw
Extracting b43/pcm4.fw
Extracting b43/pcm5.fw
Extracting b43/b0g0initvals4.fw
Extracting b43/b0g0bsinitvals4.fw
Extracting b43/a0g0initvals4.fw
Extracting b43/a0g0bsinitvals4.fw
Extracting b43/b0g0initvals5.fw
Extracting b43/b0g0bsinitvals5.fw
Extracting b43/a0g0initvals5.fw
Extracting b43/a0g1initvals5.fw
Extracting b43/a0g0bsinitvals5.fw
Extracting b43/a0g1bsinitvals5.fw
Extracting b43/lp0initvals13.fw
Extracting b43/lp0bsinitvals13.fw
Extracting b43/b0g0initvals13.fw
Extracting b43/b0g0bsinitvals13.fw
Extracting b43/a0g1initvals13.fw
Extracting b43/a0g1bsinitvals13.fw
je vérifie le résultat de l'extraction (apparement le répertoire b43 a été créé dans /lib/firmware)
# ls /lib/firmware/b43/
a0g0bsinitvals4.fw a0g1initvals13.fw b0g0initvals4.fw ucode11.fw
a0g0bsinitvals5.fw a0g1initvals5.fw b0g0initvals5.fw ucode13.fw
a0g0initvals4.fw b0g0bsinitvals13.fw lp0bsinitvals13.fw ucode4.fw
a0g0initvals5.fw b0g0bsinitvals4.fw lp0initvals13.fw ucode5.fw
a0g1bsinitvals13.fw b0g0bsinitvals5.fw pcm4.fw
a0g1bsinitvals5.fw b0g0initvals13.fw pcm5.fw
il ne me reste plus qu'a tester:
je décharge le module b43
# modprobe -r b43
et je le recharge
# modprobe b43
biensur avant je n'avais pas oublier de lancer la commande tail -f /var/log/messages dans une deuxième console:
# tail -f /var/log/messages
Nov 18 17:06:16 hebus kernel: ACPI: PCI Interrupt 0000:02:00.0[A] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11
Nov 18 17:06:16 hebus kernel: ssb: Sonics Silicon Backplane found on PCI device 0000:02:00.0
Nov 18 17:06:16 hebus kernel: b43-phy0: Broadcom 4318 WLAN found
Nov 18 17:06:17 hebus kernel: Registered led device: b43-phy0:tx
Nov 18 17:06:17 hebus kernel: Registered led device: b43-phy0:rx
Nov 18 17:06:18 hebus kernel: input: Unspecified device as /class/input/input12
Nov 18 17:06:18 hebus kernel: ADDRCONF(NETDEV_UP): wlan0: link is not ready
Nov 18 17:06:18 hebus dhclient: wmaster0: unknown hardware address type 801
Nov 18 17:06:19 hebus dhclient: wmaster0: unknown hardware address type 801
Nov 18 17:06:19 hebus dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 18 17:06:19 hebus kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Nov 18 17:06:21 hebus avahi-daemon[2105]: Registering new address record for fe80::218:f8ff:fef1:7a64 on wlan0.*.
Nov 18 17:06:23 hebus dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 18 17:06:23 hebus dhclient: DHCPACK from 192.168.0.254
Nov 18 17:06:23 hebus avahi-daemon[2105]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.168.0.11.
Nov 18 17:06:23 hebus avahi-daemon[2105]: New relevant interface wlan0.IPv4 for mDNS.
Nov 18 17:06:23 hebus avahi-daemon[2105]: Registering new address record for 192.168.0.11 on wlan0.IPv4.
Nov 18 17:06:23 hebus NET[17194]: /sbin/dhclient-script : updated /etc/resolv.conf
Nov 18 17:06:23 hebus dhclient: bound to 192.168.0.11 -- renewal in 417232 seconds.
Ouaaaaaaaa ça marche
voyons voir un peu plus :
# ping www.google.fr
PING www.l.google.com (64.233.183.99) 56(84) bytes of data.
64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=1 ttl=244 time=146 ms
64 bytes from nf-in-f99.google.com (64.233.183.99): icmp_seq=2 ttl=244 time=146 ms
--- www.l.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 146.217/146.458/146.699/0.241 msdhclient: bound to
Cool!!
Bon Ok avant de charger le module, j'avais fait un "ifdown eth0" pour être sûr que c'est bien l'interface wlan0 qui fonctionne et j'avais configurer le fichier /etc/sysconfig/network-scripts/ifcfg-wlan0 pour configurer mon réseau:
# cat /etc/sysconfig/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcp
TYPE=Wireless
DHCP_HOSTNAME=hebus
MODE=managed
ESSID=xxxxxxxx
KEY=XXXXXXXXXXXXXXXXXXX
Yahn_ick qui vous écrit depuis son lit maintenant qu'il a le wifi.
1)site sur le problème GPL avec les firmwares Broadcom
http://lkml.org/lkml/2003/6/7/164
2) le site de la pétition :
http://www.petitiononline.com/BCM4301/petition.html) .... en fait y a plus rien ... broadcom n'a pas du entendre.
3) site des dév du chipset qui explique comment installer :
http://linuxwireless.org/en/users/Drivers/b43