# Intel PRO/Wireless 2200BG detected but not registered

## SysMan

Hello,

I've been trying for several days now to get my wireless connection up and running.

I feel I should succeed if only the system would register the network device, but this doesn't happen.

The reason given is "unable to load firmware".

I did not, indeed, have this firmware on the system, at first. So I thought adding it would crack the problem but having emerged it to what I believe to be the correct place, I still get the same error.

I'm a bit stuck for the time being, so I thought I would share a few outputs in the hope that someone might be able to give me a nudge in the right direction...:

```
iwconfig

lo        no wireless extensions.

eth0      no wireless extensions.

sit0      no wireless extensions.

```

Shouldn't there be a wlan0 or eth1 or something?

Here's output from lspci to confirm the device.

```

lspci|grep -i wireless

04:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG [Calexico2] Network Connection (rev 05)
```

and then dmesg with the error messages

```
dmesg | grep ipw

[    0.518512] ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.2.2k

[    0.520196] ipw2200: Copyright(c) 2003-2006 Intel Corporation

[    0.521962] ipw2200 0000:04:02.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21

[    0.523703] ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection

[   60.896063] ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2

[   60.897864] ipw2200: Unable to load firmware: -2

[   60.899661] ipw2200: failed to register network device

[   60.901481] ipw2200 0000:04:02.0: PCI INT A disabled

[   60.903283] ipw2200: probe of 0000:04:02.0 failed with error -5

[   60.905099] libipw: 802.11 data/management/control stack, git-1.1.13

[   60.906918] libipw: Copyright (C) 2004-2005 Intel Corporation <jketreno@linux.intel.com>
```

Finally the troublesome firmware...

```
ls /lib/firmware | grep ipw

LICENSE.ipw2200-fw

ipw2200-bss.fw

ipw2200-ibss.fw

ipw2200-sniffer.fw
```

Oh, and one other thing I checked:

```
grep -i config_fw /usr/src/linux/.iconfig

CONFIG_FW_LOADER=y
```

I've had the wireless connection working recently. Same machine, same everything - but running Arch Linux.

I'll be happy to supply any other information needed and most grateful for any help.

_______

Regards

SysMan

----------

## Gusar

Did you compile ipw2200 as module or built-in? I'm betting built-in. Compile it as module instead. Or, alternatively, compile also the firmware into the kernel.

----------

## SysMan

That was quick Gusar! I've been reading some of your other posts to get as far as I am, now. So thanks for those anyway   :Smile:  ...

In menuconfig I nearly always answer "y"  so for ipw2200 I have:

```
Device Drivers --->

 [*] Network device support --->

  [*] Wireless LAN --->

   <*> Intel PRO/Wireless 2200BG and 2915ABG Network Connection
```

I really can't find anything about the firmware in menuconfig just now... is it there? If so, I will have said "y".

I have to be up very early tomorrow   :Sad:  , so will try ipw2200 as module later on tomorrow and let you know the results.

________

Regards,

SysMan

----------

## chithanh

The options to compile firmware into the kernel are CONFIG_EXTRA_FIRMWARE and CONFIG_EXTRA_FIRMWARE_DIR. You can search for them in menuconfig by pressing /

----------

## SysMan

chithanh,

Thanks for pointing me to those .config symbols and especially at the search

facility.

A search on extra_firmware resulted in:

```
Symbol: EXTRA_FIRMWARE_DIR [=]

Type  : string

Prompt: Firmware blobs root directory

  Defined at drivers/base/Kconfig:132

  Depends on: EXTRA_FIRMWARE [=]!=

  Location:

    -> Device Drivers

      -> Generic Driver Options

      

Symbol: EXTRA_FIRMWARE [=]

Type  : string

Prompt: External firmware blobs to build into the kernel binary

  Defined at drivers/base/Kconfig:105

  Depends on: FW_LOADER [=y]

  Location:

    -> Device Drivers

      -> Generic Driver Options

        -> Userspace firmware loading support (FW_LOADER [=y])
```

...and the corresponding part of my menuconfig looks like so:

```
-*- Userspace firmware loading support

[*]   Include in-kernel firmware blobs in kernel binary

()    External firmware blobs to build into the kernel binary
```

...so it looks as if I'm saying I want it but not saying what I want it for, or

are these two entries referring to different types of firmware blobs?

I find it difficult to understand from reading the help.

Anyway I think I'll set Include in-kernel... etc. to [n] before trying ipw2200

as module.  

 *chithanh wrote:*   

> The options to compile firmware into the kernel are CONFIG_EXTRA_FIRMWARE and CONFIG_EXTRA_FIRMWARE_DIR. You can search for them in menuconfig by pressing /

 

_______

Regards

SysMan

----------

## Gusar

 *SysMan wrote:*   

> or are these two entries referring to different types of firmware blobs?

 

Indeed they are. The options you ticked is for *internal* firmware, as in firmware that's part of the kernel source. But ipw2200 requires *external* firmware. So you can tick that option off, it's not relevant.

