# [solved] wicd: No Wireless Networks Found

## HungGarTiger

I've just put a fresh install on a Lenovo Ideapad I brought back from work and decided to use wicd-curses.

I've followed the guide here, the only thing I didn't do is add this to my rc.conf 

```
rc_hotplug="!net.enp3s0"
```

 because it just stopped my Ethernet connection from working. Both my wired connection and my wireless one worked perfectly initially until I rebooted. Now it in the curses interface it just says "No Wireless Networks Found"

I'm at a bit of a loss because my wireless card has the right drivers, the interface is correct and it worked initially so I'm not sure what changed once I rebooted...

ifconfig

Here is the output of dmesg.

Here is lspci -v

/etc/wicd/manager-settings.confLast edited by HungGarTiger on Fri Sep 08, 2017 11:35 pm; edited 1 time in total

----------

## charles17

 *HungGarTiger wrote:*   

> ... Now it in the curses interface it just says "No Wireless Networks Found"

 

What about deprecated wext?

----------

## HungGarTiger

 *charles17 wrote:*   

>  *HungGarTiger wrote:*   ... Now it in the curses interface it just says "No Wireless Networks Found" 
> 
> What about deprecated wext?

 

Yes, both of those options are installed in the kernel.

----------

## NeddySeagoon

HungGarTiger,

dmesg shows the interface loaded and is not complaining about missing firmware, so far so good.

However, there is no sign of any attempt to start the interface.  

Do 

```
ifconfig wlp4s0 up
```

If there are errors, report them here and pastebin a new dmesg.

If there are no errors, start wlp4s0 with your tool of choice.

----------

## HungGarTiger

 *NeddySeagoon wrote:*   

> HungGarTiger,
> 
> dmesg shows the interface loaded and is not complaining about missing firmware, so far so good.
> 
> However, there is no sign of any attempt to start the interface.  
> ...

 

Turned on the computer this morning and wireless was working, maybe it was just tired last night... I'm hesitant to mark the thread solved though as I'm not sure what is going on yet and if the issue will reappear.

----------

## NeddySeagoon

HungGarTiger,

Post dmesg again.  We may learn something by comparing the working and not working dmesg.

----------

## HungGarTiger

 *NeddySeagoon wrote:*   

> HungGarTiger,
> 
> Post dmesg again.  We may learn something by comparing the working and not working dmesg.

 

Here it is

----------

## NeddySeagoon

HungGarTiger,

Normally, that [    0.567078] rtl8188ee 0000:04:00.0: Direct firmware load for rtlwifi/rtl8188efw.bin failed with error -2 is game over but somehow it went on to work.

Even then, it complained about firmware.

Do you happen to do a warm boot from another operating system that might have loaded the firmware? 

```
[    0.566821] rtl8188ee: rtl8188ee: Power Save off (module option)

[    0.566830] rtl8188ee: rtl8188ee: FW Power Save off (module option)

[    0.566877] rtl8188ee: Using firmware rtlwifi/rtl8188efw.bin

[    0.567078] rtl8188ee 0000:04:00.0: Direct firmware load for rtlwifi/rtl8188efw.bin failed with error -2

[    0.567090] rtlwifi: Selected firmware is not available

[    0.567950] ieee80211 phy0: Selected rate control algorithm 'rtl_rc'

[    0.568183] rtlwifi: rtlwifi: wireless switch is on

...

[    5.671847] rtl8188ee 0000:04:00.0 wlp4s0: renamed from wlan0

[    8.217293] EXT4-fs (sda3): re-mounted. Opts: (null)

[    8.553286] Adding 1048572k swap on /dev/sda2.  Priority:-1 extents:1 across:1048572k 

[    8.740024] EXT4-fs (sda4): mounted filesystem with ordered data mode. Opts: (null)

[    9.630236] ip (2256) used greatest stack depth: 12936 bytes left

[   12.359608] rtl8188ee: Polling FW ready fail!! REG_MCUFWDL:0x00000006 .

[   12.359609] rtl8188ee: Firmware is not ready to run!

[   12.741765] IPv6: ADDRCONF(NETDEV_UP): wlp4s0: link is not ready

[   18.128362] r8169 0000:03:00.0 enp3s0: link down

[   18.128444] IPv6: ADDRCONF(NETDEV_UP): enp3s0: link is not ready

[   18.128591] ifconfig (2454) used greatest stack depth: 12616 bytes left

[   21.557825] rtl8188ee: Polling FW ready fail!! REG_MCUFWDL:0x00000006 .

[   21.557827] rtl8188ee: Firmware is not ready to run!

[   21.953988] IPv6: ADDRCONF(NETDEV_UP): wlp4s0: link is not ready

[   22.017284] r8169 0000:03:00.0 enp3s0: link down

[   22.017364] IPv6: ADDRCONF(NETDEV_UP): enp3s0: link is not ready

[   22.171623] rtl8188ee: Polling FW ready fail!! REG_MCUFWDL:0x00000006 .

[   22.171625] rtl8188ee: Firmware is not ready to run!

[   22.556820] IPv6: ADDRCONF(NETDEV_UP): wlp4s0: link is not ready

[   25.753493] wlp4s0: authenticate with 18:f1:45:46:53:b0

[   25.772983] wlp4s0: send auth to 18:f1:45:46:53:b0 (try 1/3)

[   26.722606] wlp4s0: send auth to 18:f1:45:46:53:b0 (try 2/3)

[   26.843877] wlp4s0: authenticated

[   26.844572] wlp4s0: associate with 18:f1:45:46:53:b0 (try 1/3)

[   26.848039] wlp4s0: RX AssocResp from 18:f1:45:46:53:b0 (capab=0x1411 status=0 aid=3)

[   26.851662] wlp4s0: associated

[   26.851682] IPv6: ADDRCONF(NETDEV_CHANGE): wlp4s0: link becomes ready
```

