While installing Funtoo on my laptop, I had about the most difficult time I’ve ever had trying to get WiFi working. I prefer Intel wireless cards over other vendors as they are usually really easy to get working in Linux. For the record, I have the Ultimate-N 6300 card.
Intel wireless cards require external firmware to be programed into their RAM on startup. This firmware is distributed by Intel, separate from the kernel driver. In the case of Gentoo/Funtoo, there is the iwl6000-ucode package for my card. For the current version, it places the file
/lib/firmware, exactly where it should be. After compiling my kernel with the iwlagn driver included, I rebooted, and was greeted with wpa_supplicant not finding a wireless card. Checking
dmesg I found the following message:
iwlagn 0000:0c:00.0: request for firmware file ‘iwlwifi-6000-4.ucode’ failed.
iwlagn 0000:0c:00.0: no suitable firmware found!
iwlagn 0000:0c:00.0: PCI INT A disabled
Normally, this is the message you will get when the firmware hasn’t been installed to the correct directory (
/lib/firmware). However, in my case the firmware was sitting under
/lib/firmware, iwlagn just could not find it. The issue is when iwlagn is built into the kernel it will try to load the firmware before the firmware is actually available. There ends up being two solutions to this problem.
If you do not want to have any kernel modules, you can bundle the firmware into the kernel image, or into your initramfs (if you use an initramfs). I like to keep the number of modules to a minimum (keep them for devices I may not always have connected), and I only compile the minimum number of drivers into the kernel for my hardware to work. I don’t run an initramfs as it is slow (can double the time it takes to boot, and with the SSD I’m seeing sub 7 second boot times). So this method doesn’t really mesh well with what I’m trying to do.
The much simpler way to fix this is to just compile iwlagn as a module. Then add it to the list of autoloaded modules in your
/etc/conf.d/modules file. Reboot and you should see iwlagn loads up correctly, finds the firmware microcode and initializes the wireless card.
[end of transmission, stay tuned]