Sunday, October 28, 2007

Tarjeta Broadcom e Instalación de SuSE 10.3

Recién salió OpenSuSE 10.3 y no pude evitar la tentación; lo instalé en la laptop.

Problemas hasta el momento:

El dispositivo wireless que supuestamente debería usar el driver bcm43xx no funcionaba.
Al usar ifup se obtenía esa lectura:

ifup eth1
eth1 device: Broadcom Corporation BCM4318 [AirForce One 54g]
802.11g Wireless LAN Controller (rev 02)
SIOCSIFFLAGS: No such file or directory
Starting DHCP Client Daemon on eth1... . . . . . no IP address yet...
backgrounding.
SIOCSIFFLAGS: No such file or directory
Cannot enable interface eth1.
interface eth1 is not up

Lo cual significaba que se necesita un archivo en algún lugar y el sistema lo está buscando.

En los mensajes del kernel se puede leer esto:

Oct 27 01:45:17 linux network: Checking for the NetworkManager:
Oct 27 01:45:17 linux network: Checking for the NetworkManagerDispatcher:
Oct 27 01:45:17 linux network: Checking for the DHCP DBUS Daemon:
Oct 27 01:45:17 linux network: Starting the DHCP DBUS Daemon
Oct 27 01:45:17 linux network: Starting the NetworkManagerDispatcher
Oct 27 01:45:17 linux dhcdbd: Started up.
Oct 27 01:45:17 linux network: Starting the NetworkManager
Oct 27 06:45:17 linux kernel: eth0: link down
Oct 27 06:45:17 linux kernel: ADDRCONF(NETDEV_UP): eth0: link is not ready
Oct 27 06:45:17 linux kernel: bcm43xx: PHY connected
Oct 27 01:45:18 linux firmware.sh[4391]: Cannot find firmware file 'bcm43xx_microcode5.fw'

NOTA: Observar que esta invocando ese script

Oct 27 06:45:18 linux kernel: bcm43xx: Error: Microcode "bcm43xx_microcode5.fw" not available or load failed.

Oct 27 06:45:18 linux kernel: bcm43xx: core_up for active 802.11 core failed (-2)
Oct 27 06:45:19 linux kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
Oct 27 01:45:20 linux SuSEfirewall2: Warning: ip6tables does not support state matching. Extended IPv6 support disabled.
Oct 27 01:45:20 linux SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
Oct 27 01:45:20 linux SuSEfirewall2: using default zone 'ext' for interface eth0
Oct 27 01:45:20 linux SuSEfirewall2: using default zone 'ext' for interface eth1
Oct 27 06:45:20 linux kernel: Netfilter messages via NETLINK v0.30.
Oct 27 06:45:20 linux kernel: nf_conntrack version 0.5.0 (2042 buckets, 16336 max)
Oct 27 01:45:20 linux SuSEfirewall2: batch committing...
Oct 27 01:45:21 linux SuSEfirewall2: Firewall rules successfully set
Oct 27 01:45:21 linux network: Checking for the NetworkManager:
Oct 27 01:45:21 linux network: Checking for the NetworkManagerDispatcher:
Oct 27 01:45:21 linux network: Checking for the DHCP DBUS Daemon:
Oct 27 01:45:21 linux network: Shutting down the NetworkManager
Oct 27 06:45:22 linux kernel: bcm43xx: Error: Microcode "bcm43xx_microcode5.fw" not available or load failed.
Oct 27 06:45:22 linux kernel: bcm43xx: core_up for active 802.11 core failed (-2)
Oct 27 01:45:22 linux firmware.sh[4561]: Cannot find firmware file 'bcm43xx_microcode5.fw'
Oct 27 06:45:22 linux kernel: SoftMAC: Associate: Scanning for networks first.
Oct 27 06:45:22 linux kernel: SoftMAC: Associate: failed to initiate scan. Is device up?
Oct 27 06:45:22 linux kernel: bcm43xx: set security called, .level = 0, .enabled = 0, .encrypt = 0
Oct 27 06:45:22 linux kernel: SoftMAC: Associate: Scanning for networks first.
Oct 27 06:45:22 linux kernel: SoftMAC: Associate: failed to initiate scan. Is device up?
Oct 27 06:45:22 linux kernel: bcm43xx: set security called, .level = 0, .enabled = 0, .encrypt = 0
Oct 27 01:45:26 linux network: Shutting down the DHCP DBUS Daemon
Oct 27 01:45:26 linux dhcdbd: Shut down.
Oct 27 01:45:26 linux network: Shutting down the NetworkManagerDispatcher
Oct 27 01:45:26 linux network: Starting the DHCP DBUS Daemon
Oct 27 01:45:26 linux network: Starting the NetworkManagerDispatcher
Oct 27 01:45:26 linux network: Starting the NetworkManager
Oct 27 06:45:26 linux kernel: eth0: link down
Oct 27 06:45:26 linux kernel: ADDRCONF(NETDEV_UP): eth0: link is not ready
Oct 27 01:45:26 linux dhcdbd: Started up.
Oct 27 01:45:27 linux firmware.sh[4617]: Cannot find firmware file 'bcm43xx_microcode5.fw'
Oct 27 06:45:27 linux kernel: bcm43xx: Error: Microcode "bcm43xx_microcode5.fw" not available or load failed.
Oct 27 06:45:27 linux kernel: bcm43xx: core_up for active 802.11 core failed (-2)
Oct 27 01:45:29 linux SuSEfirewall2: batch committing...
Oct 27 01:45:29 linux SuSEfirewall2: Firewall rules unloaded.
Oct 27 01:45:29 linux SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
Oct 27 01:45:29 linux SuSEfirewall2: batch committing...
Oct 27 01:45:29 linux SuSEfirewall2: Firewall rules successfully set