```
[    0.494397] rtl8188ee: rtl8188ee: Power Save off (module option)

[    0.494406] rtl8188ee: rtl8188ee: FW Power Save off (module option)

[    0.494457] rtl8188ee: Using firmware rtlwifi/rtl8188efw.bin

[    0.494663] rtl8188ee 0000:04:00.0: Direct firmware load for rtlwifi/rtl8188efw.bin failed with error -2

[    0.494676] rtlwifi: Selected firmware is not available

```

 and as expected, its all over.

Your rtl8188ee driver is built into the kernel binary.  It can be made to work that way but life is easier if you make the driver a loadable module.

Here's the background.

Most wifi drivers are in two pieces. The kernel code, which you have built into your kernel, and firmware that is loaded into the device when the kernel module initialises.

The important bit there is "when the kernel module initialises"  

That means that with the driver built into the kernel, rtlwifi/rtl8188efw.bin must be in the kernel too.

When its a loadable module rtlwifi/rtl8188efw.bin can be on the root filesystem, as root will be mounted when the kernel module initialises.

rtlwifi/rtl8188efw.bin is provided by linux-firmware.  Check for /lib/firmware/rtlwifi/rtl8188efw.bin.  

I don't have your kernel config but for built in firmware you need

```
  │ │                (rtlwifi/rtl8188efw.bin) External firmware blobs to build into the kernel binary      │ │  

  │ │                (/lib/firmware) Firmware blobs root directory 
```

Search for the  CONFIG_EXTRA_FIRMWARE symbol in menuconfig.

----------

## HungGarTiger

Well I turned on the notebook this morning and the wireless was failing to load again, so yes it seems your point is proven   :Laughing: 

 *NeddySeagoon wrote:*   

> Do you happen to do a warm boot from another operating system that might have loaded the firmware? 

 

I'm not sure but, I do ssh into my various devices. Would that classify as a warm boot?

 *NeddySeagoon wrote:*   

> Your rtl8188ee driver is built into the kernel binary.  It can be made to work that way but life is easier if you make the driver a loadable module.
> 
> Here's the background.
> 
> Most wifi drivers are in two pieces. The kernel code, which you have built into your kernel, and firmware that is loaded into the device when the kernel module initialises.
> ...

 

I rebuilt the rtl8188ee driver as a module and rebuilt my kernel and it loaded first time after a reboot. I've included dmesg here for you to check. It seems to have gone through first time but, I'm not the most experienced at reading dmesg.

----------

## NeddySeagoon

HungGarTiger,

That's a dead giveaway. 

```
[    5.996907] rtl8188ee: Using firmware rtlwifi/rtl8188efw.bin
```

Well done.

A warm boot in this instance is booting Windows, which will load the firmware, then booting Gentoo without powering off, so the firmware stays loaded.

The device works because Windows loaded the firmware.

Clearly the firmware was there previously (when it worked) as dmesg said 

```
[   22.171625] rtl8188ee: Firmware is not ready to run! 
```

but Gentoo didn't load it.

and wifi worked.

----------

## HungGarTiger

Awesome mate, cheers. I'll remember to load wifi drivers as modules in the future. Just out of interest though, when building a kernel on a new machine how do you know which drivers to build into the kernel and which to build as modules, as in this case. However, not building Ethernet drivers for example as a module.

I didn't warm boot anything it seems, I don't have windows installed on anything, maybe it just worked by some strange quirk of having been built into the kernel?

----------

## charles17

See this wiki article.

----------

## NeddySeagoon

HungGarTiger,

Somehow, something loaded the firmware and it wasn't Gentoo. Some other operating system (System Rescue CD?)

The firmware survived the reboot and wifi worked. 

Kernel built in modules are things you need to boot.  The things reeded to read your HDD and the root filesystem, so that root can be mounted.

Everything else can be a module, since once root is mounted, /lib/modules/.. can be read to load modules.

There is one move caveat. Drivers in two or more pieces, like your wifi, need to have all the pieces in the same place, so that they are all available at driver initialisation time.

That means adding the driver firmware to the kernel or making the driver a loadable module.  As you discovered, half and half doesn't work.

I tend to make everything I use regularly as built in and things I use rarely as modules.

----------