Then, if you really really want ipw2200 not as module, you have to list the firmware files in CONFIG_EXTRA_FIRMWARE, then set CONFIG_EXTRA_FIRMWARE_DIR to /lib/firmware

----------

## SysMan

Gusar,

 *Gusar wrote:*   

> Did you compile ipw2200 as module or built-in? I'm betting built-in. Compile it as module instead. Or, alternatively, compile also the firmware into the kernel.

 

I have compiled the driver as module now.  After reboot the device showed up straight away in iwconfig as eth1.

After some slight trouble with wpa_supplicant, that now works as well so I can associate the device with the access point

and the link is up and running! Many thanks for you advice.  :Smile: 

I now want to figure out how I can replace starting up the wireless connection by hand - typing in:

```
wpa_supplicant -B -i eth1 -c /etc/wpa_supplicant/wpa_supplicant.conf 
```

...by an automatic process, the same as I do for the wired connection on eth0. (Not too sure how that works, to tell the truth)

I also need to figure out what will happen if both eth0 (wired) and eth1 (wireless) are up at the same time...

_______

Regards,

SysMan

----------

## chithanh

See http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=4&chap=4 how to configure the net scripts to bring up your wireless interface automatically.

----------

## SysMan

Gusar,

 *Gusar wrote:*   

>  *SysMan wrote:*   or are these two entries referring to different types of firmware blobs? 
> 
> Indeed they are. The options you ticked is for *internal* firmware, as in firmware that's part of the kernel source. But ipw2200 requires *external* firmware. So you can tick that option off, it's not relevant.
> 
> Then, if you really really want ipw2200 not as module, you have to list the firmware files in CONFIG_EXTRA_FIRMWARE, then set CONFIG_EXTRA_FIRMWARE_DIR to /lib/firmware

 

Thanks for clarifying that.

_______

Regards,

SysMan

----------

## SysMan

chithanh,

 *chithanh wrote:*   

> See http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=4&chap=4 how to configure the net scripts to bring up your wireless interface automatically.

 

Thanks for the link. Unfortunately it looks as if I was shouting too soon, just now - as I can't in fact start the wireless connection, even by hand...  :Sad: 

```
ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000

    link/ether 00:15:58:09:b0:cb brd ff:ff:ff:ff:ff:ff

3: sit0: <NOARP> mtu 1480 qdisc noop state DOWN 

    link/sit 0.0.0.0 brd 0.0.0.0

4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:16:6f:14:2a:aa brd ff:ff:ff:ff:ff:ff

    inet6 fe80::216:6fff:fe14:2aaa/64 scope link 

       valid_lft forever preferred_lft forever

ping -c 3 www.google.com

ping: unknown host www.google.com
```

I'd unplugged the network cable on eth0 for the test and I've used ip addr to show the link is up (but perhaps there are better ways?)

As you see the ping doesn't work.

Upated next morning:

On a hunch, I decided to change the driver specified in /etc/conf.d/net.

I'd left it at "madwifi" as shown in the handbook. When running Arch Linux I'd used

"wext" which had worked. So I thought I would give that a try instead, and it seems to work fine!

I realise this is not a very scientific way of going about it, but a change like that is

quickly tested and I can figure out the "why" and "how" at leisure.

Here's the adapted /etc/conf.d/net:

```
cat /etc/conf.d/net

# This blank configuration will automatically use DHCP for any net.*

# scripts in /etc/init.d.  To create a more complete configuration,

# please review /usr/share/doc/openrc/net.example and save your configuration

# in /etc/conf.d/net (this file :]!).

# (The following one - which has always been here ASFAIK - appears to

# corresponds to a 750-odd line script, /etc/conf.d/net.eth0, in conf.d)

# should we have something like this for eth1, the wireless device?

config_eth0="dhcp"

# Prefer wpa_supplicant over wireless-tools

modules="wpa_supplicant"

# It's important that we tell wpa_supplicant which driver we should

# be using as it's not very good at guessing yet (says writer of

# section 4.b WPA Supplicant in chapter 4 Wireless Networking in part D.

# Gentoo Network Configuration of Gentoo Linux x86 Handbook.)

# Since something doesn't work with the wireless link - trying another driver here

# wpa_supplicant_eth1="-Dmadwifi"

wpa_supplicant_eth1="-Dwext"
```

Thanks, once more for all your help and any further comments will be received with grateful interest.

_______

Regards,

SysMan

----------

## kimmie

Hi chithanh, I had problems with my 2200BG switching to a low rate and then getting stuck there. Probably it was just having a disagreement with my AP... anyway, I ended up with this in /etc/local.d/ipw2200.start. But don't lock the rate unless you're sure there's a problem, just passing on some info:

```
# Set ipw2200 to g-only

# /usr/src/linux/Documentation/networking/README.ipw2200

# You'd think this would be better in /etc/conf.d/net preup() but that

# leads to disconnection during connection loopiness

iwpriv wlan set_mode 4

# Lock rate, else it slows down, never goes up, more stupidity

iwconfig wlan rate 54M
```

----------