El kernel estaba buscando a través de este script /lib/udev/firmware.sh el firmware y en ese scritpt menciona que busca dicha información en/usr/local/lib/firmware/.
Al usar bcm43xx-fwcutter se forman varios archivos entre ellos bcm43xx_microcode5.fw y moví dichos archivoss a /usr/local/lib/firmware/ directorio que porcierto tuve que crear.

Despues de eso la lectura en el kernel cambió a:


Oct 28 11:53:30 linux-pavillion ifup-dhcp: Starting DHCP Client Daemon on eth1...
Oct 28 11:53:30 linux-pavillion ifup-dhcp: .
Oct 28 11:53:30 linux-pavillion kernel: bcm43xx: Microcode rev 0x13f, pl 0xb (2006-03-15 21:28:24)
Oct 28 11:53:30 linux-pavillion kernel: bcm43xx: Firmware: no support for microcode extracted from version 4.x binary drivers.
Oct 28 11:53:30 linux-pavillion kernel: bcm43xx: core_up for active 802.11 core failed (-95)
Oct 28 11:53:30 linux-pavillion dhcpcd[15730]: dhcpStart: ioctl SIOCSIFFLAGS: Operation not supported
Oct 28 11:53:31 linux-pavillion ifup-dhcp: .
Oct 28 11:53:35 linux-pavillion ifup-dhcp: no IP address yet... backgrounding.

Y definitivamente a pesar de todos mis intentos no funcionó. Lo dejaré para la proxima versión de OpenSuSE.

Solución:

Usar ndiswrapper.

Los pasos son los mismos que usé el 14 de Octubre del 2006

linux-pavilion:/home/user/sp # /usr/sbin/ndiswrapper -i bcmwl5.inf
installing bcmwl5 ...
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
linux-pavilion:/home/user/sp #
linux-pavilion:/home/user/sp # /usr/sbin/ndiswrapper -l
bcmwl5 : driver installed
device (14E4:4318) present (alternate driver: bcm43xx)
linux-pavilion:/home/user/sp #

linux-pavilion:/home/user/sp # /usr/sbin/ndiswrapper -m

Adding "alias wlan0 ndiswrapper" to /etc/modprobe.conf
linux-pavilion:/home/user/sp #


Y cambia muchísimo al usar YaST, aunque se hace demasiado simple

Solo es necesario crear un nuevo dispositivo wireless que se active en el arranque
wlan0

No es necesario indicarle que use ndiswrapper, no es necesario indicar el "bus-pci" ni la "irq", de hecho tratar de hacerlo solo lo lleva a uno a la frustración.

Basta reiniciar y listo hay wireless.